(*======================================================== HMAPS ========================================================*)
(* HYPOTHESIS: a hmap could be viewed as a qhmap with the closed version of A. Hier, it is considered as a completely sewn qhmap, which is approximately the same... *)
(* Invariant of the hypermaps: inv_qhmap + completeness *)
Definition inv_hmap(m:fmap):Prop :=
inv_qhmap m
/\ forall (x:dart)(k:dim), exd m x ->
succ m k x /\ pred m k x.
(* Definition of the hypermaps: *)
Definition hmap:Set := {m:fmap | inv_hmap m}.
(* Surjection, bijection on the fmap darts: *)
Definition surj_dart(Df:dart->Prop)(f:dart->dart):Prop:=
forall y:dart, Df y ->
exists x:dart, Df x /\ f x = y.
Definition bij_dart(Df:dart->Prop)(f:dart->dart):Prop:=
inj_dart Df f /\ surj_dart Df f.
(* Fundamental property: A and A_1 are injections on the hypermap supports: *)

(* Specifications: *)
Lemma inj_A:
forall (m:fmap)(k:dim), inv_hmap m ->
inj_dart (exd m) (A m k).