Fact alpha_nat_gt_0 : forall n, n <> 0 -> alpha_nat n <> 0.
Fact alpha_nat_le n : alpha_nat n <= b_nat * alpha_nat (S n).
Notation power := (mscal mult 1).
Fact alpha_nat_power n : 2 < b_nat -> power n (b_nat-1) <= alpha_nat (S n) <= power n b_nat.
Open Scope Z.
Let b := Z.of_nat b_nat.
Let Hb : 2 <= b.
Fact alpha_inc n : α n < α (S n).
Fact alpha_ge_0 n : 0 <= α (S n).
Opaque α.
Create HintDb alpha_db.
Hint Rewrite alpha_fix_0 alpha_fix_1 alpha_fix_2 alpha_fix_3 : alpha_db.
Ltac alpha := autorewrite with alpha_db.
Fact alpha_2 : b = 2 -> forall n, α n = Z.of_nat n - 1.
Notation MZ := (M22 Z).
Notation MZ_opp := (MI22 Z.opp).
Notation MZ_plus := (PL22 Zplus).
Notation MZ_mult := (MU22 Zplus Zmult).
Notation MZ_zero := (ZE_22 0).
Notation MZ_one := (ID_22 0 1).
Notation MZ_scal := (M22scal Zmult).
Notation MZ_expo := (mscal MZ_mult MZ_one).
Notation MZ_det := (Det22 Zplus Zmult Z.opp).
Local Fact MZ_plus_monoid : monoid_theory MZ_plus MZ_zero.

(* Specifications: *)
Lemma MZ_expo_A n : MZ_expo n B = A n.
Hint Resolve MZ_expo_A.