39 lines
758 B
Text
39 lines
758 B
Text
structure Point where
|
||
x : Nat
|
||
y : Nat
|
||
|
||
def f (x : Nat) : Point :=
|
||
let y := x + 1
|
||
{ x, y }
|
||
|
||
theorem ex1 : f x = { x, y := x + 1 } :=
|
||
rfl
|
||
|
||
def g (p : Point) : Nat :=
|
||
p.x + p.y
|
||
|
||
def Set (α : Type u) : Type u :=
|
||
α → Prop
|
||
|
||
def Set.empty : Set α :=
|
||
fun a => False
|
||
|
||
def Set.insert (s : Set α) (a : α) : Set α :=
|
||
fun x => x = a ∨ s a
|
||
|
||
syntax (name := finSet) "{" term,* "}" : term
|
||
|
||
macro_rules (kind := finSet)
|
||
| `({ $as,* }) => do
|
||
as.getElems.foldlM (β := Lean.TSyntax _) (init := ← `(Set.empty)) fun s a => `(Set.insert $s $a)
|
||
|
||
#check { 1, 2, 3 }
|
||
|
||
#check fun x y => g {x, y}
|
||
|
||
#check fun x y : Nat => {x, y}
|
||
|
||
#check fun x y : Nat => {x, y : Point}
|
||
|
||
theorem ex2 (x y : Nat) : { x, y } = (Set.empty.insert x |>.insert y) :=
|
||
rfl
|