53 lines
1.1 KiB
Text
53 lines
1.1 KiB
Text
inductive term
|
||
| var : string → term
|
||
| app : string → list term → term
|
||
|
||
example (h : term.var "a" = term.app "f" []) : false :=
|
||
begin
|
||
simp at h,
|
||
exact false.elim h
|
||
end
|
||
|
||
example : ¬ term.var "a" = term.app "f" [] :=
|
||
by simp
|
||
|
||
universes u
|
||
|
||
inductive vec (α : Type u) : nat → Type u
|
||
| nil : vec 0
|
||
| cons : Π {n}, α → vec n → vec (nat.succ n)
|
||
|
||
#check @vec.cons.inj_eq
|
||
|
||
example (a b : nat) (h : a == b) : a + 1 = b + 1 :=
|
||
begin
|
||
subst h
|
||
end
|
||
|
||
mutual inductive Expr, Expr_list
|
||
with Expr : Type
|
||
| var : string → Expr
|
||
| app : string → Expr_list → Expr
|
||
with Expr_list : Type
|
||
| nil : Expr_list
|
||
| cons : Expr → Expr_list → Expr_list
|
||
|
||
#check @Expr.app.inj_eq
|
||
|
||
example {α : Type u} (n : nat) (a₁ a₂ : α) (t : vec α n) (h : vec.cons a₁ t = vec.cons a₂ t) : a₁ = a₂ :=
|
||
begin
|
||
simp at h,
|
||
exact h
|
||
end
|
||
|
||
example (a₁ a₂ : nat) (h₁ : a₁ > 0) (h₂ : a₂ > 0) (h : a₁ = a₂) : subtype.mk a₁ h₁ = subtype.mk a₂ h₂ :=
|
||
begin
|
||
simp,
|
||
exact h
|
||
end
|
||
|
||
example (a₁ a₂ : nat) (h₁ : a₁ > 0) (h₂ : a₂ > 0) (h : subtype.mk a₁ h₁ = subtype.mk a₂ h₂) : a₁ = a₂ :=
|
||
begin
|
||
simp at h,
|
||
exact h
|
||
end
|