(* Predecessor in a face - direct version: *)

Definition F_1 (m:fmap)(z:dart):=
  A m zero (A m one z).(* To have a predecessor in a (direct) face for z: *)

Definition predf(m:fmap)(z:dart):Prop:=
  succ m one z /\ succ m zero (A m one z).

(* Specifications: *)
Lemma predf_dec : forall (m:fmap)(z:dart), {predf m z}+{~predf m z}.
Lemma predf_exd : forall (m:fmap)(z:dart), inv_hmap m -> predf m z -> exd m z.
Lemma F_nil : forall m:fmap, inv_hmap m -> F m nil = nil.
Lemma F_1_nil : forall m:fmap, inv_hmap m -> F_1 m nil = nil.
Lemma succf_exd_F : forall (m:fmap)(z:dart), inv_hmap m -> succf m z -> exd m (F m z).
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 not_exd_F_nil : forall (m:fmap)(z:dart), inv_hmap m -> ~exd m z -> F m z = nil.
Lemma not_exd_F_1_nil : forall (m:fmap)(z:dart), inv_hmap m -> ~exd m z -> F_1 m z = nil.
Lemma F_F_1 : forall (m:fmap)(z:dart), inv_hmap m -> exd m z -> exd m (F_1 m z) -> F m (F_1 m z) = z.
Lemma F_1_F : forall (m:fmap)(z:dart), inv_hmap m -> exd m z -> exd m (F m z) -> F_1 m (F m z) = z.
Lemma inj_F_succf : forall m:fmap, inv_hmap m -> inj_dart (succf m) (F m).
Lemma inj_F_1_predf : forall m:fmap, inv_hmap m -> inj_dart (predf m) (F_1 m).