Equivalence of definitions of the Fibonacci function
In Lean4, the Fibonacci function can be defined as
def fibonacci : Nat → Nat | 0 => 0 | 1 => 1 | n + 2 => fibonacci n + fibonacci (n+1)
Another more efficient definition is
def fib (n : Nat) : Nat := (loop n).1 where loop : Nat → Nat × Nat | 0 => (0, 1) | n + 1 => let p := loop n (p.2, p.1 + p.2)
Prove that both definitions are equivalent; that is,
fibonacci = fib
To do this, complete the following Lean4 theory:
open Nat set_option pp.fieldNotation false def fibonacci : Nat → Nat | 0 => 0 | 1 => 1 | n + 2 => fibonacci n + fibonacci (n+1) def fib (n : Nat) : Nat := (loop n).1 where loop : Nat → Nat × Nat | 0 => (0, 1) | n + 1 => let p := loop n (p.2, p.1 + p.2) example : fibonacci = fib := by sorry