(* Specifications: *)
Lemma genus_L_B0:forall(m:fmap)(x:dart), inv_hmap m -> succ m zero x -> genus (L (B m zero x) zero x (A m zero x)) = genus m.
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 planar_B0:forall(m:fmap)(x:dart), inv_hmap m -> succ m zero x -> planar m -> planar (B m zero x).
Theorem planarity_crit_B0: forall (m:fmap)(x:dart), inv_hmap m -> succ m zero x -> let m0 := B m zero x in let y := A m zero x in (planar m <-> (planar m0 /\ (~eqc m0 x y \/ expf m0 (cA_1 m0 one x) y))).
Theorem disconnect_planar_criterion_B0:forall (m:fmap)(x:dart), inv_hmap m -> planar m -> succ m zero x -> let y := A m zero x in let x0 := bottom m zero x in (expf m y x0 <-> ~eqc (B m zero x) x y).
Lemma eqc_bottom_top: forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> exd m x -> (eqc m x (bottom m k x) /\ eqc m x (top m k x)).
Lemma eqc_bottom: forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> exd m x -> eqc m x (bottom m k x).
Lemma eqc_top: forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> exd m x -> eqc m x (top m k 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 B_idem:forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> B (B m k x) k x = B m k x.
Lemma nc_B_sup:forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> nc (B m k x) >= nc m.
Lemma ndZ_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> nd (B m k x) = nd m.
Lemma ndZ_L_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> let m1:= L (B m k x) k x (A m k x) in nd m1 = nd m.
Lemma ne_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> ne (B m k x) = ne m + if (eq_dim_dec k zero) then 1 else 0.
Lemma ne_L_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> let m1 := L (B m k x) k x (A m k x) in ne m1 = ne m.
Lemma nv_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> nv (B m k x) = nv m + if (eq_dim_dec k one) then 1 else 0.
Lemma nv_L_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> let m1 := L (B m k x) k x (A m k x) in nv m1 = nv m.
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 A_not_cA: forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> A m k x <> cA (B m k x) k x.
Lemma nf_L_B_aux :forall(m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> let y := A m k x in let m0 := B m k x in let m1 := L m0 k x (A m k x) in nf m1 = match k with | zero => let x_1 := cA_1 m0 one x in nf m0 + (if expf_dec m0 x_1 y then 1 else -1) | one => let y0 := cA m0 zero y in nf m0 + (if expf_dec m0 x y0 then 1 else -1) end.
Lemma cA_I:forall(m:fmap)(k:dim)(x z:dart)(u:tag)(p:point), inv_hmap m -> prec_I m x -> x <> z -> (cA (I m x u p) k z = cA m k z).
Lemma cA_1_I:forall(m:fmap)(k:dim)(x z:dart)(u:tag)(p:point), inv_hmap m -> prec_I m x -> x <> z -> (cA_1 (I m x u p) k z = cA_1 m k z).
Lemma expf_refl: forall(m:fmap)(z:dart), inv_hmap m -> exd m z -> expf m z z.
Lemma expf_symm:forall(m:fmap)(z t:dart), expf m z t -> expf m t z.
Lemma expf_trans:forall (m : fmap) (z t u : dart), expf m z t -> expf m t u -> expf m z u.
Lemma cF_I:forall(m:fmap)(x z:dart)(u:tag)(p:point), inv_hmap m -> prec_I m x -> exd m z -> x <> z -> (cF (I m x u p) z = cF m z).
Lemma Iter_cF_I:forall(m:fmap)(x z:dart)(u:tag)(p:point)(i:nat), inv_hmap m -> prec_I m x -> exd m z -> x <> z -> Iter (cF (I m x u p)) i z = Iter (cF m) i z.
Lemma expf_I:forall(m:fmap)(x z t:dart)(u:tag)(p:point), inv_hmap m -> prec_I m x -> exd m z -> x <> z -> (expf (I m x u p) z t <-> expf m z t).
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 nf_L0L1_IA: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 -> cA_1 m zero y <> y' -> x <> y' -> False.
Lemma nf_L0L1_I: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_IIA: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_IIB: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_IIC: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_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_IVA: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_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 nf_L0L1_VB: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_VC: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_V: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 cF_L1:forall(m:fmap)(x y z:dart), inv_hmap m -> prec_L m one x y -> let x10 := cF_1 m x in let y0 := cA m zero y in let y_1 := cA_1 m one y in let m1:= L m one x y in cF m1 z = if eq_dart_dec y0 z then x else if eq_dart_dec x10 z then y_1 else cF m z.
Lemma expf_y0_y_1:forall(m:fmap)(x y:dart), 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 expf m y0 y_1.
Lemma degree_y0_y_1:forall(m:fmap)(x y:dart), 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 MF.degree m y0 = MF.degree m y_1.
Lemma cF_L1_x_x10:forall(m:fmap)(x y:dart)(i:nat), inv_hmap m -> prec_L m one x y -> let y0 := cA m zero y in let dx := MF.degree m x in let m1:= L m one x y in ~expf m x y0 -> i <= dx - 1 -> Iter (cF m1) i x = Iter (cF m) i x.
Lemma diff_x_x10:forall(m:fmap)(x y:dart)(i:nat), inv_hmap m -> prec_L m one x y -> let y0 := cA m zero y in let dx := MF.degree m x in let m1:= L m one x y in ~expf m x y0 -> 0 < i <= dx - 1 -> Iter (cF m1) i x <> x.
Lemma cF_L1_x10: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 y_1 := cA_1 m one y in let dx := MF.degree m x in ~expf m x y0 -> Iter (cF m1) dx x = y_1.
Lemma diff_x10: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 ~expf m x y0 -> Iter (cF m1) dx x <> x.
Lemma cF_L1_y_1_y0_aux:forall(m:fmap)(x y:dart)(j:nat), 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 y_1 := cA_1 m one y in let dx := MF.degree m x in let dy_1 := MF.degree m y_1 in ~expf m x y0 -> j <= dy_1 -1 -> Iter (cF m1) (dx + j) x = Iter (cF m) j y_1.
Lemma cF_L1_y_1_y0:forall(m:fmap)(x y:dart)(j:nat), 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 y_1 := cA_1 m one y in let dx := MF.degree m x in let dy0 := MF.degree m y0 in ~expf m x y0 -> j <= dy0 -1 -> Iter (cF m1) (dx + j) x = Iter (cF m) j y_1.
Lemma diff_y_1_y0_aux:forall(m:fmap)(x y:dart)(j:nat), 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 y_1 := cA_1 m one y in let dx := MF.degree m x in let dy_1 := MF.degree m y_1 in ~expf m x y0 -> j <= dy_1 -1 -> Iter (cF m1) (dx + j) x <> x.
Lemma diff_y_1_y0:forall(m:fmap)(x y:dart)(j:nat), 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 y_1 := cA_1 m one y in let dx := MF.degree m x in let dy0 := MF.degree m y0 in ~expf m x y0 -> j <= dy0 -1 -> Iter (cF m1) (dx + j) x <> x.
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 ndN_L: forall(m:fmap)(k:dim)(x y:dart), ndN (L m k x y) = ndN m.
Lemma degree_L1_merge_MAX: forall(m:fmap)(x y:dart), let m1:= L m one x y in let y0 := cA m zero y in inv_hmap m1 -> ~expf m x y0 -> let MAX := MF.degree m x + MF.degree m y0 in MF.degree_aux m1 x MAX = MAX.
Lemma degree_L1_merge_aux: forall(m:fmap)(x y:dart)(n:nat), let m1:= L m one x y in let y0 := cA m zero y in let MAX:= MF.degree m x + MF.degree m y0 in inv_hmap m1 -> ~expf m x y0 -> 1 <= MAX - n -> MF.degree_aux m1 x (MAX - n) = MF.degree m x + MF.degree m y0.
Theorem degree_L1_merge_x: forall(m:fmap)(x y:dart), let m1:= L m one x y in let y0 := cA m zero y in inv_hmap m1 -> ~expf m x y0 -> MF.degree m1 x = MF.degree m x + MF.degree m y0.
Theorem orb_x_eqs_orb_y0: forall(m:fmap)(x y:dart), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> ~expf m x y0 -> eqs (MF.Iter_orb m1 x) (MF.Iter_orb m1 y0).
Theorem degree_L1_merge_y_1: forall(m:fmap)(x y:dart), let m1:= L m one x y in let y_1 := cA_1 m one y in inv_hmap m1 -> ~expf m x y_1 -> MF.degree m1 x = MF.degree m x + MF.degree m y_1.
Lemma expf_L1_x_y0: forall(m:fmap)(x y:dart), let m1:= L m one x y in let y0 := cA m zero y in inv_hmap m1 -> ~expf m x y0 -> expf m1 x y0.
Theorem degree_L1_merge_y0: forall(m:fmap)(x y:dart), let m1:= L m one x y in let y0 := cA m zero y in inv_hmap m1 -> ~expf m x y0 -> MF.degree m1 y0 = MF.degree m x + MF.degree m y0.
Lemma not_expf_L1_x: forall(m:fmap)(x y z:dart), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> ~expf m1 x z.
Lemma not_expf_L1_y0: forall(m:fmap)(x y z:dart), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> ~expf m1 y0 z.
Lemma Iter_cF_L1_i: forall(m:fmap)(x y z:dart)(i:nat), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> exd m z -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> Iter (cF m1) i z = Iter (cF m) i z.
Theorem expf_L1_eq:forall(m:fmap)(x y z t:dart), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> (expf m1 z t <-> expf m z t).
Lemma expf_impl_expf_L1:forall(m:fmap)(x y z t:dart), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 t -> expf m z t -> expf m1 z t.
Theorem orb_L1_eqs: forall(m:fmap)(x y z:dart), let m1:= L m one x y in let y0:= cA m zero y in inv_hmap m1 -> exd m z -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> eqs (MF.Iter_orb m1 z) (MF.Iter_orb m z).
Lemma degree_L1_merge_x_others_aux: forall(m:fmap)(x y z:dart)(n:nat), let m1:= L m one x y in let y0 := cA m zero y in let dz:= MF.degree m z in inv_hmap m1 -> exd m z -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> n < dz -> MF.degree_aux m1 z (dz - n) = MF.degree_aux m z (dz - n).
Theorem degree_L1_merge_x_others: forall(m:fmap)(x y z:dart), let m1:= L m one x y in let y0 := cA m zero y in inv_hmap m1 -> exd m z -> ~expf m x y0 -> ~expf m x z -> ~expf m y0 z -> MF.degree m1 z = MF.degree m z.
Lemma expf_L1_x: 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 x z -> expf m1 x z.
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.
Theorem degree_L1_merge_summary: 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 -> exd m z -> ~expf m x y0 -> let dx:= MF.degree m x in let dy0:= MF.degree m y0 in MF.degree m1 z = if expf_dec m x z then dx + dy0 else if expf_dec m y0 z then dx + dy0 else MF.degree m z.
Lemma nf_L0L1_VIA: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_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_VIIA: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_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_VIIC: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_VIIIA: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_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_VIIIC: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.
Theorem nf_L0L1: 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 -> nf m1 = nf m2.
Lemma B_L:forall(m:fmap)(k j:dim)(x y z:dart), x <> z -> B (L m k x y) j z = L (B m j z) k x y.
Lemma B_L_ter:forall(m:fmap)(k j:dim)(x y z:dart), j <> k -> B (L m k x y) j z = L (B m j z) k x y.
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 nf_L_B0:forall (m:fmap)(x:dart), inv_hmap m -> succ m zero x -> nf (L (B m zero x) zero x (A m zero x)) = nf m.
Theorem nf_B0:forall (m:fmap)(x:dart), inv_hmap m -> succ m zero x -> let y := A m zero x in let x0 := bottom m zero x in nf (B m zero x) = nf m + if expf_dec m y x0 then 1 else -1.
Theorem face_cut_join_criterion_B0:forall (m:fmap)(x:dart), inv_hmap m -> succ m zero x -> let y := A m zero x in let x0 := bottom m zero x in (expf m y x0 <-> ~expf (B m zero x) y x0).
Lemma other_faces_in_cut_B0:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> let y := A m zero x in let x0 := bottom m zero x in ~expf m y x0 -> ~expf m y z -> ~expf m x0 z -> (expf m z t <-> expf (B m zero x) z t).
Lemma cF_B:forall(m:fmap)(k:dim)(x z:dart), inv_hmap m -> succ m k x -> cF (B m k x) z = if eq_dim_dec k zero then cA_1 (B m zero x) one (if eq_dart_dec (A m zero x) z then top m zero x else if eq_dart_dec (bottom m zero x) z then x else cA_1 m zero z) else (if eq_dart_dec (A m one x) (cA_1 (B m one x) zero z) then top m one x else if eq_dart_dec (bottom m one x) (cA_1 (B m one x) zero z) then x else cA_1 m one (cA_1 (B m one x) zero z)).
Lemma B_B : forall (m:fmap)(k j:dim)(u v:dart), B (B m k u) j v = B (B m j v) k u.
Lemma expf_B0_CS_1_a_prel1:forall (m:fmap)(x:dart)(i j:nat), inv_hmap m -> succ m zero x -> let x_1 := cA_1 m one x in let p := MF.Iter_upb m x_1 in let xb0 := bottom m zero x in let z := Iter (cF m) i x_1 in xb0 = Iter (cF m) j x_1 -> (i <= j < p)%nat -> expf (B m zero x) x_1 z.
Lemma expf_B0_CS_1_a_prel2:forall (m:fmap)(x z:dart), inv_hmap m -> succ m zero x -> let x0 := cA m zero x in let xb0 := bottom m zero x in let x_1 := cA_1 m one x in expf m x0 xb0 -> betweenf m x_1 z xb0 -> expf (B m zero x) x_1 z.
Lemma expf_B0_CS_1_a_aux:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> exd m z -> exd m t -> let x0 := cA m zero x in let xb0 := bottom m zero x in let x_1 := cA_1 m one x in expf m x0 xb0 -> (betweenf m x_1 z xb0 /\ betweenf m x_1 t xb0) -> expf (B m zero x) z t.
Lemma expf_B0_CS_1_a:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> let x0 := cA m zero x in let xb0 := bottom m zero x in let x_1 := cA_1 m one x in expf m x0 xb0 -> (betweenf m x_1 z xb0 /\ betweenf m x_1 t xb0) -> expf (B m zero x) z t.
Lemma expf_B0_CS_1_b_prel1:forall (m:fmap)(x:dart)(i j:nat), inv_hmap m -> succ m zero x -> let x0 := cA m zero 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 let z := Iter (cF m) i xh0_1 in x0 = Iter (cF m) j xh0_1 -> (i <= j < p)%nat -> expf (B m zero x) xh0_1 z.
Lemma expf_B0_CS_1_b_prel2:forall (m:fmap)(x z:dart), inv_hmap m -> succ m zero x -> let x0 := cA m zero 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 -> betweenf m xh0_1 z x0 -> expf (B m zero x) xh0_1 z.
Lemma expf_B0_CS_1_b_aux:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> exd m z -> exd m t -> let x0 := cA m zero 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 -> (betweenf m xh0_1 z x0 /\ betweenf m xh0_1 t x0) -> expf (B m zero x) z t.
Lemma expf_B0_CS_1_b:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> let x0 := cA m zero 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 -> (betweenf m xh0_1 z x0 /\ betweenf m xh0_1 t x0) -> expf (B m zero x) z t.
Lemma expf_B0_CS_1_c_prel:forall (m:fmap)(x z:dart)(i:nat), inv_hmap m -> succ m zero x -> exd m z -> let x0 := cA m zero x in let xb0 := bottom m zero x in let x_1 := cA_1 m one x in let t:= Iter (cF m) i z in expf m x0 xb0 -> ~ expf m x_1 z -> expf (B m zero x) z t.
Lemma expf_B0_CS_1_c:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> let x0 := cA m zero x in let xb0 := bottom m zero x in let x_1 := cA_1 m one x in expf m x0 xb0 -> (~ expf m x_1 z /\ expf m z t) -> expf (B m zero x) z t.
Lemma expf_B0_CS_1:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> 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 expf m x0 xb0 -> (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) -> expf (B m zero x) z t.
Lemma between_expf_B0_1:forall (m:fmap)(x:dart)(i:nat), 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 p:= MF.Iter_upb m x_1 in let z:= Iter (cF m) i x_1 in ~expf m x0 xb0 -> (i < p)%nat -> expf (B m zero x) x_1 z.
Lemma between_expf_B0_2:forall (m:fmap)(x:dart)(i:nat), 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 let z:= Iter (cF m) i xh0_1 in ~expf m x0 xb0 -> (i < p)%nat -> expf (B m zero x) xh0_1 z.
Lemma expf_xb0_xh0_1:forall (m:fmap)(x: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 xb0 xh0_1.
Lemma expf_x0_x_1:forall (m:fmap)(x:dart), inv_hmap m -> exd m x -> let x0 := cA m zero x in let x_1:= cA_1 m one x in expf m x0 x_1.
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 expf_B0_x0_xh0_1: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 ~expf m x0 xb0 -> expf (B m zero x) x0 xh0_1.
Lemma expf_B0_xb0_x_1: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 ~expf m x0 xb0 -> expf (B m zero x) xb0 x_1.
Lemma expf_B0_CS_2_a_I: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 x_1 t -> expf (B m zero x) z t.
Lemma expf_B0_CS_2_a_II: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 xh0_1 t -> expf (B m zero x) z t.
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_b_ind:forall (m:fmap)(x z:dart)(i:nat), inv_hmap m -> succ m zero x -> exd m z -> 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 -> let t:=Iter (cF m) i z in ~expf m x_1 z -> ~expf m xh0_1 z -> expf (B m zero x) z t.
Lemma expf_B0_CS_2_b: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 z t -> ~expf m x_1 z -> ~expf m xh0_1 z -> 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_CS_2:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> let x0 := cA m zero x in let xb0 := bottom m zero x 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 (B m zero x) z t.
Theorem expf_B0_CS:forall (m:fmap)(x z t:dart), inv_hmap m -> succ m zero x -> 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) -> expf (B m zero x) z t.
Lemma expf_B0_CN_i:forall (m:fmap)(x z:dart)(i:nat), inv_hmap m -> succ m zero x -> exd m z -> let t:= Iter (MF.f (B m zero x)) i z in 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 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).
Theorem expf_B0_CNS: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)).
Theorem expf_not_expf_B0: forall (m:fmap)(x:dart), inv_hmap m -> succ m zero x -> let x_1:= cA_1 m one x in let x0 := cA m zero x in let xb0 := bottom m zero x in (expf (B m zero x) x_1 x0 <-> ~expf m x0 xb0).
Lemma inv_hmap_L0L0: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 -> inv_hmap m2.
Lemma inv_hmap_L0L1: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 -> inv_hmap m2.
Lemma betweenf_expf:forall(m:fmap)(z v t:dart), inv_hmap m -> exd m z -> betweenf m z v t -> (expf m z v /\ expf m z t).
Lemma B0_L0_L0:forall (m:fmap)(x y x' y':dart), let m1 := L (L m zero x y) zero x' y' in inv_hmap m1 -> B m1 zero x = L m zero x' y'.
Lemma B0_L1_L0:forall (m:fmap)(x y x' y':dart), let m1 := L (L m zero x y) one x' y' in inv_hmap m1 -> B m1 zero x = L m one x' y'.
Lemma B1_L0_L1:forall (m:fmap)(x y x' y':dart), let m1 := L (L m one x y) zero x' y' in inv_hmap m1 -> B m1 one x = L m zero x' y'.
Lemma betweenf1 : forall(m:fmap)(u v u' v':dart), inv_hmap m -> exd m u' -> u <> u' -> v <> v' -> (betweenf m u' u v' /\ betweenf m u' v v') -> (betweenf m u u' v /\ betweenf m u v' v \/ betweenf m (cF m v) u' (cF_1 m u) /\ betweenf m (cF m v) v' (cF_1 m u)).
Lemma betweenf2:forall(m:fmap)(u v u' v':dart), inv_hmap m -> exd m v' -> u <> u' -> v <> v' -> (betweenf m (cF m v') u (cF_1 m u') /\ betweenf m (cF m v') v (cF_1 m u')) -> (betweenf m u u' v /\ betweenf m u v' v \/ betweenf m (cF m v) u' (cF_1 m u) /\ betweenf m (cF m v) v' (cF_1 m u)).
Lemma nf_L0L0_I: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_II: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_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.
Theorem nf_L0L0: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 -> nf m1 = nf m2.
Lemma inv_hmap_L_B:forall (m:fmap)(k:dim)(x:dart), inv_hmap m -> succ m k x -> inv_hmap (L (B m k x) k x (A m k x)).
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 A_1_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_1 (L (B m k x) k x y) j z = A_1 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.
Lemma cA_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 cA (L (B m k x) k x y) j z = cA m j z.
Lemma cA_1_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 cA_1 (L (B m k x) k x y) j z = cA_1 m j z.
Lemma cF_L_B:forall (m:fmap)(k:dim)(x z:dart), inv_hmap m -> succ m k x -> let y:= A m k x in cF (L (B m k x) k x y) z = cF m z.
Lemma Iter_cF_L_B: forall (m:fmap)(k:dim)(x:dart)(i:nat)( z:dart), inv_hmap m -> succ m k x -> let y:= A m k x in Iter (cF (L (B m k x) k x (A m k x))) i z = Iter (cF m) i z.