(* RENAMING of MF.between: *)

Definition betweenf:= MF.between.

(* Specifications: *)
Lemma cF_L0_1:forall (m:fmap)(x y z:dart), inv_hmap (L m zero x y) -> let x_1 := cA_1 m one x in betweenf m x_1 z y -> cF (L m zero x y) z = if eq_dart_dec y z then x_1 else cF m z.
Lemma cF_L0_2:forall (m:fmap)(x y z:dart), inv_hmap (L m zero x y) -> let y_0_1 := cF m y in let x0 := cA m zero x in betweenf m y_0_1 z x0 -> cF (L m zero x y) z = if eq_dart_dec x0 z then y_0_1 else cF m z.
Lemma between_expf_L0_1:forall (m:fmap)(x y:dart)(i:nat), inv_hmap (L m zero x y) -> let x_1 := cA_1 m one x in let z := Iter (cF m) i x_1 in betweenf m x_1 z y -> expf (L m zero x y) x_1 z.
Lemma between_expf_L0_2:forall (m:fmap)(x y:dart)(i:nat), inv_hmap (L m zero x y) -> let y_0_1 := cF m y in let x0 := cA m zero x in let z := Iter (cF m) i y_0_1 in betweenf m y_0_1 z x0 -> expf (L m zero x y) y_0_1 z.
Lemma between_expf_L0:forall (m:fmap)(x y z t:dart), inv_hmap (L m zero x y) -> let x_1 := cA_1 m one x in let y_0_1 := cF m y in let x0 := cA m zero x in (betweenf m x_1 z y /\ betweenf m x_1 t y \/ betweenf m y_0_1 z x0 /\ betweenf m y_0_1 t x0) -> expf (L m zero x y) z t.
Lemma expf_expf_L0_1: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 let t := Iter (cF m) i z in expf m x_1 y -> ~ expf m x_1 z -> expf (L m zero x y) z t.
Lemma between_expf_L0_3:forall (m:fmap)(x y:dart)(i:nat), inv_hmap (L m zero x y) -> let x0 := cA m zero x in let x_1 := cA_1 m one x in let z := Iter (cF m) i x_1 in ~ expf m x_1 y -> betweenf m x_1 z x0 -> expf (L m zero x y) x_1 z.
Lemma expf_expf_L0_3_bis:forall (m:fmap)(x y z:dart), inv_hmap (L m zero x y) -> let x0 := cA m zero x in let x_1 := cA_1 m one x in ~ expf m x_1 y -> expf m x_1 z -> expf (L m zero x y) x_1 z.
Lemma between_expf_L0_4_prel:forall(m:fmap)(x y:dart)(i:nat), inv_hmap (L m zero x y) -> let x_1 := cA_1 m one x in let y_0 := cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in let z := Iter (cF m) i y_0_1 in ~ expf m x_1 y -> betweenf m y_0_1 z y -> expf (L m zero x y) y_0_1 z.
Lemma expf_expf_L0_4_bis_prel:forall(m:fmap)(x y z:dart), inv_hmap (L m zero x y) -> let x_1 := cA_1 m one x in let y_0 := cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in ~ expf m x_1 y -> expf m y_0_1 z -> expf (L m zero x y) y_0_1 z.
Lemma expf_expf_L0_4_bis:forall(m:fmap)(x y z:dart), inv_hmap (L m zero x y) -> let x_1 := cA_1 m one x in ~ expf m x_1 y -> expf m y z -> expf (L m zero x y) y z.
Lemma expf_L0_5:forall (m:fmap)(x y z t:dart), 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 t \/ expf m x_1 t /\ expf m y z) -> expf (L m zero x y) z t.
Lemma expf_L0_5bis:forall (m:fmap)(x y z t:dart), 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 x_1 t \/ expf m y z /\ expf m y t) -> expf (L m zero x y) z t.
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 expf_expf_L0_2_bis:forall (m:fmap)(x y z t:dart), 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 -> expf m z t -> expf (L m zero x y) z t.
Lemma expf_L0_6:forall (m:fmap)(x y z t:dart), 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 t -> expf m z t -> expf (L m zero x y) z t.
Lemma expf_L0_CS:forall (m:fmap)(x y z t:dart), inv_hmap (L m zero x y) -> exd m z -> let x0 := cA m zero x in let x_1 := cA_1 m one x in let y_0:= cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in (if expf_dec m x_1 y then betweenf m x_1 z y /\ betweenf m x_1 t y \/ betweenf m y_0_1 z x0 /\ betweenf m y_0_1 t x0 \/ ~ expf m x_1 z /\ expf m z t else expf m x_1 z /\ expf m y t \/ expf m x_1 t /\ expf m y z \/ expf m z t) -> expf (L m zero x y) z t.
Lemma expf_L0_CN_1:forall (m:fmap)(x y z:dart)(i:nat), inv_hmap (L m zero x y) -> exd m z -> let x0 := cA m zero x in let x_1 := cA_1 m one x in let y_0:= cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in let t:= Iter (cF (L m zero x y)) i z in expf m x_1 y -> (betweenf m x_1 z y /\ betweenf m x_1 t y \/ betweenf m y_0_1 z x0 /\ betweenf m y_0_1 t x0 \/ ~ expf m x_1 z /\ expf m z t).
Lemma expf_L0_CN_2:forall (m:fmap)(x y z:dart)(i:nat), inv_hmap (L m zero x y) -> exd m z -> let x0 := cA m zero x in let x_1 := cA_1 m one x in let y_0:= cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in let t:= Iter (cF (L m zero x y)) i z in ~expf m x_1 y -> (expf m z t \/ expf m z y /\ expf m t x0 \/ expf m t y /\ expf m z x0).
Lemma expf_L0_CN:forall (m:fmap)(x y z t:dart), inv_hmap (L m zero x y) -> exd m z -> expf (L m zero x y) z t -> let x0 := cA m zero x in let x_1 := cA_1 m one x in let y_0:= cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in (if expf_dec m x_1 y then betweenf m x_1 z y /\ betweenf m x_1 t y \/ betweenf m y_0_1 z x0 /\ betweenf m y_0_1 t x0 \/ ~ expf m x_1 z /\ expf m z t else expf m z t \/ expf m z y /\ expf m t x0 \/ expf m t y /\ expf m z x0).
Theorem expf_L0_CNS:forall (m:fmap)(x y z t:dart), inv_hmap (L m zero x y) -> exd m z -> (expf (L m zero x y) z t <-> let x0 := cA m zero x in let x_1 := cA_1 m one x in let y_0:= cA_1 m zero y in let y_0_1 := cA_1 m one y_0 in (if expf_dec m x_1 y then betweenf m x_1 z y /\ betweenf m x_1 t y \/ betweenf m y_0_1 z x0 /\ betweenf m y_0_1 t x0 \/ ~ expf m x_1 z /\ expf m z t else expf m z t \/ expf m z y /\ expf m t x0 \/ expf m t y /\ expf m z x0)).
Lemma y_L0:forall (m:fmap)(x y:dart), let m1 := L m zero x y in inv_hmap m1 -> y = cA m1 zero x.
Lemma x0_L0:forall (m:fmap)(x y:dart), let m1 := L m zero x y in inv_hmap m1 -> cA m zero x = bottom m1 zero x.
Lemma x_1_L0:forall (m:fmap)(x y:dart), let m1 := L m zero x y in inv_hmap m1 -> cA_1 m one x = cA_1 m1 one x.
Lemma y_0_L0:forall (m:fmap)(x y:dart), let m1 := L m zero x y in inv_hmap m1 -> cA_1 m zero y = top m1 zero x.
Lemma y_0_1_L0:forall (m:fmap)(x y:dart), let m1 := L m zero x y in inv_hmap m1 -> cF m y = cA_1 m1 one (top m1 zero x).
Lemma not_expf_expf_L0_CN: forall (m:fmap)(x y:dart), inv_hmap (L m zero x y) -> let x_1:= cA_1 m one x in let x0 := cA m zero x in ~expf m x_1 y -> expf (L m zero x y) y x0.
Lemma expf_not_expf_L0_CV:forall (m:fmap)(x y:dart), inv_hmap (L m zero x y) -> let x_1:= cA_1 m one x in let x0 := cA m zero x in expf (L m zero x y) y x0 -> ~expf m x_1 y.
Theorem expf_not_expf_L0: forall (m:fmap)(x y:dart), inv_hmap (L m zero x y) -> let x_1:= cA_1 m one x in let x0 := cA m zero x in (expf m x_1 y <-> ~expf (L m zero x y) y x0).