(*========================================================
                      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.

Theorem bij_A: forall (m:fmap)(k:dim), inv_hmap m -> bij_dart (exd m) (A m k).