test(tests/lean/run): add definition package tests

This commit is contained in:
Leonardo de Moura 2015-03-09 08:42:21 -07:00
parent 167675a397
commit 4904f7657f
2 changed files with 62 additions and 0 deletions

View file

@ -0,0 +1,30 @@
import algebra.function
open bool nat
open function
inductive univ :=
| ubool : univ
| unat : univ
| uarrow : univ → univ → univ
open univ
definition interp : univ → Type₁
| ubool := bool
| unat := nat
| (uarrow fr to) := interp fr → interp to
definition foo : Π (u : univ) (el : interp u), interp u
| ubool tt := ff
| ubool ff := tt
| unat n := succ n
| (uarrow fr to) f := λ x : interp fr, f (foo fr x)
definition is_even : nat → bool
| zero := tt
| (succ n) := bnot (is_even n)
example : foo unat 10 = 11 := rfl
example : foo ubool tt = ff := rfl
example : foo (uarrow unat ubool) (λ x : nat, is_even x) 3 = tt := rfl
example : foo (uarrow unat ubool) (λ x : nat, is_even x) 4 = ff := rfl

View file

@ -0,0 +1,32 @@
import data.nat
open nat
inductive Parity : nat → Type :=
| even : ∀ n : nat, Parity (2 * n)
| odd : ∀ n : nat, Parity (2 * n + 1)
open Parity
definition parity : Π (n : nat), Parity n
| parity 0 := even 0
| parity (n+1) :=
begin
have aux : Parity n, from parity n,
cases aux with (k, k),
begin
apply (odd k)
end,
begin
change (Parity (2*k + 2*1)),
rewrite -mul.left_distrib,
apply (even (k+1))
end
end
print definition parity
definition half (n : nat) : nat :=
match ⟨n, parity n⟩ with
| ⟨⌞2 * k⌟, even k⟩ := k
| ⟨⌞2 * k + 1⌟, odd k⟩ := k
end