(* OK: *)

(* Specifications: *)
Lemma planar_L_B0:forall(m:fmap)(x:dart),
inv_hmap m -> succ m zero x ->
(planar m <->
planar (L (B m zero x) zero x (A m zero x))).
Lemma eqc_B_bottom: forall(m:fmap)(k:dim)(x:dart),
inv_hmap m -> exd m x ->
eqc (B m k x) x (bottom m k x).
Lemma eqc_B_top: forall(m:fmap)(k:dim)(x:dart),
inv_hmap m -> succ m k x ->
eqc (B m k x) (A m k x) (top m k x).
Lemma existi_dec:forall(m:fmap)(z v:dart)(k:nat),
(exists i:nat, (i < k)%nat /\ Iter (MA0.f m) i z = v) \/
(~exists i:nat, (i < k)%nat /\ Iter (MA0.f m) i z = v).
Lemma exd_L_B_top_bot: forall(m:fmap)(k:dim)(x z:dart),
exd m z <-> exd (L (B m k x) k (top m k x) (bottom m k x)) z.
Lemma cF_L_B_top_bot:forall(m:fmap)(k:dim)(x z:dart),
inv_hmap m -> succ m k x ->
cF (L (B m k x) k (top m k x) (bottom m k x)) z =
cF m z.
Lemma cF_1_L_B_top_bot:forall(m:fmap)(k:dim)(x z:dart),
inv_hmap m -> succ m k x ->
cF_1 (L (B m k x) k (top m k x) (bottom m k x)) z =
cF_1 m z.
Lemma Iter_f_L_B: forall(m:fmap)(k:dim)(x z:dart)(i:nat),
inv_hmap m -> succ m k x ->
let m0:= L (B m k x) k (top m k x) (bottom m k x) in
Iter (MF.f m0) i z =  Iter (MF.f m) i z.
Lemma expf_L_B_top_bot:forall(m:fmap)(k:dim)(x z t:dart),
inv_hmap m -> succ m k x ->
(expf (L (B m k x) k (top m k x) (bottom m k x)) z t
<-> expf m z t).
Lemma nc_L_B_top_bot :forall(m:fmap)(k:dim)(x:dart),
inv_hmap m -> succ m k x ->
let m0:= L (B m k x) k (top m k x) (bottom m k x) in
nc m0 = nc m.
Lemma inv_hmap_Br:forall(l:list)(m:fmap),
inv_hmap m -> inv_hmap (Br m l).
Lemma cA1_Br:forall(l:list)(m:fmap)(z:dart),
inv_hmap m -> cA (Br m l) one z = cA m one z.
Lemma cA1_1_Br:forall(l:list)(m:fmap)(z:dart),
inv_hmap m -> cA_1 (Br m l) one z = cA_1 m one z.
Lemma ring1_ring3_connect:
forall(m:fmap)(x x' xs xs':dart)(l:list),
let l1:= cons x x' (cons xs xs' l) in
let y  := cA m zero x in
let y' := cA m zero x' in
inv_hmap m -> planar m ->
double_link_list m l1 ->
pre_ring1 m l1 -> pre_ring3 m l1 ->
~ expf m y y'.
Lemma expe_B_i:  forall(m:fmap)(x z:dart)(i:nat),
inv_hmap m -> succ m zero x -> exd m z ->
let t := Iter (MA0.f (B m zero x)) i z in expe m z t.
Lemma expe_Br1_expe :forall(m:fmap)(x x' z t:dart),
inv_hmap m ->
expe (Br1 m x x') z t -> expe m z t.
Lemma not_exd_top : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> ~exd m z ->
top m k z = nil.
Lemma exd_top:forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z ->
exd m (top m k z).
Lemma exd_bottom:forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z ->
exd m (bottom m k z).
Lemma nosucc_top : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z -> ~succ m k z ->
top m k z = z.
Lemma cA_bottom : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z -> ~succ m k z ->
cA m k z = bottom m k z.
Lemma cA_eq_aux : forall(m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z ->
cA m k z =
if succ_dec m k z then A m k z
else bottom m k z.
Lemma top_bottom : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> exd m z -> ~succ m k z ->
top m k (bottom m k z) = z.
Lemma top_A : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> succ m k z ->
top m k (A m k z) = top m k z.
Lemma bottom_A : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> succ m k z ->
bottom m k (A m k z) = bottom m k z.
Lemma not_succ_top : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m ->
~succ m k (top m k z).
Lemma top_top_1 : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> ~ succ m k z ->
top m k (top m k z) = top m k z.
Lemma top_top_2 : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m -> succ m k z ->
top m k (top m k z) = top m k z.
Lemma top_top : forall (m:fmap)(k:dim)(z:dart),
inv_hmap m ->
top m k (top m k z) = top m k z.
Lemma succ_bottom:forall (m:fmap)(k:dim)(x:dart),
inv_hmap m -> succ m k x ->
bottom m k x <> A m k x.
Lemma nc_B:forall(m:fmap)(k:dim)(x:dart),
inv_hmap m -> succ m k x ->
let m0 := B m k x in
nc m0 = nc m + if eqc_dec m0 x (A m k x) then 0 else 1.
Lemma nc_L_B:forall(m:fmap)(k:dim)(x:dart),
inv_hmap m -> succ m k x ->
let m0:= B m k x in
let m1:= L m0 k x (A m k x) in
nc m1 = nc m.
Lemma cF_L:forall(m:fmap)(k:dim)(x y z:dart),
inv_hmap m -> prec_L m k x y ->
cF (L m k x y) z =
if eq_dim_dec k zero
then
cA_1 m one
(if eq_dart_dec y z
then x
else
if eq_dart_dec (cA m zero x) z
then cA_1 m zero y
else cA_1 m zero z)
else
(if eq_dart_dec y (cA_1 m zero z)
then x
else
if eq_dart_dec (cA m one x) (cA_1 m zero z)
then cA_1 m one y
else cA_1 m one (cA_1 m zero z)).
Lemma expf_L0_y_x_1:forall (m:fmap)(x y:dart),
inv_hmap (L m zero x y) ->
let x_1 := cA_1 m one x in
expf (L m zero x y) y x_1.
Lemma expf_L0_x0_y_0_1:forall (m:fmap)(x y:dart),
inv_hmap (L m zero x y) ->
let x0 := cA m zero x in
let y_0_1 := cF m y in
expf (L m zero x y) x0 y_0_1.
Lemma expf_expf_L0_2:forall (m:fmap)(x y z:dart)(i:nat),
inv_hmap (L m zero x y) -> exd m z ->
let x_1 := cA_1 m one x in
~ expf m x_1 y ->
~ expf m x_1 z -> ~ expf m y z ->
let t:= Iter (cF m) i z in
expf (L m zero x y) z t.
Lemma card_minus_set:forall(s1 s2:set),
incls s2 s1 ->
(card (set_minus s1 s2) + card s2 = card s1)%nat.
Lemma rem_1_step :forall(m:fmap)(z:dart)(s:set),
inv_hmap m ->
let sr:= Iter_rem_aux m z s in
let nr:= Iter_upb_aux m z s in
(card sr + 1 <= card s <->
exds s (Iter (f m) (ndN m - card s) z))%nat.
Lemma rem_2_steps :forall(m:fmap)(z:dart)(s:set),
inv_hmap m ->
let sr:= Iter_rem_aux m z s in
let nr:= Iter_upb_aux m z s in
(card sr + 2 <= card s ->
exds (Ds s (Iter (f m) (ndN m - card s) z))
(Iter (f m) (ndN m + 1 - card s) z))%nat.
Lemma between_expo_refl_1:forall(m:fmap)(z t:dart),
inv_hmap m -> exd m z ->
(between m z z t <-> expo1 m z t).
Lemma succf_exd : forall (m:fmap)(z:dart),
inv_hmap m -> succf m z -> exd m z.
Lemma F_nil : forall m:fmap,
inv_hmap m -> F m nil = nil.
Lemma succf_exd_F : forall (m:fmap)(z:dart),
inv_hmap m -> succf m z -> exd m (F m z).
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 inj_F_succf :
forall m:fmap, inv_hmap m ->
inj_dart (succf m) (F m).
Lemma nf_L0L1_II:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
False.
Lemma nf_L0L1_IIIA:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
x = y' ->
False.
Lemma nf_L0L1_IIIB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_IIIC:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
x <> y' -> y_0 <> y' ->
False.
Lemma nf_L0L1_III:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
False.
Lemma nf_L0L1_IVB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_IVC:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
x <> y' -> y_0 <> y' ->
False.
Lemma nf_L0L1_IV:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m one x' y') x_1b y ->
expf (L m zero x y) x' y'0b ->
False.
Lemma nf_L0L1_VA:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m one x' y') x_1b y ->
~ expf (L m zero x y) x' y'0b ->
x = y' ->
False.
Lemma cF_L1_y0:forall(m:fmap)(x y:dart),
inv_hmap m -> prec_L m one x y ->
let m1:= L m one x y in
let y0 := cA m zero y in
let dx := MF.degree m x in
let dy0 := MF.degree m y0 in
~expf m x y0 ->
Iter (cF m1) (dx + dy0) x = x.
Lemma expf_L1_y0: forall (m:fmap)(x y z:dart),
let y0 := cA m zero y in
let m1 := L m one x y in
inv_hmap m1 -> ~expf m x y0 ->
expf m y0 z -> expf m1 y0 z.
Lemma expf_L1_I_CS:forall (m:fmap)(x y z t:dart),
inv_hmap (L m one x y) -> exd m z ->
let x1 := cA m one x in
let x10 := cA m zero x1 in
let y0 := cA m zero y in
let y_1 := cA_1 m one y in
~ expf m x y0 ->
( expf m z t
\/ expf m z x /\ expf m t y0
\/ expf m t x /\ expf m z y0 )
-> expf (L m one x y) z t.
Lemma cF_L1_x10_y_1:forall(m:fmap)(x y:dart)(j:nat),
inv_hmap m -> prec_L m one x y ->
let y0 := cA m zero y in
let y_1:= cA_1 m one y in
let x1:= cA m one x in
let x10:= cA m zero x1 in
let dx := MF.degree m x in
let m1:= L m one x y in
y0 = Iter (cF m) j x -> expf m x y0 ->
j < dx - 1 ->
Iter (cF m1) (dx - (j + 1)) y_1 = y_1.
Lemma degree_L1_split_x_aux:
forall(m:fmap)(x y:dart)(j i:nat),
let m1:= L m one x y in
let y0 := cA m zero y in
let dx:= MF.degree m x in
y0 = Iter (cF m) j x ->
i < j < dx - 1 ->
expf m x y0 ->
inv_hmap m1 -> MF.degree_aux m1 x (j - i) = j + 1.
Theorem degree_L1_split_x_y0:
forall(m:fmap)(x y:dart)(j:nat),
let m1:= L m one x y in
let y0 := cA m zero y in
let dx:= MF.degree m x in
y0 = Iter (cF m) j x ->
inv_hmap m1 ->
j < dx -1 ->
expf m x y0 ->
MF.degree m1 x = j + 1.
Lemma expf_L1_II_CNA_aux:forall (m:fmap)(x y z:dart)(i:nat),
let m1 := (L m one x y) in
let y0 := cA m zero y in
let m1 := (L m one x y) in
let t := Iter (cF m1) i z in
inv_hmap m1 -> exd m z ->
expf m x y0 -> ~ expf m x z ->
expf (L m one x y) z t ->
expf m z t.
Lemma expf_L1_II_CNA:forall (m:fmap)(x y z t:dart),
inv_hmap (L m one x y) -> exd m z ->
let x1 := cA m one x in
let x10 := cA m zero x1 in
let y0 := cA m zero y in
let y_1 := cA_1 m one y in
expf m x y0 ->
expf (L m one x y) z t ->
~ expf m x z ->
expf m z t.
Lemma not_expf_L1_x_y0:forall (m:fmap)(x y z t:dart),
inv_hmap (L m one x y) -> exd m z ->
let y0 := cA m zero y in
let y_1 := cA_1 m one y in
expf m x y0 -> ~expf (L m one x y) x y_1.
Lemma nf_L0L1_VIB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_VIC:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
x <> y' -> y_0 <> y' ->
False.
Lemma nf_L0L1_VI:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
False.
Lemma nf_L0L1_VIIB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_VII:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
False.
Lemma nf_L0L1_VIIIB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
~ expf (L m one x' y') x_1b y ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_VIII:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
~ expf (L m one x' y') x_1b y ->
False.
Lemma nf_L0L1_IXA:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
~ expf (L m one x' y') x_1b y ->
x = y' ->
False.
Lemma nf_L0L1_IXB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
~ expf (L m one x' y') x_1b y ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_IXC:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
~ expf (L m one x' y') x_1b y ->
x <> y' -> y_0 <> y' ->
False.
Lemma nf_L0L1_IX:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
expf (L m zero x y) x' y'0b ->
~ expf (L m one x' y') x_1b y ->
False.
Lemma nf_L0L1_XA:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
x = y' ->
False.
Lemma nf_L0L1_XB:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
x <> y' -> y_0 = y' ->
False.
Lemma nf_L0L1_XC:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
x <> y' -> y_0 <> y' ->
False.
Lemma nf_L0L1_X:forall (m:fmap)(x y x' y':dart),
let m1:=L (L m zero x y) one x' y' in
let m2:=L (L m one x' y') zero x y in
inv_hmap m1 ->
let x_1 := cA_1 m one x in
let y_0 := cA_1 m zero y in
let y'0 := cA m zero y' in
let x'1 := cA m one x' in
let y'0b := cA (L m zero x y) zero y' in
let x_1b := cA_1 (L m one x' y') one x in
~ expf m x_1 y ->
~ expf m x' y'0 ->
~ expf (L m zero x y) x' y'0b ->
expf (L m one x' y') x_1b y ->
False.
Lemma expf_L_B:forall(m:fmap)(k:dim)(x z t:dart),
inv_hmap m -> succ m k x ->
(expf (L (B m k x) k x (A m k x)) z t
<-> expf m z t).
Lemma eqc_cA_r :
forall (m:fmap)(k:dim)(x:dart),
inv_hmap m -> exd m x -> eqc m x (cA m k x).
Lemma eqc_cA_1_r :
forall (m:fmap)(k:dim)(x:dart),
inv_hmap m -> exd m x -> eqc m x (cA_1 m k x).
Lemma eqc_eqc_cA :
forall (m:fmap)(k:dim)(x y:dart),
inv_hmap m ->
eqc m x y -> eqc m x (cA m k y).
Lemma eqc_eqc_cA_1 :
forall (m:fmap)(k:dim)(x y:dart),
inv_hmap m ->
eqc m x y -> eqc m x (cA_1 m k y).
Lemma eqc_cA_1_eqc :
forall (m:fmap)(k:dim)(x y:dart),
inv_hmap m ->
eqc m (cA_1 m k x) y -> eqc m x y.
Lemma eqc_cA_eqc :
forall (m:fmap)(k:dim)(x y:dart),
inv_hmap m ->
eqc m x (cA m k y) -> eqc m x y.
Lemma eqc_eqc_cF :
forall (m:fmap)(x y:dart),
inv_hmap m ->
eqc m x y -> eqc m x (cF m y).
Lemma exd_Iter_cF :
forall (m:fmap)(n:nat)(z:dart),
inv_hmap m -> exd m z ->
exd m (Iter (cF m) n z).
Lemma eqc_Iter_cF :
forall (m:fmap)(n:nat)(z:dart),
inv_hmap m -> exd m z ->
eqc m z (Iter (cF m) n z).
Lemma expf_eqc : forall(m:fmap)(x y:dart),
inv_hmap m ->
MF.expo m x y -> eqc m x y.
Lemma inv_hmap_dec:forall(m:fmap),
{inv_hmap m} + {~inv_hmap m}.
Lemma expf_planar_1: forall (m:fmap)(x y:dart),
inv_hmap m -> planar m ->
prec_L m one x y ->
expf m x (cA m zero y) ->
planar (L m one x y).
Lemma not_eqc_planar: forall (m:fmap)(k:dim)(x y:dart),
inv_hmap m -> planar m ->
prec_L m k x y ->
~eqc m x y -> planar (L m k x y).
Lemma planarity_criterion_RCP_0: forall (m:fmap)(x y:dart),
inv_hmap m -> prec_L m zero x y ->
planar m -> planar (L m zero x y) ->
(~ eqc m x y \/ expf m (cA_1 m one x) y).
Lemma planarity_criterion_RCP_1: forall (m:fmap)(x y:dart),
inv_hmap m -> prec_L m one x y ->
planar m -> planar (L m one x y) ->
(~ eqc m x y \/ expf m x (cA m zero y)).
Lemma not_eqc_planar_0:forall (m:fmap)(x y:dart),
inv_hmap m -> prec_L m zero x y ->
planar m -> ~eqc m x y -> planar (L m zero x y).
Lemma not_eqc_planar_1:forall (m:fmap)(x y:dart),
inv_hmap m -> prec_L m one x y ->
planar m -> ~eqc m x y -> planar (L m one x y).
Lemma incr_genus_0:forall(m:fmap)(x y:dart),
inv_hmap m -> prec_L m zero x y ->
genus m <= genus (L m zero x y).
Lemma incr_genus_1:forall(m:fmap)(x y:dart),
inv_hmap m -> prec_L m one x y ->
genus m <= genus (L m one x y).
Lemma expf_transfert:forall (m:fmap)(x z t:dart),
inv_hmap m -> exd m x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
~expf m x0 xb0 ->
(expf m xb0 z /\ expf m x0 t
\/ expf m xb0 t /\ expf m x0 z
\/ expf m z t) ->
((expf m x_1 z \/ expf m xh0_1 z)
/\ (expf m x_1 t \/ expf m xh0_1 t)
\/ expf m z t /\ ~expf m x_1 z /\ ~expf m xh0_1 z).
Lemma xb0_ind:forall (m:fmap)(x:dart),
inv_hmap m -> succ m zero x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
let p := MF.Iter_upb m xh0_1 in
xb0 = Iter (cF m) (p-1)%nat xh0_1.
Lemma x0_ind:forall (m:fmap)(x:dart),
inv_hmap m -> succ m zero x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
let p := MF.Iter_upb m x_1 in
x0 = Iter (cF m) (p-1)%nat x_1.
Lemma expf_B0_CS_2_a_III:forall (m:fmap)(x z t:dart),
inv_hmap m -> succ m zero x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
~expf m x0 xb0 ->
expf m xh0_1 z -> expf m x_1 t
-> expf (B m zero x) z t.
Lemma expf_B0_CS_2_a_IV:forall (m:fmap)(x z t:dart),
inv_hmap m -> succ m zero x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
~expf m x0 xb0 ->
expf m x_1 z -> expf m xh0_1 t
-> expf (B m zero x) z t.
Lemma expf_B0_CS_2_a:forall (m:fmap)(x z t:dart),
inv_hmap m -> succ m zero x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
~expf m x0 xb0 ->
(expf m x_1 z \/ expf m xh0_1 z)
/\ (expf m x_1 t \/ expf m xh0_1 t)
-> expf (B m zero x) z t.
Lemma expf_B0_CS_2_aux:forall (m:fmap)(x z t:dart),
inv_hmap m -> succ m zero x ->
let x0 := cA m zero x in
let x_1:= cA_1 m one x in
let xb0:= bottom m zero x in
let xh0:= top m zero x in
let xh0_1:= cA_1 m one xh0 in
~expf m x0 xb0 ->
((expf m x_1 z \/ expf m xh0_1 z)
/\ (expf m x_1 t \/ expf m xh0_1 t)
\/ expf m z t /\ ~expf m x_1 z /\ ~expf m xh0_1 z)
-> expf (B m zero x) z t.
Lemma expf_B0_CN:forall (m:fmap)(x z t:dart),
inv_hmap m -> succ m zero x ->
expf (B m zero x) z t ->
let x0 := cA m zero x in
let xb0 := bottom m zero x in
let x_1 := cA_1 m one x in
let xh0 := top m zero x in
let xh0_1 := cA_1 m one xh0 in
(if expf_dec m x0 xb0
then
betweenf m x_1 z xb0 /\ betweenf m x_1 t xb0
\/ betweenf m xh0_1 z x0 /\ betweenf m xh0_1 t x0
\/ ~ expf m x_1 z /\ expf m z t
else
expf m xb0 z /\ expf m x0 t
\/ expf m xb0 t /\ expf m x0 z
\/ expf m z t).
Lemma nf_L0L0_III:forall (m:fmap)(x y x' y':dart),
let m1:= L (L m zero x y) zero x' y' in
let m2:= L (L m zero x' y') zero x y in
inv_hmap m1 ->
let x_1  := cA_1 m one x in
let x'_1 := cA_1 m one x' in
expf m x_1 y ->
~ expf m x'_1 y' ->
expf (L m zero x' y') x_1 y ->
~ expf (L m zero x y) x'_1 y' ->
nf m1 = nf m2.
Lemma nf_L0L0_IV:forall (m:fmap)(x y x' y':dart),
let m1:= L (L m zero x y) zero x' y' in
let m2:= L (L m zero x' y') zero x y in
inv_hmap m1 ->
let x_1  := cA_1 m one x in
let x'_1 := cA_1 m one x' in
expf m x_1 y ->
~ expf m x'_1 y' ->
~ expf (L m zero x' y') x_1 y ->
expf (L m zero x y) x'_1 y' ->
nf m1 = nf m2.
Lemma nf_L0L0_V:forall (m:fmap)(x y x' y':dart),
let m1:= L (L m zero x y) zero x' y' in
let m2:= L (L m zero x' y') zero x y in
inv_hmap m1 ->
let x_1  := cA_1 m one x in
let x'_1 := cA_1 m one x' in
~ expf m x_1 y ->
~ expf m x'_1 y' ->
expf (L m zero x' y') x_1 y ->
~ expf (L m zero x y) x'_1 y' ->
nf m1 = nf m2.
Lemma nf_L0L0_VI:forall (m:fmap)(x y x' y':dart),
let m1:= L (L m zero x y) zero x' y' in
let m2:= L (L m zero x' y') zero x y in
inv_hmap m1 ->
let x_1  := cA_1 m one x in
let x'_1 := cA_1 m one x' in
expf m x_1 y ->
~ expf m x'_1 y' ->
~ expf (L m zero x' y') x_1 y ->
~ expf (L m zero x y) x'_1 y' ->
nf m1 = nf m2.
Lemma exd_L_B:forall (m:fmap)(k:dim)(x z:dart),
inv_hmap m -> succ m k x ->
let y:= A m k x in
exd (L (B m k x) k x y) z <-> exd m z.
Lemma A_L_B:forall (m:fmap)(k j:dim)(x z:dart),
inv_hmap m -> succ m k x ->
let y:= A m k x in
A (L (B m k x) k x y) j z = A m j z.
Lemma F_L_B:forall (m:fmap)(k:dim)(x z:dart),
inv_hmap m -> succ m k x ->
let y:= A m k x in
F (L (B m k x) k x y) z = F m z.
Theorem eqc_B: forall(m:fmap)(k:dim)(x z t:dart),
inv_hmap m -> succ m k x ->
let xk:= A m k x in
let m0:= B m k x in
(eqc m z t <->
(eqc m0 z t \/
eqc m0 z x /\ eqc m0 xk t \/
eqc m0 z xk /\ eqc m0 x t)).
Lemma eqc_B_eqc :forall(m:fmap)(k:dim)(x z t:dart),
inv_hmap m -> succ m k x ->
eqc (B m k x) z t -> eqc m z t.