50 lines
1 KiB
Text
50 lines
1 KiB
Text
def diag : Bool → Bool → Bool → Nat
|
||
| b, true, false => 1
|
||
| false, b, true => 2
|
||
| true, false, b => 3
|
||
| b1, b2, b3 => default
|
||
|
||
theorem diag1 (a : Bool) : diag a true false = 1 :=
|
||
match a with
|
||
| true => rfl
|
||
| false => rfl
|
||
|
||
theorem diag2 (a : Bool) : diag false a true = 2 :=
|
||
by cases a; exact rfl; exact rfl
|
||
|
||
theorem diag3 (a : Bool) : diag true false a = 3 :=
|
||
by cases a; exact rfl; exact rfl
|
||
|
||
theorem diag4_1 : diag false false false = default :=
|
||
rfl
|
||
|
||
theorem diag4_2 : diag true true true = default :=
|
||
rfl
|
||
|
||
def f : Nat → Nat → Nat
|
||
| n, 0 => 0
|
||
| 0, n => 1
|
||
| n, m => default
|
||
|
||
theorem f_zero_right : (a : Nat) → f a 0 = 0
|
||
| 0 => rfl
|
||
| a+1 => rfl
|
||
|
||
theorem f_zero_succ (a : Nat) : f 0 (a+1) = 1 :=
|
||
rfl
|
||
|
||
theorem f_succ_succ (a b : Nat) : f (a+1) (b+1) = default :=
|
||
rfl
|
||
|
||
def app {α} : List α → List α → List α
|
||
| [], l => l
|
||
| h::t, l => h :: (app t l)
|
||
|
||
theorem app_nil {α} (l : List α) : app [] l = l :=
|
||
rfl
|
||
|
||
theorem app_cons {α} (h : α) (t l : List α) : app (h :: t) l = h :: (app t l) :=
|
||
rfl
|
||
|
||
theorem ex : app [1, 2] [3,4,5] = [1,2,3,4,5] :=
|
||
rfl
|