70 lines
1.4 KiB
Text
70 lines
1.4 KiB
Text
def f1 (x : Nat × Nat) : Nat :=
|
||
match x with
|
||
| { fst := x, snd := y } => x - y
|
||
|
||
#eval f1 (20, 15)
|
||
|
||
def g1 (h : Nat × Nat × Nat → Nat) : Nat :=
|
||
h (1, 2, 3)
|
||
|
||
def f2 (w : Nat) : Nat :=
|
||
g1 fun (x, y, z) => x + y + z + w
|
||
|
||
#eval f2 10
|
||
|
||
def g2 (h : Nat × Nat → Nat × Nat → Nat) : Nat :=
|
||
h (1, 2) (20, 40)
|
||
|
||
def f3 (a : Nat) : Nat :=
|
||
g2 fun (x, y) (z, w) => a*(y - x) + (w - z)
|
||
|
||
#eval f3 100
|
||
|
||
def f4 (x : Nat × Nat) : Nat :=
|
||
let (a, b) := x;
|
||
a + b
|
||
|
||
#eval f4 (10, 20)
|
||
|
||
def f5 (x y : Nat) : Nat :=
|
||
let h : Nat → Nat → Nat
|
||
| 0, b => b
|
||
| a, b => a*b;
|
||
h x y
|
||
|
||
#eval f5 0 10
|
||
#eval f5 20 10
|
||
|
||
def f6 (x : Nat × Nat) : Nat :=
|
||
match x with
|
||
| { fst := x, .. } => x * 10
|
||
|
||
#eval f6 (5, 20)
|
||
|
||
def Vector' (α : Type) (n : Nat) := { a : Array α // a.size = n }
|
||
|
||
def mkVec {α : Type} (n : Nat) (a : α) : Vector' α n :=
|
||
⟨Array.replicate n a, Array.size_replicate ..⟩
|
||
|
||
structure S :=
|
||
(n : Nat)
|
||
(y : Vector' Nat n)
|
||
(z : Vector' Nat n)
|
||
(h : y = z)
|
||
(m : { v : Nat // v = y.val.size })
|
||
|
||
def f7 (s : S) : Nat :=
|
||
match s with
|
||
| { n := n, m := m, .. } => n + m.val
|
||
|
||
#eval f7 { n := 10, y := mkVec 10 0, z := mkVec 10 0, h := rfl, m := ⟨10, rfl⟩ }
|
||
|
||
inductive Bla : Unit → Unit × Unit → Type where
|
||
| left : Bla a (a, b)
|
||
| right : Bla b (a, b)
|
||
|
||
def f8 : ∀ x y, Bla x y → Unit
|
||
| _, _, .left => ()
|
||
| _, _, .right => ()
|
||
|
||
example (x : Bla () ((), ())) : f8 () ((), ()) x = () := by simp only [f8]
|