(* Partial injection on dart, Df giving the domain of f: *)

Definition inj_dart(Df:dart->Prop)(f:dart->dart):Prop:=
    forall x x':dart,
     (Df x)->(Df x')->(f x)=(f x')->x=x'.

(* Specifications: *)
Lemma inj_A: forall (m:fmap)(k:dim), inv_hmap m -> inj_dart (succ m k) (A m k).
Lemma inj_A_1 : forall (m:fmap)(k:dim), inv_hmap m -> inj_dart (pred m k) (A_1 m k).
Lemma succ_pred_clos : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> exd m z -> (cA m k z <> nil /\ cA_1 m k z <> nil).
Lemma exd_cA_cA_1 : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> exd m z -> exd m (cA m k z) /\ exd m (cA_1 m k z).
Lemma cA_exd : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> cA m k z <> nil -> exd m z.
Lemma cA_1_exd : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> cA_1 m k z <> nil -> exd m z.
Lemma not_exd_cA : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> ~exd m z -> cA m k z = nil.
Lemma not_exd_cA_1 : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> ~exd m z -> cA_1 m k z = nil.
Lemma exd_cA_exd : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> exd m (cA m k z) -> exd m z.
Lemma exd_cA_1_exd : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> exd m (cA_1 m k z) -> exd m z.
Lemma exd_cA:forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> (exd m z <-> exd m (cA m k z)).
Lemma exd_cA_1:forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> (exd m z <-> exd m (cA_1 m k z)).
Lemma cA_1_cA : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> exd m z -> cA_1 m k (cA m k z) = 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 inj_cA: forall (m:fmap)(k:dim), inv_hmap m -> inj_dart (exd m) (cA m k).
Lemma inj_cA_1: forall (m:fmap)(k:dim), inv_hmap m -> inj_dart (exd m) (cA_1 m k).
Lemma fixpt_cA_cA_1 : forall (m:fmap)(k:dim)(z:dart), inv_hmap m -> exd m z -> ~succ m k z -> ~pred m k z -> cA m k z = z /\ cA_1 m k z = z.
Lemma A_cA : forall (m:fmap)(k:dim)(x y:dart), inv_hmap m -> exd m x -> exd m y -> A m k x = y -> cA m k x = y.
Lemma A_1_cA_1 : forall (m:fmap)(k:dim)(x y:dart), inv_hmap m -> exd m x -> exd m y -> A_1 m k x = y -> cA_1 m k x = y.