(* Notion of bijection: *)

Definition bij_dart(Df:dart->Prop)(f:dart->dart):Prop:=              inj_dart Df f /\ surj_dart Df f.

(* Specifications: *)
Theorem bij_cA : forall (m:fmap)(k:dim), inv_hmap m -> bij_dart (exd m) (cA m k).
Theorem bij_cA_1 : forall (m:fmap)(k:dim), inv_hmap m -> bij_dart (exd m) (cA_1 m k).
Lemma not_exd_D : forall (m:fmap)(x:dart), inv_hmap m -> ~exd (D m x) x.
Lemma exd_D : forall (m:fmap)(x z:dart), inv_hmap m -> x <> z -> (exd m z <-> exd (D m x) z).
Lemma exd_B : forall (m:fmap)(k:dim)(x z:dart), exd m z <-> exd (B m k x) z.
Lemma exd_B_1 : forall (m:fmap)(k:dim)(x z:dart), exd m z <-> exd (B_1 m k x) z.
Lemma not_succ_B:forall(m:fmap)(k:dim)(z:dart), inv_hmap m -> ~succ m k z -> B m k z = m.
Lemma not_pred_B_1:forall(m:fmap)(k:dim)(z:dart), inv_hmap m -> ~pred m k z -> B_1 m k z = m.
Lemma A_B : forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> A (B m k x) k x = nil.
Lemma A_B_bis : forall (m:fmap)(k:dim)(x y:dart), y<>x -> A (B m k x) k y = A m k y.
Lemma A_B_ter : forall (m:fmap)(k j:dim)(x y:dart), k<>j -> A (B m k x) j y = A m j y.
Lemma B_not_exd : forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> ~exd m x -> B m k x = m.
Lemma B_nil : forall (m:fmap)(k:dim), inv_hmap m -> B m k nil = m.
Lemma B_1_not_exd : forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> ~exd m x -> B_1 m k x = m.
Lemma B_1_nil : forall (m:fmap)(k:dim), inv_hmap m -> B_1 m k nil = m.
Lemma A_1_B : forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> A_1 (B m k x) k (A m k x) = nil.
Lemma A_1_B_bis : forall (m:fmap)(k:dim)(x y:dart), inv_hmap m -> y <> A m k x -> A_1 (B m k x) k y = A_1 m k y.
Lemma A_1_B_ter : forall (m:fmap)(k j:dim)(x y:dart), k<>j -> A_1 (B m k x) j y = A_1 m j y.
Lemma A_1_B_1 : forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> A_1 (B_1 m k x) k x = nil.
Lemma A_1_B_1_bis : forall (m:fmap)(k:dim)(x y:dart), inv_hmap m -> y <> x -> A_1 (B_1 m k x) k y = A_1 m k y.
Lemma A_1_B_1_ter : forall (m:fmap)(k j:dim)(x y:dart), k<>j -> A_1 (B_1 m k x) j y = A_1 m j y.
Lemma A_B_1 : forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> A (B_1 m k x) k (A_1 m k x) = nil.
Lemma A_B_1_bis : forall (m:fmap)(k:dim)(x y:dart), inv_hmap m -> y <> A_1 m k x -> A (B_1 m k x) k y = A m k y.
Lemma A_B_1_ter : forall (m:fmap)(k j:dim)(x y:dart), k<>j -> A (B_1 m k x) j y = A m j y.