| 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 |