| structure Foo.A where | |
| x : Nat | |
| structure Boo.A extends Foo.A where | |
| y : Nat | |
| structure B extends Boo.A where | |
| z : Nat | |
| def f1 (x y z : Nat) : B := | |
| { x, y, z } | |
| theorem ex1 (x y z : Nat) : f1 x y z = ⟨⟨⟨x⟩, y⟩, z⟩ := | |
| rfl | |
| theorem ex2 (x y z : Nat) : f1 x y z = B.mk (Boo.A.mk (Foo.A.mk x) y) z := | |
| rfl | |
| #check { x := 0, y := 1, z := 2 : B } | |
| structure Foo.C where | |
| x : Nat | |
| y : Nat | |
| structure Boo.C where | |
| x : Nat | |
| z : Nat | |
| structure D extends Foo.C, Boo.C | |
| def f2 (x y z : Nat) : D := | |
| { x, y, z } | |
| theorem ex3 (x y z : Nat) : f2 x y z = D.mk ⟨x, y⟩ z := | |
| rfl | |
| #check { x := 0, y := 1, z := 2 : D } | |
| #print D.toC_1 |