Definition double_round_sqrt_beta_ge_4_hyp fexp1 fexp2 :=
  (forall ex, (2 * fexp1 ex <= fexp1 (2 * ex))%Z)
  /\ (forall ex, (2 * fexp1 ex <= fexp1 (2 * ex - 1))%Z)
  /\ (forall ex, (fexp1 (2 * ex) < 2 * ex)%Z ->
                 (fexp2 ex + ex <= 2 * fexp1 ex - 1)%Z).

Lemma double_round_all_mid_cases : forall fexp1 fexp2 : Z -> Z, Valid_exp fexp1 -> Valid_exp fexp2 -> forall (choice1 choice2 : Z -> bool), forall x, 0 < x -> (fexp2 (ln_beta x) <= fexp1 (ln_beta x) - 1)%Z -> ((fexp1 (ln_beta x) = ln_beta x + 1 :> Z)%Z -> bpow (ln_beta x) - / 2 * ulp beta fexp2 x <= x -> double_round_eq fexp1 fexp2 choice1 choice2 x) -> ((fexp1 (ln_beta x) <= ln_beta x)%Z -> midp fexp1 x - / 2 * ulp beta fexp2 x <= x < midp fexp1 x -> double_round_eq fexp1 fexp2 choice1 choice2 x) -> ((fexp1 (ln_beta x) <= ln_beta x)%Z -> x = midp fexp1 x -> double_round_eq fexp1 fexp2 choice1 choice2 x) -> ((fexp1 (ln_beta x) <= ln_beta x)%Z -> midp fexp1 x < x <= midp fexp1 x + / 2 * ulp beta fexp2 x -> double_round_eq fexp1 fexp2 choice1 choice2 x) -> double_round_eq fexp1 fexp2 choice1 choice2 x.