lean4-htt/tests/lean/structInst1.lean
2022-09-13 07:09:08 -07:00

43 lines
786 B
Text

structure A where
x : Nat
w : Nat
structure B extends A where
y : Nat
structure C extends B where
z : Nat
def f1 (c : C) (a : A) : C :=
{ c with toA := a, x := 0 } -- Error, `toA` and `x` are both updates to field `x`
def f2 (c : C) (a : A) : C :=
{ c with toA := a }
def f3 (c : C) (a : A) : C :=
{ a, c with x := 0 }
theorem ex1 (a : A) (c : C) : (f3 c a).x = 0 :=
rfl
theorem ex2 (a : A) (c : C) : (f3 c a).w = a.w :=
rfl
def f4 (c : C) (a : A) : C :=
{ c, a with x := 0 } -- TODO: generate error that `a` was not used?
theorem ex3 (a : A) (c : C) : (f4 c a).w = c.w :=
rfl
theorem ex4 (a : A) (c : C) : (f4 c a).x = 0 :=
rfl
def f5 (c : C) (a : A) :=
{ c, a with x := 0 }
#check f5
def f6 (c : C) (a : A) :=
{ a, c with x := 0 }
#check f6