(* IDEM: *)

(* Specifications: *)
Lemma exd_A_1_exd :
forall (m : fmap) (k : dim) (z : dart),
inv_hmap m -> exd m (A_1 m k z) -> exd m z.
Lemma cA_cA_1 :
forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z ->
cA m k (cA_1 m k z) = z.
Lemma surj_cA_1 : forall (m:fmap)(k:dim), inv_hmap m ->
surj_dart (exd m) (cA_1 m k).
Theorem bij_cA_1 : forall (m:fmap)(k:dim), inv_hmap m ->
bij_dart (exd m) (cA_1 m k).
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 nopred_bottom : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z -> ~pred m k z ->
bottom m k z = z.
Lemma bottom_top_bis:forall(m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z ->
bottom m k (top m k z) = bottom m k z.
Lemma cA_1_top : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z -> ~pred m k z ->
cA_1 m k z = top m k z.
Lemma cA_1_eq_aux : forall(m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z ->
cA_1 m k z =
if pred_dec m k z then A_1 m k z
else top m k z.
Lemma bottom_top : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z -> ~pred m k z ->
bottom m k (top m k z) = z.
Lemma bottom_A_1 : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> pred m k z ->
bottom m k (A_1 m k z) = bottom m k z.
Lemma top_A_1 : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> pred m k z ->
top m k (A_1 m k z) = top m k z.
Lemma not_pred_bottom : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m ->
~pred m k (bottom m k z).
Lemma bottom_bottom_1 : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> ~ pred m k z ->
bottom m k (bottom m k z) = bottom m k z.
Lemma bottom_bottom_2 : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> pred m k z ->
bottom m k (bottom m k z) = bottom m k z.
Lemma pred_top :forall (m:fmap)(k:dim)(x:dart),
inv_hmap m -> pred m k x ->
top m k x <> A_1 m k x.
Lemma cA_1_bottom:forall (m:fmap)(k:dim)(z:dart),
inv_hmap m ->  exd m z ->
cA_1 m k (bottom m k z) = top m k z.
Lemma bottom_bottom_top:forall(m:fmap)(k:dim)(x y:dart),
inv_hmap m -> exd m x -> exd m y ->
~succ m k y -> bottom m k x = bottom m k y ->
top m k x = y.
Lemma top_top_bottom_bottom:forall(m:fmap)(k:dim)(x y:dart),
inv_hmap m -> exd m x -> exd m y ->
top m k x = top m k y ->
bottom m k x = bottom m k y.
Lemma bottom_bottom_top_top:forall(m:fmap)(k:dim)(x y:dart),
inv_hmap m -> exd m x -> exd m y ->
bottom m k x = bottom m k y -> top m k x = top m k y.
Lemma between_expo_refl_2:forall(m:fmap)(z t:dart),
inv_hmap m -> exd m z ->
(between m z t t <-> expo1 m z t).
Lemma expo_between_1:forall(m:fmap)(z t:dart),
inv_hmap m -> exd m z ->
(expo1 m z t <-> between m z t (f_1 m z)).
Lemma expo_between_3:forall(m:fmap)(x y z:dart),
inv_hmap m -> expo1 m x y -> expo1 m x z ->
between m x z y \/ between m (f m y) z (f_1 m x).
Lemma F_1_nil : forall m:fmap,
inv_hmap m -> F_1 m nil = nil.
Lemma predf_exd_F_1 : forall (m:fmap)(z:dart),
inv_hmap m -> predf m z -> exd m (F_1 m z).
Lemma succf_F: forall (m:fmap)(z:dart),
inv_hmap m -> (succf m z <-> F m z <> nil).
Lemma predf_F_1: forall (m:fmap)(z:dart),
inv_hmap m -> (predf m z <-> F_1 m z <> nil).
Lemma exd_cF_1 : forall (m:fmap)(z:dart),
inv_hmap m -> (exd m z <-> exd m (cF_1 m z)).
Lemma inj_cF :
forall (m:fmap), inv_hmap m ->
inj_dart (exd m) (cF m).
Lemma inj_cF_1 :
forall (m:fmap), inv_hmap m ->
inj_dart (exd m) (cF_1 m).
Lemma cF_cF_1:forall (m:fmap)(z:dart),
inv_hmap m -> exd m z -> cF m (cF_1 m z) = z.
Lemma cF_1_cF:forall (m:fmap)(z:dart),
inv_hmap m -> exd m z -> cF_1 m (cF m z) = z.
Lemma surj_cF :
forall (m:fmap), inv_hmap m ->
surj_dart (exd m) (cF m).
Lemma bij_cF :
forall (m:fmap), inv_hmap m ->
bij_dart (exd m) (cF m).
Lemma surj_cF_1 :
forall (m:fmap), inv_hmap m ->
surj_dart (exd m) (cF_1 m).
Lemma bij_cF_1 :
forall (m:fmap), inv_hmap m ->
bij_dart (exd m) (cF_1 m).
Lemma A_1_L_B:forall (m:fmap)(k j:dim)(x z:dart),
inv_hmap m -> succ m k x ->
let y:= A m k x in
A_1 (L (B m k x) k x y) j z = A_1 m j z.
Lemma cA_1_L_B:forall(m : fmap)(k j : dim)(x z : dart),
inv_hmap m -> succ m k x ->
let y:= A m k x in
cA_1 (L (B m k x) k x y) j z = cA_1 m j z.
Lemma cF_L_B:forall (m:fmap)(k:dim)(x z:dart),
inv_hmap m -> succ m k x ->
let y:= A m k x in
cF (L (B m k x) k x y) z = cF m z.