Definition fib_mat := mat2 1 1 1 0.

(* Specifications: *)
Lemma fib_mat_n : forall (n : nat) (a b d : nat), power Mat2 matrix fib_mat n = mat2 a b b d -> power Mat2 matrix fib_mat (S n) = mat2 (a + b) (b + d) a b.
Lemma fib_n : forall n : nat, power Mat2 matrix fib_mat (S n) = mat2 (shift_Fib (S (S n))) (shift_Fib (S n)) (shift_Fib (S n)) (shift_Fib n).
Lemma fib_computation : forall n : nat, 0 < n -> Fib n = M11 (power Mat2 matrix fib_mat n).
Lemma fib_mat_n : forall (n : nat) (a b d : Z), power Mat2 matrix fib_mat n = mat2 a b b d -> power Mat2 matrix fib_mat (S n) = mat2 (a + b) (b + d) a b.
Lemma fib_n : forall n : nat, power Mat2 matrix fib_mat (S n) = mat2 (Z_of_nat (shift_Fib (S (S n)))) (Z_of_nat (shift_Fib (S n))) (Z_of_nat (shift_Fib (S n))) (Z_of_nat (shift_Fib n)).
Lemma fib_computation : forall n : nat, 0 < n -> Z_of_nat (Fib n) = M11 (power Mat2 matrix fib_mat n).