diff --git a/basics/main.lean b/basics/main.lean index d86c61d..1ebfa67 100644 --- a/basics/main.lean +++ b/basics/main.lean @@ -152,5 +152,86 @@ end TuplePlayground --- Numbers namespace NatPlayground +#eval Nat.zero +#eval Nat.zero.succ +#eval Nat.zero.succ.succ +example : Nat.zero.succ.succ = 2 := by rfl + end NatPlayground +open Nat in +#check succ (succ (succ 0)) + +def minustwo (n : Nat) : Nat := + match n with + | 0 => 0 + | .succ .zero => 0 + | .succ (.succ n') => n' + +#eval minustwo 4 + +def even (n : Nat) : Bool := + match n with + | .zero => true + | .succ .zero => false + | .succ (.succ n') => even n' + +example : even 4 = true := by + rfl +example : even 51 = false := by + rfl + +namespace NatPlayground2 + +def plus (n : Nat) (m : Nat) : Nat := + match n with + | .zero => m + | .succ n' => .succ (plus n' m) + +#eval plus 3 4 + +def mult (n m : Nat) : Nat := + match n with + | .zero => .zero + | .succ n' => plus m (mult n' m) + +end NatPlayground2 + +namespace Exercise1 + +def factorial (n : Nat) : Nat := + match n with + | 0 => 1 + | .succ n' => (n' + 1) * factorial n' + +#eval factorial 3 + +example : factorial 3 = 6 := by + rfl + +example : factorial 5 = .mul 10 12 := by + rfl + +end Exercise1 + +#check LT.lt 1 2 +#check LT Nat +#check (LT Nat) +#check Nat.lt 1 2 + +namespace Exercise1 + +def ltb (n m : Nat) : Bool := + match n, m with + | 0, _ => true + | _, 0 => false + | .succ n', .succ m' => ltb n' m' + +#eval ltb 1 2 +#eval ltb 10242 1055090 +example : (ltb 1 2) = true := by rfl + +end Exercise1 + +--- Proof by Simplification +