-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfibonacci.lean
More file actions
39 lines (28 loc) · 1.04 KB
/
fibonacci.lean
File metadata and controls
39 lines (28 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#eval Lean.versionString
notation "ℕ" => Nat
-- computable def fac (n : ℕ) : ℕ :=
-- def fibonacci : Nat → Nat
def fibonacci : ℕ → ℕ
| 0 => 0
| 1 => 1
| (n + 2) => fibonacci (n + 1) + fibonacci n
#eval fibonacci 5
-- Prove that fibonacci 0 = 0
theorem fibonacci_zero : fibonacci 0 = 0 := rfl
-- Prove that fibonacci 1 = 1
theorem fibonacci_one : fibonacci 1 = 1 := rfl
-- Prove that fibonacci 2 = 1
theorem fibonacci_two : fibonacci 2 = 1 := rfl
-- Prove that fibonacci is increasing (fibonacci n ≤ fibonacci (n + 1))
theorem fibonacci_mono (n : ℕ) : fibonacci n ≤ fibonacci (n + 1) :=
match n with
| 0 => by simp [fibonacci]
| 1 => by simp [fibonacci]
| n + 2 => Nat.le_add_right _ _
-- Prove that fibonacci satisfies its recursive definition
theorem fibonacci_succ_succ (n : ℕ) : fibonacci (n + 2) = fibonacci (n + 1) + fibonacci n := rfl
-- Prove an explicit formula for small values
example : fibonacci 3 = 2 := rfl
example : fibonacci 4 = 3 := rfl
example : fibonacci 5 = 5 := rfl
example : fibonacci 6 = 8 := rfl