(* TO BE A DOUBLE-LINK: *) 

Definition double_link(m:fmap)(x x':dart):Prop:=
  x <> x' /\ expe m x x'.

(* Specifications: *)
Lemma double_link_comm: forall (m:fmap)(x x':dart), inv_hmap m -> double_link m x x' -> double_link m x' x.
Lemma double_link_succ :forall (m:fmap)(x x':dart), inv_hmap m -> double_link m x x' -> (succ m zero x \/ succ m zero x').
Lemma double_link_exd:forall(m:fmap)(x x':dart), inv_hmap m -> double_link m x x' -> exd m x /\ exd m x'.
Lemma cA0_Br1:forall(m:fmap)(x x' z:dart), inv_hmap m -> double_link m x x' -> cA (Br1 m x x') zero z = if eq_dart_dec x z then cA m zero x' else if eq_dart_dec x' z then cA m zero x else cA m zero z.
Lemma cA0_1_Br1:forall(m:fmap)(x x' z:dart), inv_hmap m -> double_link m x x' -> cA_1 (Br1 m x x') zero z = if eq_dart_dec (cA m zero x) z then x' else if eq_dart_dec (cA m zero x') z then x else cA_1 m zero z.
Lemma cA1_Br1:forall(m:fmap)(x x' z:dart), inv_hmap m -> cA (Br1 m x x') one z = cA m one z.
Lemma cA1_1_Br1:forall(m:fmap)(x x' z:dart), inv_hmap m -> cA_1 (Br1 m x x') one z = cA_1 m one z.
Lemma cF_Br1: forall(m:fmap)(x x' z:dart), inv_hmap m -> double_link m x x' -> cF (Br1 m x x') z = if eq_dart_dec (cA m zero x) z then cA_1 m one x' else if eq_dart_dec (cA m zero x') z then cA_1 m one x else cF m z.
Lemma cF_1_Br1:forall(m:fmap)(x x' z:dart), inv_hmap m -> double_link m x x' -> cF_1 (Br1 m x x') z = if eq_dart_dec x (cA m one z) then cA m zero x' else if eq_dart_dec x' (cA m one z) then cA m zero x else cF_1 m z.
Lemma cF_1_Br1_bis:forall(m:fmap)(x x' z:dart), inv_hmap m -> double_link m x x' -> cF_1 (Br1 m x x') z = if eq_dart_dec (cA_1 m one x) z then cA m zero x' else if eq_dart_dec (cA_1 m one x') z then cA m zero x else cF_1 m z.
Theorem disconnect_planar_criterion_Br1: forall (m:fmap)(x x':dart), inv_hmap m -> planar m -> double_link m x x' -> let y := cA m zero x in let y' := cA m zero x' in (expf m y y' <-> ~eqc (Br1 m x x') x' y').
Lemma Br1_comm: forall (m:fmap)(x x':dart), inv_hmap m -> double_link m x x' -> Br1 m x x' = Br1 m x' x.
Theorem disconnect_planar_criterion_Br1_bis: forall (m:fmap)(x x':dart), inv_hmap m -> planar m -> double_link m x x' -> let y := cA m zero x in let y' := cA m zero x' in (expf m y y' <-> ~eqc (Br1 m x x') x y).
Theorem nc_Br1: forall (m:fmap)(x x':dart), inv_hmap m -> planar m -> double_link m x x' -> let y := cA m zero x in let y' := cA m zero x' in nc (Br1 m x x') = nc m + if expf_dec m y y' then 1 else 0.