blob: d3110a1870ff89bd82e8ca208dcc2397f4dfaa8f [file] [edit]
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