Now, `universe` may declare many universes. The goal is to make it consistent with the `variable` command
43 lines
936 B
Text
43 lines
936 B
Text
|
||
|
||
def g : List Nat → List Nat → Nat
|
||
| [], y::ys => y
|
||
| [], ys => 0
|
||
| x1::x2::xs, ys => g xs ys
|
||
| x::xs, y::ys => g xs ys + y
|
||
| x::xs, [] => g xs []
|
||
|
||
universe u v
|
||
|
||
inductive Imf {α : Type u} {β : Type v} (f : α → β) : β → Type (max u v)
|
||
| mk : (a : α) → Imf f (f a)
|
||
|
||
def h {α β} {f : α → β} : {b : β} → Imf f b → α
|
||
| _, Imf.mk a => a
|
||
|
||
theorem ex1 {α β} (f : α → β) (a : α) : h (Imf.mk (f := f) a) = a :=
|
||
rfl
|
||
|
||
def v₁ : Imf Nat.succ 1 :=
|
||
Imf.mk 0
|
||
|
||
def v₂ : Imf (fun x => 1 + x) 1 :=
|
||
Imf.mk 0
|
||
|
||
theorem ex2 : h v₁ = 0 :=
|
||
rfl
|
||
|
||
theorem ex3 : h v₂ = 0 :=
|
||
rfl
|
||
|
||
theorem ex4 {α} : {a b : α} → a = b → b = a
|
||
| _, _, rfl => rfl
|
||
|
||
theorem ex5 {α} : {a b : α} → a = b → b = a
|
||
| a, .(a), rfl => rfl
|
||
|
||
theorem ex6 {α} : {a b : α} → a = b → b = a
|
||
| a, .(a), Eq.refl .(a) => rfl
|
||
|
||
theorem ex7 {α} : {a b : α} → a = b → b = a
|
||
| .(a), a, Eq.refl .(a) => rfl
|