[STATEMENT]
lemma (in Gromov_hyperbolic_space_geodesic) Morse_Gromov_theorem_aux1:
  fixes f::"real \<Rightarrow> 'a"
  assumes "continuous_on {a..b} f"
          "lambda C-quasi_isometry_on {a..b} f"
          "a \<le> b"
          "geodesic_segment_between G (f a) (f b)"
          "z \<in> {a..b}"
          "delta > deltaG(TYPE('a))"
  shows "infdist (f z) G \<le> lambda^2 * (11/2 * C + 91 * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "C \<ge> 0" "lambda \<ge> 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> C &&& 1 \<le> lambda
[PROOF STEP]
using quasi_isometry_onD assms
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?lambda ?C -quasi_isometry_on ?X ?f; ?x \<in> ?X; ?y \<in> ?X\<rbrakk> \<Longrightarrow> dist (?f ?x) (?f ?y) \<le> ?lambda * dist ?x ?y + ?C
\<lbrakk>?lambda ?C -quasi_isometry_on ?X ?f; ?x \<in> ?X; ?y \<in> ?X\<rbrakk> \<Longrightarrow> 1 / ?lambda * dist ?x ?y - ?C \<le> dist (?f ?x) (?f ?y)
?lambda ?C -quasi_isometry_on ?X ?f \<Longrightarrow> 1 \<le> ?lambda
?lambda ?C -quasi_isometry_on ?X ?f \<Longrightarrow> 0 \<le> ?C
continuous_on {a..b} f
lambda C -quasi_isometry_on {a..b} f
a \<le> b
geodesic_segment_between G (f a) (f b)
z \<in> {a..b}
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 0 \<le> C &&& 1 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> C
1 \<le> lambda

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "delta > 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < delta
[PROOF STEP]
using assms delta_nonneg order_trans
[PROOF STATE]
proof (prove)
using this:
continuous_on {a..b} f
lambda C -quasi_isometry_on {a..b} f
a \<le> b
geodesic_segment_between G (f a) (f b)
z \<in> {a..b}
deltaG TYPE('a) < delta
0 \<le> deltaG TYPE('a)
\<lbrakk>?x \<le> ?y; ?y \<le> ?z\<rbrakk> \<Longrightarrow> ?x \<le> ?z

goal (1 subgoal):
 1. 0 < delta
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
0 < delta

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
text \<open>We give their values to the parameters $L$, $D$ and $\alpha$ that we will use in the proof.
  We also define two constants $K$ and $K_{mult}$ that appear in the precise formulation of the
  bounds. Their values have no precise meaning, they are just the outcome of the computation\<close>
[PROOF STATE]
proof (state)
this:
0 < delta

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
define alpha::real where "alpha = 12/100"
[PROOF STATE]
proof (state)
this:
alpha = 12 / 100

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have alphaaux:"alpha > 0" "alpha \<le> 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < alpha &&& alpha \<le> 1
[PROOF STEP]
unfolding alpha_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < 12 / 100 &&& 12 / 100 \<le> 1
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 < alpha
alpha \<le> 1

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
define L::real where "L = 18 * delta"
[PROOF STATE]
proof (state)
this:
L = 18 * delta

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
define D::real where "D = 55 * delta"
[PROOF STATE]
proof (state)
this:
D = 55 * delta

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
define K where "K = alpha * ln 2 / (5 * (4 + (L + 2 * delta)/D) * delta * lambda)"
[PROOF STATE]
proof (state)
this:
K = alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "K > 0" "L > 0" "D > 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < K &&& 0 < L &&& 0 < D
[PROOF STEP]
unfolding K_def L_def D_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < alpha * ln 2 / (5 * (4 + (18 * delta + 2 * delta) / (55 * delta)) * delta * lambda) &&& 0 < 18 * delta &&& 0 < 55 * delta
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> alpha_def
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
alpha = 12 / 100

goal (1 subgoal):
 1. 0 < alpha * ln 2 / (5 * (4 + (18 * delta + 2 * delta) / (55 * delta)) * delta * lambda) &&& 0 < 18 * delta &&& 0 < 55 * delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 < K
0 < L
0 < D

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have Laux: "L \<ge> 18 * delta" "D \<ge> 50 * delta" "L \<le> D" "D \<le> 4 * L"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (18 * delta \<le> L &&& 50 * delta \<le> D) &&& L \<le> D &&& D \<le> 4 * L
[PROOF STEP]
unfolding L_def D_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (18 * delta \<le> 18 * delta &&& 50 * delta \<le> 55 * delta) &&& 18 * delta \<le> 55 * delta &&& 55 * delta \<le> 4 * (18 * delta)
[PROOF STEP]
using \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta

goal (1 subgoal):
 1. (18 * delta \<le> 18 * delta &&& 50 * delta \<le> 55 * delta) &&& 18 * delta \<le> 55 * delta &&& 55 * delta \<le> 4 * (18 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have Daux: "8 * delta \<le> (1 - alpha) * D"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 8 * delta \<le> (1 - alpha) * D
[PROOF STEP]
unfolding alpha_def D_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 8 * delta \<le> (1 - 12 / 100) * (55 * delta)
[PROOF STEP]
using \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta

goal (1 subgoal):
 1. 8 * delta \<le> (1 - 12 / 100) * (55 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
8 * delta \<le> (1 - alpha) * D

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
define Kmult where "Kmult = ((L + 4 * delta)/(L - 13 * delta)) * ((4 * exp(1/2 * ln 2)) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) / K)"
[PROOF STATE]
proof (state)
this:
Kmult = (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) / K)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "Kmult > 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < Kmult
[PROOF STEP]
unfolding Kmult_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) / K)
[PROOF STEP]
using Laux \<open>delta > 0\<close> \<open>K > 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta
0 < K
1 \<le> lambda

goal (1 subgoal):
 1. 0 < (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) / K)
[PROOF STEP]
by (auto simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
0 < Kmult

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
text \<open>We prove that, for any pair of points to the left and to the right of $f(z)$, the distance
  from $f(z)$ to a geodesic between these points is controlled. We prove this by reducing to a
  closer pair of points, i.e., this is an inductive argument over real numbers. However, we
  formalize it as an artificial induction over natural numbers, as this is how induction works
  best, and since in our reduction step the new pair of points is always significantly closer
  than the initial one, at least by an amount $\delta/\lambda$.

  The main inductive bound that we will prove is the following. In this bound, the first term is
  what comes from the trivial cases 1 and 2.1 in the description of the proof before the statement
  of the theorem, while the most interesting term is the second term, corresponding to the induction
  per se.\<close>
[PROOF STATE]
proof (state)
this:
0 < Kmult

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have Main: "\<And>um uM. um \<in> {a..z} \<Longrightarrow> uM \<in> {z..b}
          \<Longrightarrow> uM - um \<le> n * (1/4) * delta / lambda
          \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda^2 * (D + (3/2) * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um)))"
    for n::nat
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
proof (induction n)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Trivial base case of the induction\<close>
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case 0
[PROOF STATE]
proof (state)
this:
um \<in> {a..z}
uM \<in> {z..b}
uM - um \<le> real 0 * (1 / 4) * delta / lambda

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
um \<in> {a..z}
uM \<in> {z..b}
uM - um \<le> real 0 * (1 / 4) * delta / lambda
[PROOF STEP]
have *: "z = um" "z = uM"
[PROOF STATE]
proof (prove)
using this:
um \<in> {a..z}
uM \<in> {z..b}
uM - um \<le> real 0 * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. z = um &&& z = uM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
z = um
z = uM

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
z = um
z = uM
[PROOF STEP]
have "Gromov_product_at (f z) (f um) (f uM) = 0"
[PROOF STATE]
proof (prove)
using this:
z = um
z = uM

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) = 0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) = 0

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) = 0

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> 1 * (D + (3/2) * L + delta + 11/2 * C) - 2 * delta + 0 * (1 - exp(- K * (uM - um)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))
[PROOF STEP]
using Laux \<open>C \<ge> 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 \<le> C
0 < delta

goal (1 subgoal):
 1. 0 \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
0 \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> lambda^2 * (D + (3/2) * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 1 \<le> lambda\<^sup>2
 2. 0 \<le> D + 3 / 2 * L + delta + 11 / 2 * C
 3. 0 \<le> Kmult
 4. 0 \<le> 1 - exp (- K * (uM - um))
[PROOF STEP]
using \<open>C \<ge> 0\<close> \<open>delta > 0\<close> Laux \<open>D > 0\<close> \<open>K > 0\<close> "0.prems" \<open>lambda \<ge> 1\<close> \<open>Kmult > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> C
0 < delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < D
0 < K
um \<in> {a..z}
uM \<in> {z..b}
uM - um \<le> real 0 * (1 / 4) * delta / lambda
1 \<le> lambda
0 < Kmult

goal (4 subgoals):
 1. 1 \<le> lambda\<^sup>2
 2. 0 \<le> D + 3 / 2 * L + delta + 11 / 2 * C
 3. 0 \<le> Kmult
 4. 0 \<le> 1 - exp (- K * (uM - um))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real 0 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case (Suc n)
[PROOF STATE]
proof (state)
this:
\<lbrakk>?um \<in> {a..z}; ?uM \<in> {z..b}; ?uM - ?um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f ?um) (f ?uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (?uM - ?um)))
um \<in> {a..z}
uM \<in> {z..b}
uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. \<And>n um uM. \<lbrakk>\<And>um uM. \<lbrakk>um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real n * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))); um \<in> {a..z}; uM \<in> {z..b}; uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
proof (cases "Gromov_product_at (f z) (f um) (f uM) \<le> L")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>If $f(z)$ is already close to the geodesic, there is nothing to do, and we do not need
      the induction assumption. This is case 1 in the description above.\<close>
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> L

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "L \<le> 1 * (D + (3/2) * L + delta + 11/2 * C) - 2 * delta + 0 * (1 - exp(- K * (uM - um)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))
[PROOF STEP]
using Laux \<open>C \<ge> 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 \<le> C
0 < delta

goal (1 subgoal):
 1. L \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L \<le> 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> lambda^2 * (D + (3/2) * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 1 \<le> lambda\<^sup>2
 2. 0 \<le> D + 3 / 2 * L + delta + 11 / 2 * C
 3. 0 \<le> Kmult
 4. 0 \<le> 1 - exp (- K * (uM - um))
[PROOF STEP]
using \<open>C \<ge> 0\<close> \<open>delta > 0\<close> Laux \<open>D > 0\<close> "Suc.prems" \<open>K > 0\<close> \<open>lambda \<ge> 1\<close> \<open>Kmult > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> C
0 < delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < D
um \<in> {a..z}
uM \<in> {z..b}
uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda
0 < K
1 \<le> lambda
0 < Kmult

goal (4 subgoals):
 1. 1 \<le> lambda\<^sup>2
 2. 0 \<le> D + 3 / 2 * L + delta + 11 / 2 * C
 3. 0 \<le> Kmult
 4. 0 \<le> 1 - exp (- K * (uM - um))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
1 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + 0 * (1 - exp (- K * (uM - um))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
L \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
using True
[PROOF STATE]
proof (prove)
using this:
L \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
Gromov_product_at (f z) (f um) (f uM) \<le> L

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>We come to the interesting case where $f(z)$ is far away from a geodesic between
      $f(um)$ and $f(uM)$. Let $m$ be close to a projection of $f(z)$ on such a geodesic (we use
      the opposite point of $f(z)$ on the corresponding tripod). On a geodesic between $f(z)$ and $m$,
      consider the point $pi_z$ at distance $(f(um), f(uM))_{f(z)}$ of $f(z)$. It is very close to
      $m$ (within distance $2 \delta$). We will push the points $f(um)$ and $f(uM)$
      towards $f(z)$ by considering points whose projection on a geodesic $H$ between $m$ and
      $z$ is roughly at distance $L$ of $pi_z$.\<close>
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> L

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define m where "m = geodesic_segment_param {f um--f uM} (f um) (Gromov_product_at (f um) (f z) (f uM))"
[PROOF STATE]
proof (state)
this:
m = geodesic_segment_param {f um--f uM} (f um) (Gromov_product_at (f um) (f z) (f uM))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG TYPE('a)
[PROOF STEP]
unfolding m_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) (geodesic_segment_param {f um--f uM} (f um) (Gromov_product_at (f um) (f z) (f uM))) \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG TYPE('a)
[PROOF STEP]
by (rule dist_triangle_side_middle, auto)
[PROOF STATE]
proof (state)
this:
dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG TYPE('a)
[PROOF STEP]
have *: "dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * delta"
[PROOF STATE]
proof (prove)
using this:
dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * delta
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * deltaG TYPE('a)
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * delta

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "Gromov_product_at (f z) (f um) (f uM) \<le> infdist (f z) {f um--f uM}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> infdist (f z) {f um--f uM}
[PROOF STEP]
by (intro mono_intros, auto)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> infdist (f z) {f um--f uM}

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> infdist (f z) {f um--f uM}

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> dist (f z) m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f z) {f um--f uM} \<le> dist (f z) m
[PROOF STEP]
apply (rule infdist_le)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. m \<in> {f um--f uM}
[PROOF STEP]
unfolding m_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {f um--f uM} (f um) (Gromov_product_at (f um) (f z) (f uM)) \<in> {f um--f uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
infdist (f z) {f um--f uM} \<le> dist (f z) m

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (f z) m
[PROOF STEP]
have **: "Gromov_product_at (f z) (f um) (f uM) \<le> dist (f z) m"
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (f z) m

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> dist (f z) m
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (f z) m

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define H where "H = {f z--m}"
[PROOF STATE]
proof (state)
this:
H = {f z--m}

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define pi_z where "pi_z = geodesic_segment_param H (f z) (Gromov_product_at (f z) (f um) (f uM))"
[PROOF STATE]
proof (state)
this:
pi_z = geodesic_segment_param H (f z) (Gromov_product_at (f z) (f um) (f uM))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "pi_z \<in> H" "m \<in> H" "f z \<in> H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. pi_z \<in> H &&& m \<in> H &&& f z \<in> H
[PROOF STEP]
unfolding pi_z_def H_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {f z--m} (f z) (Gromov_product_at (f z) (f um) (f uM)) \<in> {f z--m} &&& m \<in> {f z--m} &&& f z \<in> {f z--m}
[PROOF STEP]
by (auto simp add: geodesic_segment_param_in_segment)
[PROOF STATE]
proof (state)
this:
pi_z \<in> H
m \<in> H
f z \<in> H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have H: "geodesic_segment_between H (f z) m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_between H (f z) m
[PROOF STEP]
unfolding H_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_between {f z--m} (f z) m
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
geodesic_segment_between H (f z) m

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have Dpi_z: "dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)
[PROOF STEP]
unfolding pi_z_def H_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) (geodesic_segment_param {f z--m} (f z) (Gromov_product_at (f z) (f um) (f uM))) = Gromov_product_at (f z) (f um) (f uM)
[PROOF STEP]
by (rule geodesic_segment_param(6)[where ?y = m], auto simp add: **)
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dist (f z) m = dist (f z) pi_z + dist pi_z m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) m = dist (f z) pi_z + dist pi_z m
[PROOF STEP]
apply (rule geodesic_segment_dist[of H, symmetric])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. geodesic_segment_between H (f z) m
 2. pi_z \<in> H
[PROOF STEP]
using \<open>pi_z \<in> H\<close>
[PROOF STATE]
proof (prove)
using this:
pi_z \<in> H

goal (2 subgoals):
 1. geodesic_segment_between H (f z) m
 2. pi_z \<in> H
[PROOF STEP]
unfolding H_def
[PROOF STATE]
proof (prove)
using this:
pi_z \<in> {f z--m}

goal (2 subgoals):
 1. geodesic_segment_between {f z--m} (f z) m
 2. pi_z \<in> {f z--m}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f z) m = dist (f z) pi_z + dist pi_z m

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)
dist (f z) m = dist (f z) pi_z + dist pi_z m
[PROOF STEP]
have "dist pi_z m \<le> 2 * delta"
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)
dist (f z) m = dist (f z) pi_z + dist pi_z m

goal (1 subgoal):
 1. dist pi_z m \<le> 2 * delta
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)
dist (f z) m = dist (f z) pi_z + dist pi_z m
dist (f z) m \<le> Gromov_product_at (f z) (f um) (f uM) + 2 * delta

goal (1 subgoal):
 1. dist pi_z m \<le> 2 * delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist pi_z m \<le> 2 * delta

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Introduce the notation $p$ for some projection on the geodesic $H$.\<close>
[PROOF STATE]
proof (state)
this:
dist pi_z m \<le> 2 * delta

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define p where "p = (\<lambda>r. SOME x. x \<in> proj_set (f r) H)"
[PROOF STATE]
proof (state)
this:
p = (\<lambda>r. SOME x. x \<in> proj_set (f r) H)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have p: "p x \<in> proj_set (f x) H" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p x \<in> proj_set (f x) H
[PROOF STEP]
unfolding p_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (SOME xa. xa \<in> proj_set (f x) H) \<in> proj_set (f x) H
[PROOF STEP]
using proj_set_nonempty_of_proper[of H "f x"] geodesic_segment_topology[OF geodesic_segmentI[OF H]]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>proper H; H \<noteq> {}\<rbrakk> \<Longrightarrow> proj_set (f x) H \<noteq> {}
compact H
connected H
path_connected H
bounded H
closed H
H \<noteq> {}
proper H

goal (1 subgoal):
 1. (SOME xa. xa \<in> proj_set (f x) H) \<in> proj_set (f x) H
[PROOF STEP]
by (simp add: some_in_eq)
[PROOF STATE]
proof (state)
this:
p ?x \<in> proj_set (f ?x) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
p ?x \<in> proj_set (f ?x) H
[PROOF STEP]
have pH: "p x \<in> H" for x
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H

goal (1 subgoal):
 1. p x \<in> H
[PROOF STEP]
using proj_setD(1)
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
?y \<in> proj_set ?x ?A \<Longrightarrow> ?y \<in> ?A

goal (1 subgoal):
 1. p x \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p ?x \<in> H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have pz: "p z = f z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p z = f z
[PROOF STEP]
using p[of z] H
[PROOF STATE]
proof (prove)
using this:
p z \<in> proj_set (f z) H
geodesic_segment_between H (f z) m

goal (1 subgoal):
 1. p z = f z
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p z = f z

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>The projection of $f(um)$ on $H$ is close to $pi_z$ (but it does not have to be exactly
      $pi_z$). It is between $pi_z$ and $m$.\<close>
[PROOF STATE]
proof (state)
this:
p z = f z

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dist (f um) (f z) \<le> dist (f um) (p um) + dist (p um) (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f um) (f z) \<le> dist (f um) (p um) + dist (p um) (f z)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f um) (f z) \<le> dist (f um) (p um) + dist (p um) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f um) (f z) \<le> dist (f um) (p um) + dist (p um) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> dist (f um) m + dist (p um) (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f um) (p um) + dist (p um) (f z) \<le> dist (f um) m + dist (p um) (f z)
[PROOF STEP]
unfolding proj_setD(2)[OF p[of um]] H_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f um) {f z--m} + dist (p um) (f z) \<le> dist (f um) m + dist (p um) (f z)
[PROOF STEP]
by (auto intro!: infdist_le)
[PROOF STATE]
proof (state)
this:
dist (f um) (p um) + dist (p um) (f z) \<le> dist (f um) m + dist (p um) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f um) (p um) + dist (p um) (f z) \<le> dist (f um) m + dist (p um) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... = Gromov_product_at (f um) (f z) (f uM) + dist (p um) (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f um) m + dist (p um) (f z) = Gromov_product_at (f um) (f z) (f uM) + dist (p um) (f z)
[PROOF STEP]
unfolding m_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f um) (geodesic_segment_param {f um--f uM} (f um) (Gromov_product_at (f um) (f z) (f uM))) + dist (p um) (f z) = Gromov_product_at (f um) (f z) (f uM) + dist (p um) (f z)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f um) m + dist (p um) (f z) = Gromov_product_at (f um) (f z) (f uM) + dist (p um) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f um) (f z) \<le> Gromov_product_at (f um) (f z) (f uM) + dist (p um) (f z)
[PROOF STEP]
have A: "Gromov_product_at (f z) (f um) (f uM) \<le> dist (p um) (f z)"
[PROOF STATE]
proof (prove)
using this:
dist (f um) (f z) \<le> Gromov_product_at (f um) (f z) (f uM) + dist (p um) (f z)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> dist (p um) (f z)
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (f um) (f z) \<le> (dist (f um) (f z) + dist (f um) (f uM) - dist (f z) (f uM)) / 2 + dist (p um) (f z)

goal (1 subgoal):
 1. (dist (f z) (f um) + dist (f z) (f uM) - dist (f um) (f uM)) / 2 \<le> dist (p um) (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute divide_simps)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (p um) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dist (p um) pi_z = abs(dist (p um) (f z) - dist pi_z (f z))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p um) pi_z = \<bar>dist (p um) (f z) - dist pi_z (f z)\<bar>
[PROOF STEP]
apply (rule dist_along_geodesic_wrt_endpoint[of H _ m])
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. geodesic_segment_between H (f z) m
 2. p um \<in> H
 3. pi_z \<in> H
[PROOF STEP]
using pH \<open>pi_z \<in> H\<close> H_def
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> H
pi_z \<in> H
H = {f z--m}

goal (3 subgoals):
 1. geodesic_segment_between H (f z) m
 2. p um \<in> H
 3. pi_z \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (p um) pi_z = \<bar>dist (p um) (f z) - dist pi_z (f z)\<bar>

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (p um) pi_z = \<bar>dist (p um) (f z) - dist pi_z (f z)\<bar>

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... = dist (p um) (f z) - dist pi_z (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (p um) (f z) - dist pi_z (f z)\<bar> = dist (p um) (f z) - dist pi_z (f z)
[PROOF STEP]
using A Dpi_z
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (p um) (f z)
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)

goal (1 subgoal):
 1. \<bar>dist (p um) (f z) - dist pi_z (f z)\<bar> = dist (p um) (f z) - dist pi_z (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
\<bar>dist (p um) (f z) - dist pi_z (f z)\<bar> = dist (p um) (f z) - dist pi_z (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (p um) pi_z = dist (p um) (f z) - dist pi_z (f z)
[PROOF STEP]
have Dum: "dist (p um) (f z) = dist (p um) pi_z + dist pi_z (f z)"
[PROOF STATE]
proof (prove)
using this:
dist (p um) pi_z = dist (p um) (f z) - dist pi_z (f z)

goal (1 subgoal):
 1. dist (p um) (f z) = dist (p um) pi_z + dist pi_z (f z)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (p um) (f z) = dist (p um) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Choose a point $f(ym)$ whose projection on $H$ is roughly at distance $L$ of $pi_z$.\<close>
[PROOF STATE]
proof (state)
this:
dist (p um) (f z) = dist (p um) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "\<exists>ym \<in> {um..z}. (dist (p um) (p ym) \<in> {(L + dist pi_z (p um)) - 4 * delta - 2 * 0 .. L + dist pi_z (p um)})
                    \<and> (\<forall>r \<in> {um..ym}. dist (p um) (p r) \<le> L + dist pi_z (p um))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>ym\<in>{um..z}. dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)} \<and> (\<forall>r\<in>{um..ym}. dist (p um) (p r) \<le> L + dist pi_z (p um))
[PROOF STEP]
proof (rule quasi_convex_projection_small_gaps[where ?f = f and ?G = H])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. continuous_on {um..z} f
 2. um \<le> z
 3. quasiconvex 0 H
 4. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 5. deltaG TYPE('a) < delta
 6. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
show "continuous_on {um..z} f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on {um..z} f
[PROOF STEP]
apply (rule continuous_on_subset[OF \<open>continuous_on {a..b} f\<close>])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {um..z} \<subseteq> {a..b}
[PROOF STEP]
using \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
um \<in> {a..z}
z \<in> {a..b}

goal (1 subgoal):
 1. {um..z} \<subseteq> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_on {um..z} f

goal (5 subgoals):
 1. um \<le> z
 2. quasiconvex 0 H
 3. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 4. deltaG TYPE('a) < delta
 5. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
show "um \<le> z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. um \<le> z
[PROOF STEP]
using \<open>um \<in> {a..z}\<close>
[PROOF STATE]
proof (prove)
using this:
um \<in> {a..z}

goal (1 subgoal):
 1. um \<le> z
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
um \<le> z

goal (4 subgoals):
 1. quasiconvex 0 H
 2. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 3. deltaG TYPE('a) < delta
 4. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
show "quasiconvex 0 H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex 0 H
[PROOF STEP]
using quasiconvex_of_geodesic geodesic_segmentI H
[PROOF STATE]
proof (prove)
using this:
geodesic_segment ?G \<Longrightarrow> quasiconvex 0 ?G
geodesic_segment_between ?G ?x ?y \<Longrightarrow> geodesic_segment ?G
geodesic_segment_between H (f z) m

goal (1 subgoal):
 1. quasiconvex 0 H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
quasiconvex 0 H

goal (3 subgoals):
 1. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 2. deltaG TYPE('a) < delta
 3. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (2 subgoals):
 1. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 2. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
have "L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)
[PROOF STEP]
using False Dpi_z
[PROOF STATE]
proof (prove)
using this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> L
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)

goal (1 subgoal):
 1. L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)

goal (2 subgoals):
 1. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 2. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)
[PROOF STEP]
have "L + dist pi_z (p um) \<le> dist (p um) (f z)"
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)

goal (1 subgoal):
 1. L + dist pi_z (p um) \<le> dist (p um) (f z)
[PROOF STEP]
using Dum
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p um) \<le> dist (f z) pi_z + dist pi_z (p um)
dist (p um) (f z) = dist (p um) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. L + dist pi_z (p um) \<le> dist (p um) (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
L + dist pi_z (p um) \<le> dist (p um) (f z)

goal (2 subgoals):
 1. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
 2. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
L + dist pi_z (p um) \<le> dist (p um) (f z)
[PROOF STEP]
show "L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}"
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p um) \<le> dist (p um) (f z)

goal (1 subgoal):
 1. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
using \<open>delta > 0\<close> False L_def pz
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p um) \<le> dist (p um) (f z)
0 < delta
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> L
L = 18 * delta
p z = f z

goal (1 subgoal):
 1. L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L + dist pi_z (p um) \<in> {4 * delta + 2 * 0..dist (p um) (p z)}

goal (1 subgoal):
 1. \<And>ym. ym \<in> {um..z} \<Longrightarrow> p ym \<in> proj_set (f ym) H
[PROOF STEP]
show "p ym \<in> proj_set (f ym) H" for ym
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p ym \<in> proj_set (f ym) H
[PROOF STEP]
using p
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H

goal (1 subgoal):
 1. p ym \<in> proj_set (f ym) H
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
p ?ym \<in> proj_set (f ?ym) H

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>ym\<in>{um..z}. dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)} \<and> (\<forall>r\<in>{um..ym}. dist (p um) (p r) \<le> L + dist pi_z (p um))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>ym\<in>{um..z}. dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)} \<and> (\<forall>r\<in>{um..ym}. dist (p um) (p r) \<le> L + dist pi_z (p um))
[PROOF STEP]
obtain ym where ym : "ym \<in> {um..z}"
                                "dist (p um) (p ym) \<in> {(L + dist pi_z (p um)) - 4 * delta - 2 * 0 .. L + dist pi_z (p um)}"
                                "\<And>r. r \<in> {um..ym} \<Longrightarrow> dist (p um) (p r) \<le> L + dist pi_z (p um)"
[PROOF STATE]
proof (prove)
using this:
\<exists>ym\<in>{um..z}. dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)} \<and> (\<forall>r\<in>{um..ym}. dist (p um) (p r) \<le> L + dist pi_z (p um))

goal (1 subgoal):
 1. (\<And>ym. \<lbrakk>ym \<in> {um..z}; dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)}; \<And>r. r \<in> {um..ym} \<Longrightarrow> dist (p um) (p r) \<le> L + dist pi_z (p um)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
ym \<in> {um..z}
dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)}
?r \<in> {um..ym} \<Longrightarrow> dist (p um) (p ?r) \<le> L + dist pi_z (p um)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have *: "continuous_on {um..ym} (\<lambda>r. infdist (f r) H)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on {um..ym} (\<lambda>r. infdist (f r) H)
[PROOF STEP]
using continuous_on_infdist[OF continuous_on_subset[OF \<open>continuous_on {a..b} f\<close>, of "{um..ym}"], of H]
        \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
{um..ym} \<subseteq> {a..b} \<Longrightarrow> continuous_on {um..ym} (\<lambda>x. infdist (f x) H)
ym \<in> {um..z}
um \<in> {a..z}
z \<in> {a..b}

goal (1 subgoal):
 1. continuous_on {um..ym} (\<lambda>r. infdist (f r) H)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_on {um..ym} (\<lambda>r. infdist (f r) H)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Choose a point $cm$ between $f(um)$ and $f(ym)$ realizing the minimal distance to $H$.
      Call this distance $dm$.\<close>
[PROOF STATE]
proof (state)
this:
continuous_on {um..ym} (\<lambda>r. infdist (f r) H)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "\<exists>closestm \<in> {um..ym}. \<forall>v \<in> {um..ym}. infdist (f closestm) H \<le> infdist (f v) H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>closestm\<in>{um..ym}. \<forall>v\<in>{um..ym}. infdist (f closestm) H \<le> infdist (f v) H
[PROOF STEP]
apply (rule continuous_attains_inf)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. compact {um..ym}
 2. {um..ym} \<noteq> {}
 3. continuous_on {um..ym} (\<lambda>x. infdist (f x) H)
[PROOF STEP]
using ym(1) *
[PROOF STATE]
proof (prove)
using this:
ym \<in> {um..z}
continuous_on {um..ym} (\<lambda>r. infdist (f r) H)

goal (3 subgoals):
 1. compact {um..ym}
 2. {um..ym} \<noteq> {}
 3. continuous_on {um..ym} (\<lambda>x. infdist (f x) H)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>closestm\<in>{um..ym}. \<forall>v\<in>{um..ym}. infdist (f closestm) H \<le> infdist (f v) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>closestm\<in>{um..ym}. \<forall>v\<in>{um..ym}. infdist (f closestm) H \<le> infdist (f v) H
[PROOF STEP]
obtain closestm where closestm: "closestm \<in> {um..ym}" "\<And>v. v \<in> {um..ym} \<Longrightarrow> infdist (f closestm) H \<le> infdist (f v) H"
[PROOF STATE]
proof (prove)
using this:
\<exists>closestm\<in>{um..ym}. \<forall>v\<in>{um..ym}. infdist (f closestm) H \<le> infdist (f v) H

goal (1 subgoal):
 1. (\<And>closestm. \<lbrakk>closestm \<in> {um..ym}; \<And>v. v \<in> {um..ym} \<Longrightarrow> infdist (f closestm) H \<le> infdist (f v) H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
closestm \<in> {um..ym}
?v \<in> {um..ym} \<Longrightarrow> infdist (f closestm) H \<le> infdist (f ?v) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define dm where "dm = infdist (f closestm) H"
[PROOF STATE]
proof (state)
this:
dm = infdist (f closestm) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have [simp]: "dm \<ge> 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> dm
[PROOF STEP]
unfolding dm_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> infdist (f closestm) H
[PROOF STEP]
using infdist_nonneg
[PROOF STATE]
proof (prove)
using this:
0 \<le> infdist ?x ?A

goal (1 subgoal):
 1. 0 \<le> infdist (f closestm) H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Same things but in the interval $[z, uM]$.\<close>
[PROOF STATE]
proof (state)
this:
0 \<le> dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have I: "dist m (f uM) = dist (f um) (f uM) - dist (f um) m"
              "dist (f um) m = Gromov_product_at (f um) (f z) (f uM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (f uM) = dist (f um) (f uM) - dist (f um) m &&& dist (f um) m = Gromov_product_at (f um) (f z) (f uM)
[PROOF STEP]
using geodesic_segment_dist[of "{f um--f uM}" "f um" "f uM" m] m_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>geodesic_segment_between {f um--f uM} (f um) (f uM); m \<in> {f um--f uM}\<rbrakk> \<Longrightarrow> dist (f um) m + dist m (f uM) = dist (f um) (f uM)
m = geodesic_segment_param {f um--f uM} (f um) (Gromov_product_at (f um) (f z) (f uM))

goal (1 subgoal):
 1. dist m (f uM) = dist (f um) (f uM) - dist (f um) m &&& dist (f um) m = Gromov_product_at (f um) (f z) (f uM)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist m (f uM) = dist (f um) (f uM) - dist (f um) m
dist (f um) m = Gromov_product_at (f um) (f z) (f uM)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dist (f uM) (f z) \<le> dist (f uM) (p uM) + dist (p uM) (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f uM) (f z) \<le> dist (f uM) (p uM) + dist (p uM) (f z)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f uM) (f z) \<le> dist (f uM) (p uM) + dist (p uM) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f uM) (f z) \<le> dist (f uM) (p uM) + dist (p uM) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> dist (f uM) m + dist (p uM) (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f uM) (p uM) + dist (p uM) (f z) \<le> dist (f uM) m + dist (p uM) (f z)
[PROOF STEP]
unfolding proj_setD(2)[OF p[of uM]] H_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f uM) {f z--m} + dist (p uM) (f z) \<le> dist (f uM) m + dist (p uM) (f z)
[PROOF STEP]
by (auto intro!: infdist_le)
[PROOF STATE]
proof (state)
this:
dist (f uM) (p uM) + dist (p uM) (f z) \<le> dist (f uM) m + dist (p uM) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f uM) (p uM) + dist (p uM) (f z) \<le> dist (f uM) m + dist (p uM) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... = Gromov_product_at (f uM) (f z) (f um) + dist (p uM) (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f uM) m + dist (p uM) (f z) = Gromov_product_at (f uM) (f z) (f um) + dist (p uM) (f z)
[PROOF STEP]
using I
[PROOF STATE]
proof (prove)
using this:
dist m (f uM) = dist (f um) (f uM) - dist (f um) m
dist (f um) m = Gromov_product_at (f um) (f z) (f uM)

goal (1 subgoal):
 1. dist (f uM) m + dist (p uM) (f z) = Gromov_product_at (f uM) (f z) (f um) + dist (p uM) (f z)
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist m (f uM) = dist (f um) (f uM) - dist (f um) m
dist (f um) m = (dist (f um) (f z) + dist (f um) (f uM) - dist (f z) (f uM)) / 2

goal (1 subgoal):
 1. dist (f uM) m + dist (p uM) (f z) = (dist (f uM) (f z) + dist (f uM) (f um) - dist (f z) (f um)) / 2 + dist (p uM) (f z)
[PROOF STEP]
by (simp add: divide_simps algebra_simps metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (f uM) m + dist (p uM) (f z) = Gromov_product_at (f uM) (f z) (f um) + dist (p uM) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f uM) (f z) \<le> Gromov_product_at (f uM) (f z) (f um) + dist (p uM) (f z)
[PROOF STEP]
have A: "Gromov_product_at (f z) (f um) (f uM) \<le> dist (p uM) (f z)"
[PROOF STATE]
proof (prove)
using this:
dist (f uM) (f z) \<le> Gromov_product_at (f uM) (f z) (f um) + dist (p uM) (f z)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> dist (p uM) (f z)
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (f uM) (f z) \<le> (dist (f uM) (f z) + dist (f uM) (f um) - dist (f z) (f um)) / 2 + dist (p uM) (f z)

goal (1 subgoal):
 1. (dist (f z) (f um) + dist (f z) (f uM) - dist (f um) (f uM)) / 2 \<le> dist (p uM) (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute divide_simps)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (p uM) (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dist (p uM) pi_z = abs(dist (p uM) (f z) - dist pi_z (f z))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p uM) pi_z = \<bar>dist (p uM) (f z) - dist pi_z (f z)\<bar>
[PROOF STEP]
apply (rule dist_along_geodesic_wrt_endpoint[of H _ m])
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. geodesic_segment_between H (f z) m
 2. p uM \<in> H
 3. pi_z \<in> H
[PROOF STEP]
using pH \<open>pi_z \<in> H\<close> H_def
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> H
pi_z \<in> H
H = {f z--m}

goal (3 subgoals):
 1. geodesic_segment_between H (f z) m
 2. p uM \<in> H
 3. pi_z \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (p uM) pi_z = \<bar>dist (p uM) (f z) - dist pi_z (f z)\<bar>

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (p uM) pi_z = \<bar>dist (p uM) (f z) - dist pi_z (f z)\<bar>

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... = dist (p uM) (f z) - dist pi_z (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (p uM) (f z) - dist pi_z (f z)\<bar> = dist (p uM) (f z) - dist pi_z (f z)
[PROOF STEP]
using A Dpi_z
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> dist (p uM) (f z)
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)

goal (1 subgoal):
 1. \<bar>dist (p uM) (f z) - dist pi_z (f z)\<bar> = dist (p uM) (f z) - dist pi_z (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
\<bar>dist (p uM) (f z) - dist pi_z (f z)\<bar> = dist (p uM) (f z) - dist pi_z (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (p uM) pi_z = dist (p uM) (f z) - dist pi_z (f z)
[PROOF STEP]
have DuM: "dist (p uM) (f z) = dist (p uM) pi_z + dist pi_z (f z)"
[PROOF STATE]
proof (prove)
using this:
dist (p uM) pi_z = dist (p uM) (f z) - dist pi_z (f z)

goal (1 subgoal):
 1. dist (p uM) (f z) = dist (p uM) pi_z + dist pi_z (f z)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (p uM) (f z) = dist (p uM) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Choose a point $f(yM)$ whose projection on $H$ is roughly at distance $L$ of $pi_z$.\<close>
[PROOF STATE]
proof (state)
this:
dist (p uM) (f z) = dist (p uM) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "\<exists>yM \<in> {z..uM}. dist (p uM) (p yM) \<in> {(L + dist pi_z (p uM)) - 4* delta - 2 * 0 .. L + dist pi_z (p uM)}
                    \<and> (\<forall>r \<in> {yM..uM}. dist (p uM) (p r) \<le> L + dist pi_z (p uM))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>yM\<in>{z..uM}. dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)} \<and> (\<forall>r\<in>{yM..uM}. dist (p uM) (p r) \<le> L + dist pi_z (p uM))
[PROOF STEP]
proof (rule quasi_convex_projection_small_gaps'[where ?f = f and ?G = H])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. continuous_on {z..uM} f
 2. z \<le> uM
 3. quasiconvex 0 H
 4. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 5. deltaG TYPE('a) < delta
 6. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
show "continuous_on {z..uM} f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on {z..uM} f
[PROOF STEP]
apply (rule continuous_on_subset[OF \<open>continuous_on {a..b} f\<close>])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {z..uM} \<subseteq> {a..b}
[PROOF STEP]
using \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
uM \<in> {z..b}
z \<in> {a..b}

goal (1 subgoal):
 1. {z..uM} \<subseteq> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_on {z..uM} f

goal (5 subgoals):
 1. z \<le> uM
 2. quasiconvex 0 H
 3. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 4. deltaG TYPE('a) < delta
 5. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
show "z \<le> uM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. z \<le> uM
[PROOF STEP]
using \<open>uM \<in> {z..b}\<close>
[PROOF STATE]
proof (prove)
using this:
uM \<in> {z..b}

goal (1 subgoal):
 1. z \<le> uM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
z \<le> uM

goal (4 subgoals):
 1. quasiconvex 0 H
 2. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 3. deltaG TYPE('a) < delta
 4. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
show "quasiconvex 0 H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex 0 H
[PROOF STEP]
using quasiconvex_of_geodesic geodesic_segmentI H
[PROOF STATE]
proof (prove)
using this:
geodesic_segment ?G \<Longrightarrow> quasiconvex 0 ?G
geodesic_segment_between ?G ?x ?y \<Longrightarrow> geodesic_segment ?G
geodesic_segment_between H (f z) m

goal (1 subgoal):
 1. quasiconvex 0 H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
quasiconvex 0 H

goal (3 subgoals):
 1. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 2. deltaG TYPE('a) < delta
 3. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (2 subgoals):
 1. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 2. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
have "L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)
[PROOF STEP]
using False Dpi_z
[PROOF STATE]
proof (prove)
using this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> L
dist (f z) pi_z = Gromov_product_at (f z) (f um) (f uM)

goal (1 subgoal):
 1. L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)

goal (2 subgoals):
 1. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 2. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)
[PROOF STEP]
have "L + dist pi_z (p uM) \<le> dist (p uM) (f z)"
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)

goal (1 subgoal):
 1. L + dist pi_z (p uM) \<le> dist (p uM) (f z)
[PROOF STEP]
using DuM
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p uM) \<le> dist (f z) pi_z + dist pi_z (p uM)
dist (p uM) (f z) = dist (p uM) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. L + dist pi_z (p uM) \<le> dist (p uM) (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
L + dist pi_z (p uM) \<le> dist (p uM) (f z)

goal (2 subgoals):
 1. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
 2. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
L + dist pi_z (p uM) \<le> dist (p uM) (f z)
[PROOF STEP]
show "L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}"
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p uM) \<le> dist (p uM) (f z)

goal (1 subgoal):
 1. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
using \<open>delta > 0\<close> False L_def pz
[PROOF STATE]
proof (prove)
using this:
L + dist pi_z (p uM) \<le> dist (p uM) (f z)
0 < delta
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> L
L = 18 * delta
p z = f z

goal (1 subgoal):
 1. L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
L + dist pi_z (p uM) \<in> {4 * delta + 2 * 0..dist (p z) (p uM)}

goal (1 subgoal):
 1. \<And>x. x \<in> {z..uM} \<Longrightarrow> p x \<in> proj_set (f x) H
[PROOF STEP]
show "p yM \<in> proj_set (f yM) H" for yM
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p yM \<in> proj_set (f yM) H
[PROOF STEP]
using p
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H

goal (1 subgoal):
 1. p yM \<in> proj_set (f yM) H
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
p ?yM \<in> proj_set (f ?yM) H

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>yM\<in>{z..uM}. dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)} \<and> (\<forall>r\<in>{yM..uM}. dist (p uM) (p r) \<le> L + dist pi_z (p uM))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>yM\<in>{z..uM}. dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)} \<and> (\<forall>r\<in>{yM..uM}. dist (p uM) (p r) \<le> L + dist pi_z (p uM))
[PROOF STEP]
obtain yM where yM: "yM \<in> {z..uM}"
                              "dist (p uM) (p yM) \<in> {(L + dist pi_z (p uM)) - 4* delta - 2 * 0 .. L + dist pi_z (p uM)}"
                              "\<And>r. r \<in> {yM..uM} \<Longrightarrow> dist (p uM) (p r) \<le> L + dist pi_z (p uM)"
[PROOF STATE]
proof (prove)
using this:
\<exists>yM\<in>{z..uM}. dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)} \<and> (\<forall>r\<in>{yM..uM}. dist (p uM) (p r) \<le> L + dist pi_z (p uM))

goal (1 subgoal):
 1. (\<And>yM. \<lbrakk>yM \<in> {z..uM}; dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)}; \<And>r. r \<in> {yM..uM} \<Longrightarrow> dist (p uM) (p r) \<le> L + dist pi_z (p uM)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
yM \<in> {z..uM}
dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)}
?r \<in> {yM..uM} \<Longrightarrow> dist (p uM) (p ?r) \<le> L + dist pi_z (p uM)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have *: "continuous_on {yM..uM} (\<lambda>r. infdist (f r) H)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on {yM..uM} (\<lambda>r. infdist (f r) H)
[PROOF STEP]
using continuous_on_infdist[OF continuous_on_subset[OF \<open>continuous_on {a..b} f\<close>, of "{yM..uM}"], of H]
        \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
{yM..uM} \<subseteq> {a..b} \<Longrightarrow> continuous_on {yM..uM} (\<lambda>x. infdist (f x) H)
yM \<in> {z..uM}
uM \<in> {z..b}
z \<in> {a..b}

goal (1 subgoal):
 1. continuous_on {yM..uM} (\<lambda>r. infdist (f r) H)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_on {yM..uM} (\<lambda>r. infdist (f r) H)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "\<exists>closestM \<in> {yM..uM}. \<forall>v \<in> {yM..uM}. infdist (f closestM) H \<le> infdist (f v) H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>closestM\<in>{yM..uM}. \<forall>v\<in>{yM..uM}. infdist (f closestM) H \<le> infdist (f v) H
[PROOF STEP]
apply (rule continuous_attains_inf)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. compact {yM..uM}
 2. {yM..uM} \<noteq> {}
 3. continuous_on {yM..uM} (\<lambda>x. infdist (f x) H)
[PROOF STEP]
using yM(1) *
[PROOF STATE]
proof (prove)
using this:
yM \<in> {z..uM}
continuous_on {yM..uM} (\<lambda>r. infdist (f r) H)

goal (3 subgoals):
 1. compact {yM..uM}
 2. {yM..uM} \<noteq> {}
 3. continuous_on {yM..uM} (\<lambda>x. infdist (f x) H)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>closestM\<in>{yM..uM}. \<forall>v\<in>{yM..uM}. infdist (f closestM) H \<le> infdist (f v) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>closestM\<in>{yM..uM}. \<forall>v\<in>{yM..uM}. infdist (f closestM) H \<le> infdist (f v) H
[PROOF STEP]
obtain closestM where closestM: "closestM \<in> {yM..uM}" "\<And>v. v \<in> {yM..uM} \<Longrightarrow> infdist (f closestM) H \<le> infdist (f v) H"
[PROOF STATE]
proof (prove)
using this:
\<exists>closestM\<in>{yM..uM}. \<forall>v\<in>{yM..uM}. infdist (f closestM) H \<le> infdist (f v) H

goal (1 subgoal):
 1. (\<And>closestM. \<lbrakk>closestM \<in> {yM..uM}; \<And>v. v \<in> {yM..uM} \<Longrightarrow> infdist (f closestM) H \<le> infdist (f v) H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
closestM \<in> {yM..uM}
?v \<in> {yM..uM} \<Longrightarrow> infdist (f closestM) H \<le> infdist (f ?v) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define dM where "dM = infdist (f closestM) H"
[PROOF STATE]
proof (state)
this:
dM = infdist (f closestM) H

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have [simp]: "dM \<ge> 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> dM
[PROOF STEP]
unfolding dM_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> infdist (f closestM) H
[PROOF STEP]
using infdist_nonneg
[PROOF STATE]
proof (prove)
using this:
0 \<le> infdist ?x ?A

goal (1 subgoal):
 1. 0 \<le> infdist (f closestM) H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Points between $f(um)$ and $f(ym)$, or between $f(yM)$ and $f(uM)$, project within
      distance at most $L$ of $pi_z$ by construction.\<close>
[PROOF STATE]
proof (state)
this:
0 \<le> dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have P0: "dist m (p x) \<le> dist m pi_z + L" if "x \<in> {um..ym} \<union> {yM..uM}" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
proof (cases "x \<in> {um..ym}")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
x \<in> {um..ym}

goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
have "dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)
[PROOF STEP]
using geodesic_segment_dist[OF H pH[of um]] Dum
[PROOF STATE]
proof (prove)
using this:
dist (f z) (p um) + dist (p um) m = dist (f z) m
dist (p um) (f z) = dist (p um) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)

goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)

goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
have "dist m (f z) = dist m pi_z + dist pi_z (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (f z) = dist m pi_z + dist pi_z (f z)
[PROOF STEP]
using geodesic_segment_dist[OF H \<open>pi_z \<in> H\<close>]
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z + dist pi_z m = dist (f z) m

goal (1 subgoal):
 1. dist m (f z) = dist m pi_z + dist pi_z (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist m (f z) = dist m pi_z + dist pi_z (f z)

goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)
dist m (f z) = dist m pi_z + dist pi_z (f z)
[PROOF STEP]
have *: "dist m pi_z = dist m (p um) + dist (p um) pi_z"
[PROOF STATE]
proof (prove)
using this:
dist m (f z) = dist m (p um) + dist (p um) pi_z + dist pi_z (f z)
dist m (f z) = dist m pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. dist m pi_z = dist m (p um) + dist (p um) pi_z
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist m pi_z = dist m (p um) + dist (p um) pi_z

goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
have "dist (p um) (p x) \<le> L + dist pi_z (p um)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p um) (p x) \<le> L + dist pi_z (p um)
[PROOF STEP]
using ym(3)[OF \<open>x \<in> {um..ym}\<close>]
[PROOF STATE]
proof (prove)
using this:
dist (p um) (p x) \<le> L + dist pi_z (p um)

goal (1 subgoal):
 1. dist (p um) (p x) \<le> L + dist pi_z (p um)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
dist (p um) (p x) \<le> L + dist pi_z (p um)

goal (2 subgoals):
 1. x \<in> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
 2. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (p um) (p x) \<le> L + dist pi_z (p um)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (p um) (p x) \<le> L + dist pi_z (p um)

goal (1 subgoal):
 1. dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
using metric_space_class.dist_triangle[of m "p x" "p um"] *
[PROOF STATE]
proof (prove)
using this:
dist (p um) (p x) \<le> L + dist pi_z (p um)
dist m (p x) \<le> dist m (p um) + dist (p um) (p x)
dist m pi_z = dist m (p um) + dist (p um) pi_z

goal (1 subgoal):
 1. dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist m (p x) \<le> dist m pi_z + L

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
x \<notin> {um..ym}

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<notin> {um..ym}
[PROOF STEP]
have "x \<in> {yM..uM}"
[PROOF STATE]
proof (prove)
using this:
x \<notin> {um..ym}

goal (1 subgoal):
 1. x \<in> {yM..uM}
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
x \<notin> {um..ym}
x \<in> {um..ym} \<union> {yM..uM}

goal (1 subgoal):
 1. x \<in> {yM..uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> {yM..uM}

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
have "dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)
[PROOF STEP]
using geodesic_segment_dist[OF H pH[of uM]] DuM
[PROOF STATE]
proof (prove)
using this:
dist (f z) (p uM) + dist (p uM) m = dist (f z) m
dist (p uM) (f z) = dist (p uM) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
have "dist m (f z) = dist m pi_z + dist pi_z (f z)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (f z) = dist m pi_z + dist pi_z (f z)
[PROOF STEP]
using geodesic_segment_dist[OF H \<open>pi_z \<in> H\<close>]
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z + dist pi_z m = dist (f z) m

goal (1 subgoal):
 1. dist m (f z) = dist m pi_z + dist pi_z (f z)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist m (f z) = dist m pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)
dist m (f z) = dist m pi_z + dist pi_z (f z)
[PROOF STEP]
have *: "dist m pi_z = dist m (p uM) + dist (p uM) pi_z"
[PROOF STATE]
proof (prove)
using this:
dist m (f z) = dist m (p uM) + dist (p uM) pi_z + dist pi_z (f z)
dist m (f z) = dist m pi_z + dist pi_z (f z)

goal (1 subgoal):
 1. dist m pi_z = dist m (p uM) + dist (p uM) pi_z
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist m pi_z = dist m (p uM) + dist (p uM) pi_z

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
have "dist (p uM) (p x) \<le> L + dist pi_z (p uM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p uM) (p x) \<le> L + dist pi_z (p uM)
[PROOF STEP]
using yM(3)[OF \<open>x \<in> {yM..uM}\<close>]
[PROOF STATE]
proof (prove)
using this:
dist (p uM) (p x) \<le> L + dist pi_z (p uM)

goal (1 subgoal):
 1. dist (p uM) (p x) \<le> L + dist pi_z (p uM)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
dist (p uM) (p x) \<le> L + dist pi_z (p uM)

goal (1 subgoal):
 1. x \<notin> {um..ym} \<Longrightarrow> dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (p uM) (p x) \<le> L + dist pi_z (p uM)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (p uM) (p x) \<le> L + dist pi_z (p uM)

goal (1 subgoal):
 1. dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
using metric_space_class.dist_triangle[of m "p x" "p uM"] *
[PROOF STATE]
proof (prove)
using this:
dist (p uM) (p x) \<le> L + dist pi_z (p uM)
dist m (p x) \<le> dist m (p uM) + dist (p uM) (p x)
dist m pi_z = dist m (p uM) + dist (p uM) pi_z

goal (1 subgoal):
 1. dist m (p x) \<le> dist m pi_z + L
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist m (p x) \<le> dist m pi_z + L

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist m (p ?x) \<le> dist m pi_z + L

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have P: "dist pi_z (p x) \<le> L" if "x \<in> {um..ym} \<union> {yM..uM}" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist pi_z (p x) \<le> L
[PROOF STEP]
proof (cases "dist m (p x) \<le> dist pi_z m")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
 2. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
dist m (p x) \<le> dist pi_z m

goal (2 subgoals):
 1. dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
 2. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
have "dist pi_z (p x) \<le> dist pi_z m + dist m (p x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist pi_z (p x) \<le> dist pi_z m + dist m (p x)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist pi_z (p x) \<le> dist pi_z m + dist m (p x)

goal (2 subgoals):
 1. dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
 2. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist pi_z (p x) \<le> dist pi_z m + dist m (p x)

goal (2 subgoals):
 1. dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
 2. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
have "... \<le> 2 * delta + 2 * delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist pi_z m + dist m (p x) \<le> 2 * delta + 2 * delta
[PROOF STEP]
using \<open>dist pi_z m \<le> 2 * delta\<close> True
[PROOF STATE]
proof (prove)
using this:
dist pi_z m \<le> 2 * delta
dist m (p x) \<le> dist pi_z m

goal (1 subgoal):
 1. dist pi_z m + dist m (p x) \<le> 2 * delta + 2 * delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist pi_z m + dist m (p x) \<le> 2 * delta + 2 * delta

goal (2 subgoals):
 1. dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
 2. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist pi_z (p x) \<le> 2 * delta + 2 * delta
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist pi_z (p x) \<le> 2 * delta + 2 * delta

goal (1 subgoal):
 1. dist pi_z (p x) \<le> L
[PROOF STEP]
using Laux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dist pi_z (p x) \<le> 2 * delta + 2 * delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta

goal (1 subgoal):
 1. dist pi_z (p x) \<le> L
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist pi_z (p x) \<le> L

goal (1 subgoal):
 1. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> dist m (p x) \<le> dist pi_z m

goal (1 subgoal):
 1. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
have "dist pi_z (p x) = abs(dist pi_z m - dist (p x) m)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist pi_z (p x) = \<bar>dist pi_z m - dist (p x) m\<bar>
[PROOF STEP]
apply (rule dist_along_geodesic_wrt_endpoint[OF geodesic_segment_commute[OF H]])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. pi_z \<in> H
 2. p x \<in> H
[PROOF STEP]
using pH \<open>pi_z \<in> H\<close>
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> H
pi_z \<in> H

goal (2 subgoals):
 1. pi_z \<in> H
 2. p x \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist pi_z (p x) = \<bar>dist pi_z m - dist (p x) m\<bar>

goal (1 subgoal):
 1. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist pi_z (p x) = \<bar>dist pi_z m - dist (p x) m\<bar>

goal (1 subgoal):
 1. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
have "... = dist (p x) m - dist pi_z m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist pi_z m - dist (p x) m\<bar> = dist (p x) m - dist pi_z m
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
\<not> dist m (p x) \<le> dist pi_z m

goal (1 subgoal):
 1. \<bar>dist pi_z m - dist (p x) m\<bar> = dist (p x) m - dist pi_z m
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
\<bar>dist pi_z m - dist (p x) m\<bar> = dist (p x) m - dist pi_z m

goal (1 subgoal):
 1. \<not> dist m (p x) \<le> dist pi_z m \<Longrightarrow> dist pi_z (p x) \<le> L
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist pi_z (p x) = dist (p x) m - dist pi_z m
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist pi_z (p x) = dist (p x) m - dist pi_z m

goal (1 subgoal):
 1. dist pi_z (p x) \<le> L
[PROOF STEP]
using P0[OF that]
[PROOF STATE]
proof (prove)
using this:
dist pi_z (p x) = dist (p x) m - dist pi_z m
dist m (p x) \<le> dist m pi_z + L

goal (1 subgoal):
 1. dist pi_z (p x) \<le> L
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist pi_z (p x) \<le> L

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p ?x) \<le> L

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Auxiliary fact for later use:
      The distance between two points in $[um, ym]$ and $[yM, uM]$ can be controlled using
      the distances of their images under $f$ to $H$, thanks to the quasi-isometry property.\<close>
[PROOF STATE]
proof (state)
this:
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p ?x) \<le> L

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have D: "dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)"
        if "rm \<in> {um..ym}" "rM \<in> {yM..uM}" for rm rM
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
have *: "dist m (p rm) \<le> L + dist m pi_z" "dist m (p rM) \<le> L + dist m pi_z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist m (p rm) \<le> L + dist m pi_z &&& dist m (p rM) \<le> L + dist m pi_z
[PROOF STEP]
using P0 that
[PROOF STATE]
proof (prove)
using this:
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist m (p ?x) \<le> dist m pi_z + L
rm \<in> {um..ym}
rM \<in> {yM..uM}

goal (1 subgoal):
 1. dist m (p rm) \<le> L + dist m pi_z &&& dist m (p rM) \<le> L + dist m pi_z
[PROOF STEP]
by force+
[PROOF STATE]
proof (state)
this:
dist m (p rm) \<le> L + dist m pi_z
dist m (p rM) \<le> L + dist m pi_z

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
have "dist (p rm) (p rM) = abs(dist (p rm) m - dist (p rM) m)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p rm) (p rM) = \<bar>dist (p rm) m - dist (p rM) m\<bar>
[PROOF STEP]
apply (rule dist_along_geodesic_wrt_endpoint[OF geodesic_segment_commute[OF H]])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. p rm \<in> H
 2. p rM \<in> H
[PROOF STEP]
using pH
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> H

goal (2 subgoals):
 1. p rm \<in> H
 2. p rM \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) = \<bar>dist (p rm) m - dist (p rM) m\<bar>

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) = \<bar>dist (p rm) m - dist (p rM) m\<bar>

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
have "... \<le> L + dist m pi_z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (p rm) m - dist (p rM) m\<bar> \<le> L + dist m pi_z
[PROOF STEP]
unfolding abs_le_iff
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p rm) m - dist (p rM) m \<le> L + dist m pi_z \<and> - (dist (p rm) m - dist (p rM) m) \<le> L + dist m pi_z
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
dist m (p rm) \<le> L + dist m pi_z
dist m (p rM) \<le> L + dist m pi_z

goal (1 subgoal):
 1. dist (p rm) m - dist (p rM) m \<le> L + dist m pi_z \<and> - (dist (p rm) m - dist (p rM) m) \<le> L + dist m pi_z
[PROOF STEP]
apply (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>dist m (p rm) \<le> L + dist m pi_z; dist m (p rM) \<le> L + dist m pi_z\<rbrakk> \<Longrightarrow> dist m (p rm) - dist m (p rM) \<le> L + dist m pi_z
 2. \<lbrakk>dist m (p rm) \<le> L + dist m pi_z; dist m (p rM) \<le> L + dist m pi_z\<rbrakk> \<Longrightarrow> dist m (p rM) - dist m (p rm) \<le> L + dist m pi_z
[PROOF STEP]
by (metis diff_add_cancel le_add_same_cancel1 metric_space_class.zero_le_dist order_trans)+
[PROOF STATE]
proof (state)
this:
\<bar>dist (p rm) m - dist (p rM) m\<bar> \<le> L + dist m pi_z

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (p rm) (p rM) \<le> L + dist m pi_z
[PROOF STEP]
have *: "dist (p rm) (p rM) \<le> L + 2 * delta"
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) \<le> L + dist m pi_z

goal (1 subgoal):
 1. dist (p rm) (p rM) \<le> L + 2 * delta
[PROOF STEP]
using \<open>dist pi_z m \<le> 2 * delta\<close>
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) \<le> L + dist m pi_z
dist pi_z m \<le> 2 * delta

goal (1 subgoal):
 1. dist (p rm) (p rM) \<le> L + 2 * delta
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) \<le> L + 2 * delta

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
have "(1/lambda) * dist rm rM - C \<le> dist (f rm) (f rM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 1 / lambda * dist rm rM - C \<le> dist (f rm) (f rM)
[PROOF STEP]
apply (rule quasi_isometry_onD(2)[OF \<open>lambda C-quasi_isometry_on {a..b} f\<close>])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. rm \<in> {a..b}
 2. rM \<in> {a..b}
[PROOF STEP]
using \<open>rm \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>rM \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close>
[PROOF STATE]
proof (prove)
using this:
rm \<in> {um..ym}
ym \<in> {um..z}
um \<in> {a..z}
z \<in> {a..b}
rM \<in> {yM..uM}
yM \<in> {z..uM}
uM \<in> {z..b}

goal (2 subgoals):
 1. rm \<in> {a..b}
 2. rM \<in> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
1 / lambda * dist rm rM - C \<le> dist (f rm) (f rM)

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
1 / lambda * dist rm rM - C \<le> dist (f rm) (f rM)

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
have "... \<le> dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f rm) (f rM) \<le> dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f rm) (f rM) \<le> dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM)

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f rm) (f rM) \<le> dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM)

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
have "... \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM) \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H
[PROOF STEP]
using * proj_setD(2)[OF p]
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) \<le> L + 2 * delta
dist (f ?x1) (p ?x1) = infdist (f ?x1) H

goal (1 subgoal):
 1. dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM) \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (f rm) (p rm) + dist (p rm) (p rM) + dist (p rM) (f rM) \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
1 / lambda * dist rm rM - C \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
1 / lambda * dist rm rM - C \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
using \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
1 / lambda * dist rm rM - C \<le> infdist (f rm) H + L + 2 * delta + infdist (f rM) H
1 \<le> lambda

goal (1 subgoal):
 1. dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)
[PROOF STEP]
by (simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
dist rm rM \<le> lambda * (infdist (f rm) H + (L + C + 2 * delta) + infdist (f rM) H)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>?rm \<in> {um..ym}; ?rM \<in> {yM..uM}\<rbrakk> \<Longrightarrow> dist ?rm ?rM \<le> lambda * (infdist (f ?rm) H + (L + C + 2 * delta) + infdist (f ?rM) H)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Auxiliary fact for later use in the inductive argument:
      the distance from $f(z)$ to $pi_z$ is controlled by the distance from $f(z)$ to any
      intermediate geodesic between points in $f[um, ym]$ and $f[yM, uM]$, up to a constant
      essentially given by $L$. This is a variation around Lemma 5 in~\cite{shchur}.\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>?rm \<in> {um..ym}; ?rM \<in> {yM..uM}\<rbrakk> \<Longrightarrow> dist ?rm ?rM \<le> lambda * (infdist (f ?rm) H + (L + C + 2 * delta) + infdist (f ?rM) H)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have Rec: "Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)" if "rm \<in> {um..ym}" "rM \<in> {yM..uM}" for rm rM
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have *: "dist (f rm) (p rm) + dist (p rm) (f z) \<le> dist (f rm) (f z) + 4 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f rm) (p rm) + dist (p rm) (f z) \<le> dist (f rm) (f z) + 4 * deltaG TYPE('a)
[PROOF STEP]
apply (rule dist_along_geodesic[of H])
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. geodesic_segment H
 2. p rm \<in> proj_set (f rm) H
 3. f z \<in> H
[PROOF STEP]
using p H_def
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
H = {f z--m}

goal (3 subgoals):
 1. geodesic_segment H
 2. p rm \<in> proj_set (f rm) H
 3. f z \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f rm) (p rm) + dist (p rm) (f z) \<le> dist (f rm) (f z) + 4 * deltaG TYPE('a)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have "dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have "... \<le> (Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG(TYPE('a))) + L"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) (p rm) + dist (p rm) pi_z \<le> Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG TYPE('a) + L
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. dist (f z) (p rm) \<le> Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG TYPE('a)
 2. dist (p rm) pi_z \<le> L
[PROOF STEP]
using * P \<open>rm \<in> {um..ym}\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f rm) (p rm) + dist (p rm) (f z) \<le> dist (f rm) (f z) + 4 * deltaG TYPE('a)
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p ?x) \<le> L
rm \<in> {um..ym}

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG TYPE('a)
 2. dist (p rm) pi_z \<le> L
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (f rm) (p rm) + dist (p rm) (f z) \<le> dist (f rm) (f z) + 4 * deltaG TYPE('a)
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p ?x) \<le> L
rm \<in> {um..ym}

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> (dist (f z) (f rm) + dist (f z) (p rm) - dist (f rm) (p rm)) / 2 + 2 * deltaG TYPE('a)
 2. dist (p rm) pi_z \<le> L
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
dist (f z) (p rm) + dist (p rm) pi_z \<le> Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG TYPE('a) + L

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG TYPE('a) + L
[PROOF STEP]
have A: "dist (f z) pi_z - L - 2 * deltaG(TYPE('a)) \<le> Gromov_product_at (f z) (f rm) (p rm)"
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (f rm) (p rm) + 2 * deltaG TYPE('a) + L

goal (1 subgoal):
 1. dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (p rm)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (p rm)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have *: "dist (f rM) (p rM) + dist (p rM) (f z) \<le> dist (f rM) (f z) + 4 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f rM) (p rM) + dist (p rM) (f z) \<le> dist (f rM) (f z) + 4 * deltaG TYPE('a)
[PROOF STEP]
apply (rule dist_along_geodesic[of H])
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. geodesic_segment H
 2. p rM \<in> proj_set (f rM) H
 3. f z \<in> H
[PROOF STEP]
using p H_def
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
H = {f z--m}

goal (3 subgoals):
 1. geodesic_segment H
 2. p rM \<in> proj_set (f rM) H
 3. f z \<in> H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f rM) (p rM) + dist (p rM) (f z) \<le> dist (f rM) (f z) + 4 * deltaG TYPE('a)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have "dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have "... \<le> (Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG(TYPE('a))) + L"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) (p rM) + dist (p rM) pi_z \<le> Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG TYPE('a) + L
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. dist (f z) (p rM) \<le> Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG TYPE('a)
 2. dist (p rM) pi_z \<le> L
[PROOF STEP]
using * P \<open>rM \<in> {yM..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f rM) (p rM) + dist (p rM) (f z) \<le> dist (f rM) (f z) + 4 * deltaG TYPE('a)
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p ?x) \<le> L
rM \<in> {yM..uM}

goal (2 subgoals):
 1. dist (f z) (p rM) \<le> Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG TYPE('a)
 2. dist (p rM) pi_z \<le> L
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (f rM) (p rM) + dist (p rM) (f z) \<le> dist (f rM) (f z) + 4 * deltaG TYPE('a)
?x \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p ?x) \<le> L
rM \<in> {yM..uM}

goal (2 subgoals):
 1. dist (f z) (p rM) \<le> (dist (f z) (p rM) + dist (f z) (f rM) - dist (p rM) (f rM)) / 2 + 2 * deltaG TYPE('a)
 2. dist (p rM) pi_z \<le> L
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
dist (f z) (p rM) + dist (p rM) pi_z \<le> Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG TYPE('a) + L

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG TYPE('a) + L
[PROOF STEP]
have B: "dist (f z) pi_z - L - 2 * deltaG(TYPE('a)) \<le> Gromov_product_at (f z) (p rM) (f rM)"
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (p rM) (f rM) + 2 * deltaG TYPE('a) + L

goal (1 subgoal):
 1. dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rM) (f rM)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rM) (f rM)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have C: "dist (f z) pi_z - L - 2 * deltaG(TYPE('a)) \<le> Gromov_product_at (f z) (p rm) (p rM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
proof (cases "dist (f z) (p rm) \<le> dist (f z) (p rM)")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
dist (f z) (p rm) \<le> dist (f z) (p rM)

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "dist (p rm) (p rM) = abs(dist (f z) (p rm) - dist (f z) (p rM))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>
[PROOF STEP]
using proj_setD(1)[OF p] dist_along_geodesic_wrt_endpoint[OF H, of "p rm" "p rM"]
[PROOF STATE]
proof (prove)
using this:
p ?x1 \<in> H
\<lbrakk>p rm \<in> H; p rM \<in> H\<rbrakk> \<Longrightarrow> dist (p rm) (p rM) = \<bar>dist (p rm) (f z) - dist (p rM) (f z)\<bar>

goal (1 subgoal):
 1. dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "... = dist (f z) (p rM) - dist (f z) (p rm)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar> = dist (f z) (p rM) - dist (f z) (p rm)
[PROOF STEP]
using True
[PROOF STATE]
proof (prove)
using this:
dist (f z) (p rm) \<le> dist (f z) (p rM)

goal (1 subgoal):
 1. \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar> = dist (f z) (p rM) - dist (f z) (p rm)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar> = dist (f z) (p rM) - dist (f z) (p rm)

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (p rm) (p rM) = dist (f z) (p rM) - dist (f z) (p rm)
[PROOF STEP]
have *: "dist (f z) (p rm) = Gromov_product_at (f z) (p rm) (p rM)"
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) = dist (f z) (p rM) - dist (f z) (p rm)

goal (1 subgoal):
 1. dist (f z) (p rm) = Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) = dist (f z) (p rM) - dist (f z) (p rm)

goal (1 subgoal):
 1. dist (f z) (p rm) = (dist (f z) (p rm) + dist (f z) (p rM) - dist (p rm) (p rM)) / 2
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f z) (p rm) = Gromov_product_at (f z) (p rm) (p rM)

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rm) + dist (p rm) pi_z

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "... \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) (p rm) + dist (p rm) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)
[PROOF STEP]
using * P[of rm] \<open>rm \<in> {um..ym}\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f z) (p rm) = Gromov_product_at (f z) (p rm) (p rM)
rm \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p rm) \<le> L
rm \<in> {um..ym}

goal (1 subgoal):
 1. dist (f z) (p rm) + dist (p rm) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)
[PROOF STEP]
apply (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>dist (f z) (p rm) = Gromov_product_at (f z) (p rm) (p rM); dist pi_z (p rm) \<le> L; um \<le> rm \<and> rm \<le> ym\<rbrakk> \<Longrightarrow> dist pi_z (p rm) \<le> L + 2 * deltaG TYPE('a)
[PROOF STEP]
using local.delta_nonneg
[PROOF STATE]
proof (prove)
using this:
0 \<le> deltaG TYPE('a)

goal (1 subgoal):
 1. \<lbrakk>dist (f z) (p rm) = Gromov_product_at (f z) (p rm) (p rM); dist pi_z (p rm) \<le> L; um \<le> rm \<and> rm \<le> ym\<rbrakk> \<Longrightarrow> dist pi_z (p rm) \<le> L + 2 * deltaG TYPE('a)
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
dist (f z) (p rm) + dist (p rm) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)

goal (2 subgoals):
 1. dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
 2. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> dist (f z) (p rm) \<le> dist (f z) (p rM)

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "dist (p rm) (p rM) = abs(dist (f z) (p rm) - dist (f z) (p rM))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>
[PROOF STEP]
using proj_setD(1)[OF p] dist_along_geodesic_wrt_endpoint[OF H, of "p rm" "p rM"]
[PROOF STATE]
proof (prove)
using this:
p ?x1 \<in> H
\<lbrakk>p rm \<in> H; p rM \<in> H\<rbrakk> \<Longrightarrow> dist (p rm) (p rM) = \<bar>dist (p rm) (f z) - dist (p rM) (f z)\<bar>

goal (1 subgoal):
 1. dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (p rm) (p rM) = \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar>

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "... = dist (f z) (p rm) - dist (f z) (p rM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar> = dist (f z) (p rm) - dist (f z) (p rM)
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
\<not> dist (f z) (p rm) \<le> dist (f z) (p rM)

goal (1 subgoal):
 1. \<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar> = dist (f z) (p rm) - dist (f z) (p rM)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<bar>dist (f z) (p rm) - dist (f z) (p rM)\<bar> = dist (f z) (p rm) - dist (f z) (p rM)

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (p rm) (p rM) = dist (f z) (p rm) - dist (f z) (p rM)
[PROOF STEP]
have *: "dist (f z) (p rM) = Gromov_product_at (f z) (p rm) (p rM)"
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) = dist (f z) (p rm) - dist (f z) (p rM)

goal (1 subgoal):
 1. dist (f z) (p rM) = Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (p rm) (p rM) = dist (f z) (p rm) - dist (f z) (p rM)

goal (1 subgoal):
 1. dist (f z) (p rM) = (dist (f z) (p rm) + dist (f z) (p rM) - dist (p rm) (p rM)) / 2
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f z) (p rM) = Gromov_product_at (f z) (p rm) (p rM)

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z \<le> dist (f z) (p rM) + dist (p rM) pi_z

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
have "... \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f z) (p rM) + dist (p rM) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)
[PROOF STEP]
using * P[of rM] \<open>rM \<in> {yM..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f z) (p rM) = Gromov_product_at (f z) (p rm) (p rM)
rM \<in> {um..ym} \<union> {yM..uM} \<Longrightarrow> dist pi_z (p rM) \<le> L
rM \<in> {yM..uM}

goal (1 subgoal):
 1. dist (f z) (p rM) + dist (p rM) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)
[PROOF STEP]
apply (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>dist (f z) (p rM) = Gromov_product_at (f z) (p rm) (p rM); dist pi_z (p rM) \<le> L; yM \<le> rM \<and> rM \<le> uM\<rbrakk> \<Longrightarrow> dist pi_z (p rM) \<le> L + 2 * deltaG TYPE('a)
[PROOF STEP]
using local.delta_nonneg
[PROOF STATE]
proof (prove)
using this:
0 \<le> deltaG TYPE('a)

goal (1 subgoal):
 1. \<lbrakk>dist (f z) (p rM) = Gromov_product_at (f z) (p rm) (p rM); dist pi_z (p rM) \<le> L; yM \<le> rM \<and> rM \<le> uM\<rbrakk> \<Longrightarrow> dist pi_z (p rM) \<le> L + 2 * deltaG TYPE('a)
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
dist (f z) (p rM) + dist (p rM) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. \<not> dist (f z) (p rm) \<le> dist (f z) (p rM) \<Longrightarrow> dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z \<le> Gromov_product_at (f z) (p rm) (p rM) + L + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have "Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG(TYPE('a)) \<le> Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)}
[PROOF STEP]
using A B C
[PROOF STATE]
proof (prove)
using this:
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (p rm)
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rM) (f rM)
dist (f z) pi_z - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)}
[PROOF STEP]
unfolding Dpi_z
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (p rm)
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rM) (f rM)
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (p rm) (p rM)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)}

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)}

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
have "... \<le> Gromov_product_at (f z) (f rm) (f rM) + 2 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)} \<le> Gromov_product_at (f z) (f rm) (f rM) + 2 * deltaG TYPE('a)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
Min {Gromov_product_at (f z) (f rm) (p rm), Gromov_product_at (f z) (p rm) (p rM), Gromov_product_at (f z) (p rM) (f rM)} \<le> Gromov_product_at (f z) (f rm) (f rM) + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (f rM) + 2 * deltaG TYPE('a)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (f rM) + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) - L - 2 * deltaG TYPE('a) \<le> Gromov_product_at (f z) (f rm) (f rM) + 2 * deltaG TYPE('a)
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f rm) (f rM) + (L + 4 * delta)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>?rm \<in> {um..ym}; ?rM \<in> {yM..uM}\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f ?rm) (f ?rM) + (L + 4 * delta)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>We have proved the basic facts we will need in the main argument. This argument starts
      here. It is divided in several cases.\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>?rm \<in> {um..ym}; ?rM \<in> {yM..uM}\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f ?rm) (f ?rM) + (L + 4 * delta)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
consider "dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C" | "dm \<ge> D + 4 * C \<and> dM \<le> dm" | "dM \<ge> D + 4 * C \<and> dm \<le> dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> thesis; D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> thesis; D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
\<lbrakk>dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> ?thesis; D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> ?thesis; D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> L \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> ?thesis; D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> ?thesis; D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> ?thesis; D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> ?thesis; D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
proof (cases)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Case 2.1 of the description before the statement: there are points in $f[um, ym]$ and
        in $f[yM, uM]$ which are close to $H$. Then one can conclude directly, without relying
        on the inductive argument, thanks to the quasi-isometry property.\<close>
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case 1
[PROOF STATE]
proof (state)
this:
dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C

goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have I: "Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda^2 * (D + L / 2 + delta + 11/2 * C) - 6 * delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
proof (cases "dist (f closestm) (f closestM) \<le> 12 * delta")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
dist (f closestm) (f closestM) \<le> 12 * delta

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "1/lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 1 / lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)
[PROOF STEP]
using quasi_isometry_onD(2)[OF assms(2)] \<open>closestm \<in> {um..ym}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>ym \<in> {um..z}\<close>
            \<open>closestM \<in> {yM..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> {a..b}; ?y \<in> {a..b}\<rbrakk> \<Longrightarrow> 1 / lambda * dist ?x ?y - C \<le> dist (f ?x) (f ?y)
closestm \<in> {um..ym}
um \<in> {a..z}
z \<in> {a..b}
ym \<in> {um..z}
closestM \<in> {yM..uM}
uM \<in> {z..b}
z \<in> {a..b}
yM \<in> {z..uM}

goal (1 subgoal):
 1. 1 / lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
1 / lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
1 / lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)
[PROOF STEP]
have "dist closestm closestM \<le> lambda * dist (f closestm) (f closestM) + lambda * C"
[PROOF STATE]
proof (prove)
using this:
1 / lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)

goal (1 subgoal):
 1. dist closestm closestM \<le> lambda * dist (f closestm) (f closestM) + lambda * C
[PROOF STEP]
using \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
1 / lambda * dist closestm closestM - C \<le> dist (f closestm) (f closestM)
1 \<le> lambda

goal (1 subgoal):
 1. dist closestm closestM \<le> lambda * dist (f closestm) (f closestM) + lambda * C
[PROOF STEP]
by (auto simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
dist closestm closestM \<le> lambda * dist (f closestm) (f closestM) + lambda * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist closestm closestM \<le> lambda * dist (f closestm) (f closestM) + lambda * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> lambda * (12 * delta) + lambda * C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * dist (f closestm) (f closestM) + lambda * C \<le> lambda * (12 * delta) + lambda * C
[PROOF STEP]
apply (intro mono_intros True)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> lambda
[PROOF STEP]
using \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
1 \<le> lambda

goal (1 subgoal):
 1. 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * dist (f closestm) (f closestM) + lambda * C \<le> lambda * (12 * delta) + lambda * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist closestm closestM \<le> lambda * (12 * delta) + lambda * C
[PROOF STEP]
have M: "dist closestm closestM \<le> lambda * (12 * delta + C)"
[PROOF STATE]
proof (prove)
using this:
dist closestm closestM \<le> lambda * (12 * delta) + lambda * C

goal (1 subgoal):
 1. dist closestm closestM \<le> lambda * (12 * delta + C)
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist closestm closestM \<le> lambda * (12 * delta + C)

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "2 * Gromov_product_at (f z) (f closestm) (f closestM) \<le> dist (f closestm) (f z) + dist (f z) (f (closestM))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * Gromov_product_at (f z) (f closestm) (f closestM) \<le> dist (f closestm) (f z) + dist (f z) (f closestM)
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * ((dist (f z) (f closestm) + dist (f z) (f closestM) - dist (f closestm) (f closestM)) / 2) \<le> dist (f closestm) (f z) + dist (f z) (f closestM)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
2 * Gromov_product_at (f z) (f closestm) (f closestM) \<le> dist (f closestm) (f z) + dist (f z) (f closestM)

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
2 * Gromov_product_at (f z) (f closestm) (f closestM) \<le> dist (f closestm) (f z) + dist (f z) (f closestM)

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> (lambda * dist closestm z + C) + (lambda * dist z closestM + C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * dist closestm z + C + (lambda * dist z closestM + C)
[PROOF STEP]
apply (intro mono_intros quasi_isometry_onD(1)[OF assms(2)])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. closestm \<in> {a..b}
 2. z \<in> {a..b}
 3. z \<in> {a..b}
 4. closestM \<in> {a..b}
[PROOF STEP]
using \<open>closestm \<in> {um..ym}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>ym \<in> {um..z}\<close>
            \<open>closestM \<in> {yM..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
closestm \<in> {um..ym}
um \<in> {a..z}
z \<in> {a..b}
ym \<in> {um..z}
closestM \<in> {yM..uM}
uM \<in> {z..b}
z \<in> {a..b}
yM \<in> {z..uM}

goal (4 subgoals):
 1. closestm \<in> {a..b}
 2. z \<in> {a..b}
 3. z \<in> {a..b}
 4. closestM \<in> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * dist closestm z + C + (lambda * dist z closestM + C)

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * dist closestm z + C + (lambda * dist z closestM + C)

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... = lambda * dist closestm closestM + 1 * 2 * C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * dist closestm z + C + (lambda * dist z closestM + C) = lambda * dist closestm closestM + 1 * 2 * C
[PROOF STEP]
unfolding dist_real_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * \<bar>closestm - z\<bar> + C + (lambda * \<bar>z - closestM\<bar> + C) = lambda * \<bar>closestm - closestM\<bar> + 1 * 2 * C
[PROOF STEP]
using \<open>closestm \<in> {um..ym}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>ym \<in> {um..z}\<close>
            \<open>closestM \<in> {yM..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
closestm \<in> {um..ym}
um \<in> {a..z}
z \<in> {a..b}
ym \<in> {um..z}
closestM \<in> {yM..uM}
uM \<in> {z..b}
z \<in> {a..b}
yM \<in> {z..uM}

goal (1 subgoal):
 1. lambda * \<bar>closestm - z\<bar> + C + (lambda * \<bar>z - closestM\<bar> + C) = lambda * \<bar>closestm - closestM\<bar> + 1 * 2 * C
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
lambda * dist closestm z + C + (lambda * dist z closestM + C) = lambda * dist closestm closestM + 1 * 2 * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * dist closestm z + C + (lambda * dist z closestM + C) = lambda * dist closestm closestM + 1 * 2 * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> lambda * (lambda * (12 * delta + C)) + lambda^2 * 2 * C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * dist closestm closestM + 1 * 2 * C \<le> lambda * (lambda * (12 * delta + C)) + lambda\<^sup>2 * 2 * C
[PROOF STEP]
apply (intro mono_intros M)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 0 \<le> lambda
 2. 1 \<le> lambda\<^sup>2
 3. 0 \<le> 2
 4. 0 \<le> C
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
1 \<le> lambda
0 \<le> C

goal (4 subgoals):
 1. 0 \<le> lambda
 2. 1 \<le> lambda\<^sup>2
 3. 0 \<le> 2
 4. 0 \<le> C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * dist closestm closestM + 1 * 2 * C \<le> lambda * (lambda * (12 * delta + C)) + lambda\<^sup>2 * 2 * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * dist closestm closestM + 1 * 2 * C \<le> lambda * (lambda * (12 * delta + C)) + lambda\<^sup>2 * 2 * C

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... = lambda^2 * (24 * delta + 3 * C) - lambda^2 * 12 * delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (lambda * (12 * delta + C)) + lambda\<^sup>2 * 2 * C = lambda\<^sup>2 * (24 * delta + 3 * C) - lambda\<^sup>2 * 12 * delta
[PROOF STEP]
by (simp add: algebra_simps power2_eq_square)
[PROOF STATE]
proof (state)
this:
lambda * (lambda * (12 * delta + C)) + lambda\<^sup>2 * 2 * C = lambda\<^sup>2 * (24 * delta + 3 * C) - lambda\<^sup>2 * 12 * delta

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * (lambda * (12 * delta + C)) + lambda\<^sup>2 * 2 * C = lambda\<^sup>2 * (24 * delta + 3 * C) - lambda\<^sup>2 * 12 * delta

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> lambda^2 * ((2 * D + L + 2 * delta) + 11 * C) - 1 * 12 * delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (24 * delta + 3 * C) - lambda\<^sup>2 * 12 * delta \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C) - 1 * 12 * delta
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. 24 * delta \<le> 2 * D + L + 2 * delta
 2. 3 \<le> 11
 3. 0 \<le> C
 4. 0 \<le> lambda\<^sup>2
 5. 1 \<le> lambda\<^sup>2
 6. 0 \<le> 12
 7. 0 \<le> delta
[PROOF STEP]
using Laux \<open>lambda \<ge> 1\<close> \<open>C \<ge> 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
1 \<le> lambda
0 \<le> C
0 < delta

goal (7 subgoals):
 1. 24 * delta \<le> 2 * D + L + 2 * delta
 2. 3 \<le> 11
 3. 0 \<le> C
 4. 0 \<le> lambda\<^sup>2
 5. 1 \<le> lambda\<^sup>2
 6. 0 \<le> 12
 7. 0 \<le> delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (24 * delta + 3 * C) - lambda\<^sup>2 * 12 * delta \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C) - 1 * 12 * delta

goal (2 subgoals):
 1. dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
 2. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
2 * Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C) - 1 * 12 * delta
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
2 * Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C) - 1 * 12 * delta

goal (1 subgoal):
 1. Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
by (auto simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> dist (f closestm) (f closestM) \<le> 12 * delta

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "dist closestm closestM \<le> lambda * (dm + dM + L + 2 * delta + C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist closestm closestM \<le> lambda * (dm + dM + L + 2 * delta + C)
[PROOF STEP]
using D[OF \<open>closestm \<in> {um..ym}\<close> \<open>closestM \<in> {yM..uM}\<close>] dm_def dM_def
[PROOF STATE]
proof (prove)
using this:
dist closestm closestM \<le> lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f closestM) H)
dm = infdist (f closestm) H
dM = infdist (f closestM) H

goal (1 subgoal):
 1. dist closestm closestM \<le> lambda * (dm + dM + L + 2 * delta + C)
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist closestm closestM \<le> lambda * (dm + dM + L + 2 * delta + C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist closestm closestM \<le> lambda * (dm + dM + L + 2 * delta + C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> lambda * ((D + 4 * C) + (D + 4 * C) + L + 2 * delta + C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (dm + dM + L + 2 * delta + C) \<le> lambda * (D + 4 * C + (D + 4 * C) + L + 2 * delta + C)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. dm \<le> D + 4 * C
 2. dM \<le> D + 4 * C
 3. 0 \<le> lambda
[PROOF STEP]
using 1 \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C
1 \<le> lambda

goal (3 subgoals):
 1. dm \<le> D + 4 * C
 2. dM \<le> D + 4 * C
 3. 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * (dm + dM + L + 2 * delta + C) \<le> lambda * (D + 4 * C + (D + 4 * C) + L + 2 * delta + C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * (dm + dM + L + 2 * delta + C) \<le> lambda * (D + 4 * C + (D + 4 * C) + L + 2 * delta + C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> lambda * (2 * D + L + 2 * delta + 9 * C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (D + 4 * C + (D + 4 * C) + L + 2 * delta + C) \<le> lambda * (2 * D + L + 2 * delta + 9 * C)
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
1 \<le> lambda
0 \<le> C

goal (1 subgoal):
 1. lambda * (D + 4 * C + (D + 4 * C) + L + 2 * delta + C) \<le> lambda * (2 * D + L + 2 * delta + 9 * C)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * (D + 4 * C + (D + 4 * C) + L + 2 * delta + C) \<le> lambda * (2 * D + L + 2 * delta + 9 * C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist closestm closestM \<le> lambda * (2 * D + L + 2 * delta + 9 * C)
[PROOF STEP]
have M: "dist closestm closestM \<le> lambda * (2 * D + L + 2 * delta + 9 * C)"
[PROOF STATE]
proof (prove)
using this:
dist closestm closestM \<le> lambda * (2 * D + L + 2 * delta + 9 * C)

goal (1 subgoal):
 1. dist closestm closestM \<le> lambda * (2 * D + L + 2 * delta + 9 * C)
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist closestm closestM \<le> lambda * (2 * D + L + 2 * delta + 9 * C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "dist (f closestm) (f z) + dist (f z) (f (closestM)) \<le> (lambda * dist closestm z + C) + (lambda * dist z closestM + C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * dist closestm z + C + (lambda * dist z closestM + C)
[PROOF STEP]
apply (intro mono_intros quasi_isometry_onD(1)[OF assms(2)])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. closestm \<in> {a..b}
 2. z \<in> {a..b}
 3. z \<in> {a..b}
 4. closestM \<in> {a..b}
[PROOF STEP]
using \<open>closestm \<in> {um..ym}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>ym \<in> {um..z}\<close>
            \<open>closestM \<in> {yM..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
closestm \<in> {um..ym}
um \<in> {a..z}
z \<in> {a..b}
ym \<in> {um..z}
closestM \<in> {yM..uM}
uM \<in> {z..b}
z \<in> {a..b}
yM \<in> {z..uM}

goal (4 subgoals):
 1. closestm \<in> {a..b}
 2. z \<in> {a..b}
 3. z \<in> {a..b}
 4. closestM \<in> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * dist closestm z + C + (lambda * dist z closestM + C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * dist closestm z + C + (lambda * dist z closestM + C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... = lambda * dist closestm closestM + 1 * 2 * C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * dist closestm z + C + (lambda * dist z closestM + C) = lambda * dist closestm closestM + 1 * 2 * C
[PROOF STEP]
unfolding dist_real_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * \<bar>closestm - z\<bar> + C + (lambda * \<bar>z - closestM\<bar> + C) = lambda * \<bar>closestm - closestM\<bar> + 1 * 2 * C
[PROOF STEP]
using \<open>closestm \<in> {um..ym}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>ym \<in> {um..z}\<close>
            \<open>closestM \<in> {yM..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
closestm \<in> {um..ym}
um \<in> {a..z}
z \<in> {a..b}
ym \<in> {um..z}
closestM \<in> {yM..uM}
uM \<in> {z..b}
z \<in> {a..b}
yM \<in> {z..uM}

goal (1 subgoal):
 1. lambda * \<bar>closestm - z\<bar> + C + (lambda * \<bar>z - closestM\<bar> + C) = lambda * \<bar>closestm - closestM\<bar> + 1 * 2 * C
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
lambda * dist closestm z + C + (lambda * dist z closestM + C) = lambda * dist closestm closestM + 1 * 2 * C

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * dist closestm z + C + (lambda * dist z closestM + C) = lambda * dist closestm closestM + 1 * 2 * C

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
have "... \<le> lambda * (lambda * (2 * D + L + 2 * delta + 9 * C)) + lambda^2 * 2 * C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * dist closestm closestM + 1 * 2 * C \<le> lambda * (lambda * (2 * D + L + 2 * delta + 9 * C)) + lambda\<^sup>2 * 2 * C
[PROOF STEP]
apply (intro mono_intros M)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 0 \<le> lambda
 2. 1 \<le> lambda\<^sup>2
 3. 0 \<le> 2
 4. 0 \<le> C
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
1 \<le> lambda
0 \<le> C

goal (4 subgoals):
 1. 0 \<le> lambda
 2. 1 \<le> lambda\<^sup>2
 3. 0 \<le> 2
 4. 0 \<le> C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * dist closestm closestM + 1 * 2 * C \<le> lambda * (lambda * (2 * D + L + 2 * delta + 9 * C)) + lambda\<^sup>2 * 2 * C

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * (lambda * (2 * D + L + 2 * delta + 9 * C)) + lambda\<^sup>2 * 2 * C
[PROOF STEP]
have "dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda^2 * (2 * D + L + 2 * delta + 11 * C)"
[PROOF STATE]
proof (prove)
using this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda * (lambda * (2 * D + L + 2 * delta + 9 * C)) + lambda\<^sup>2 * 2 * C

goal (1 subgoal):
 1. dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C)
[PROOF STEP]
by (simp add: algebra_simps power2_eq_square)
[PROOF STATE]
proof (state)
this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C)

goal (1 subgoal):
 1. \<not> dist (f closestm) (f closestM) \<le> 12 * delta \<Longrightarrow> Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
unfolding Gromov_product_at_def
[PROOF STATE]
proof (prove)
using this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C)

goal (1 subgoal):
 1. (dist (f z) (f closestm) + dist (f z) (f closestM) - dist (f closestm) (f closestM)) / 2 \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
dist (f closestm) (f z) + dist (f z) (f closestM) \<le> lambda\<^sup>2 * (2 * D + L + 2 * delta + 11 * C)
\<not> dist (f closestm) (f closestM) \<le> 12 * delta

goal (1 subgoal):
 1. (dist (f z) (f closestm) + dist (f z) (f closestM) - dist (f closestm) (f closestM)) / 2 \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta
[PROOF STEP]
by (simp add: metric_space_class.dist_commute algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f closestm) (f closestM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta

goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um)))
[PROOF STEP]
using Rec[OF \<open>closestm \<in> {um..ym}\<close> \<open>closestM \<in> {yM..uM}\<close>]
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f closestM) + (L + 4 * delta)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um)))

goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um)))

goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> (lambda^2 * (D + L / 2 + delta + 11/2 * C) - 6 * delta) + lambda^2 * L + 4 * delta + Kmult * (1 - exp (- K * (uM - um)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um))) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta + lambda\<^sup>2 * L + 4 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
apply (intro mono_intros I)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 1 \<le> lambda\<^sup>2
 2. 0 \<le> L
 3. 0 \<le> Kmult
 4. 0 \<le> 1 - exp (- K * (uM - um))
[PROOF STEP]
using Laux \<open>lambda \<ge> 1\<close> \<open>delta > 0\<close> \<open>Kmult > 0\<close> \<open>um \<in> {a..z}\<close> \<open>uM \<in> {z..b}\<close> \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
1 \<le> lambda
0 < delta
0 < Kmult
um \<in> {a..z}
uM \<in> {z..b}
0 < K

goal (4 subgoals):
 1. 1 \<le> lambda\<^sup>2
 2. 0 \<le> L
 3. 0 \<le> Kmult
 4. 0 \<le> 1 - exp (- K * (uM - um))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f closestm) (f closestM) + 1 * L + 4 * delta + 0 * (1 - exp (- K * (uM - um))) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta + lambda\<^sup>2 * L + 4 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (3 subgoals):
 1. dm \<le> D + 4 * C \<and> dM \<le> D + 4 * C \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 3. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta + lambda\<^sup>2 * L + 4 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + L / 2 + delta + 11 / 2 * C) - 6 * delta + lambda\<^sup>2 * L + 4 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>End of the easy case 2.1\<close>
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Case 2.2: $dm$ is large, i.e., all points in $f[um, ym]$ are far away from $H$. Moreover,
        assume that $dm \geq dM$. Then we will find a pair of points $v$ and $x$ with $um \leq v
        \leq x \leq ym$ satisfying the estimate~\eqref{eq:xvK}. We argue by induction: while we
        have not found such a pair, we can find a point $x_k$ whose projection on $V_k$, the
        neighborhood of size $(2^k-1) dm$ of $H$, is far enough from the projection of $um$, and
        such that all points in between are far enough from $V_k$ so that the corresponding
        projection will have good contraction properties.\<close>
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case 2
[PROOF STATE]
proof (state)
this:
D + 4 * C \<le> dm \<and> dM \<le> dm

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
D + 4 * C \<le> dm \<and> dM \<le> dm
[PROOF STEP]
have I: "D + 4 * C \<le> dm" "dM \<le> dm"
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm \<and> dM \<le> dm

goal (1 subgoal):
 1. D + 4 * C \<le> dm &&& dM \<le> dm
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
D + 4 * C \<le> dm
dM \<le> dm

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define V where "V = (\<lambda>k::nat. (\<Union>g\<in>H. cball g ((2^k - 1) * dm)))"
[PROOF STATE]
proof (state)
this:
V = (\<lambda>k. \<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define QC where "QC = (\<lambda>k::nat. if k = 0 then 0 else 8 * delta)"
[PROOF STATE]
proof (state)
this:
QC = (\<lambda>k. if k = 0 then 0 else 8 * delta)

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "QC k \<ge> 0" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> QC k
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
using \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta

goal (1 subgoal):
 1. 0 \<le> (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> QC ?k

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have Q: "quasiconvex (0 + 8 * deltaG(TYPE('a))) (V k)" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (0 + 8 * deltaG TYPE('a)) (V k)
[PROOF STEP]
unfolding V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (0 + 8 * deltaG TYPE('a)) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule quasiconvex_thickening)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. quasiconvex 0 H
 2. 0 \<le> (2 ^ k - 1) * dm
[PROOF STEP]
using geodesic_segmentI[OF H]
[PROOF STATE]
proof (prove)
using this:
geodesic_segment H

goal (2 subgoals):
 1. quasiconvex 0 H
 2. 0 \<le> (2 ^ k - 1) * dm
[PROOF STEP]
by (auto simp add: quasiconvex_of_geodesic)
[PROOF STATE]
proof (state)
this:
quasiconvex (0 + 8 * deltaG TYPE('a)) (V ?k)

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "quasiconvex (QC k) (V k)" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (QC k) (V k)
[PROOF STEP]
apply (cases "k = 0")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> quasiconvex (QC k) (V k)
 2. k \<noteq> 0 \<Longrightarrow> quasiconvex (QC k) (V k)
[PROOF STEP]
apply (simp add: V_def QC_def quasiconvex_of_geodesic geodesic_segmentI[OF H])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> quasiconvex (QC k) (V k)
[PROOF STEP]
apply (rule quasiconvex_mono[OF _ Q[of k]])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> 0 + 8 * deltaG TYPE('a) \<le> QC k
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close> QC_def
[PROOF STATE]
proof (prove)
using this:
deltaG TYPE('a) < delta
QC = (\<lambda>k. if k = 0 then 0 else 8 * delta)

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> 0 + 8 * deltaG TYPE('a) \<le> QC k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
quasiconvex (QC ?k) (V ?k)

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>Define $q(k, x)$ to be the projection of $f(x)$ on $V_k$.\<close>
[PROOF STATE]
proof (state)
this:
quasiconvex (QC ?k) (V ?k)

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define q::"nat \<Rightarrow> real \<Rightarrow> 'a" where "q = (\<lambda>k x. geodesic_segment_param {p x--f x} (p x) ((2^k - 1) * dm))"
[PROOF STATE]
proof (state)
this:
q = (\<lambda>k x. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dm))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>The inductive argument\<close>
[PROOF STATE]
proof (state)
this:
q = (\<lambda>k x. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dm))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have Ind_k: "(Gromov_product_at (f z) (f um) (f uM) \<le> lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um))))
              \<or> (\<exists>x \<in> {um..ym}. (\<forall>w \<in> {um..x}. dist (f w) (p w) \<ge> (2^(k+1)-1) * dm) \<and> dist (q k um) (q k x) \<ge> L - 4 * delta + 7 * QC k)" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x))
[PROOF STEP]
proof (induction k)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Base case: there is a point far enough from $q 0 um$ on $H$. This is just the point $ym$,
          by construction.\<close>
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
case 0
[PROOF STATE]
proof (state)
this:

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have *: "\<exists>x\<in> {um..ym}. (\<forall>w \<in> {um..x}. dist (f w) (p w) \<ge> (2^(0+1)-1) * dm) \<and> dist (q 0 um) (q 0 x) \<ge> L - 4 * delta + 7 * QC 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x)
[PROOF STEP]
proof (rule bexI[of _ ym], auto simp add: V_def q_def QC_def)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>w. \<lbrakk>um \<le> w; w \<le> ym\<rbrakk> \<Longrightarrow> dm \<le> dist (f w) (p w)
 2. L - 4 * delta \<le> dist (p um) (p ym)
 3. um \<le> ym
[PROOF STEP]
show "um \<le> ym"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. um \<le> ym
[PROOF STEP]
using \<open>ym \<in> {um..z}\<close>
[PROOF STATE]
proof (prove)
using this:
ym \<in> {um..z}

goal (1 subgoal):
 1. um \<le> ym
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
um \<le> ym

goal (2 subgoals):
 1. \<And>w. \<lbrakk>um \<le> w; w \<le> ym\<rbrakk> \<Longrightarrow> dm \<le> dist (f w) (p w)
 2. L - 4 * delta \<le> dist (p um) (p ym)
[PROOF STEP]
show "L - 4 * delta \<le> dist (p um) (p ym)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L - 4 * delta \<le> dist (p um) (p ym)
[PROOF STEP]
using ym(2)
[PROOF STATE]
proof (prove)
using this:
dist (p um) (p ym) \<in> {L + dist pi_z (p um) - 4 * delta - 2 * 0..L + dist pi_z (p um)}

goal (1 subgoal):
 1. L - 4 * delta \<le> dist (p um) (p ym)
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>L + dist pi_z (p um) - 4 * delta \<le> dist (p um) (p ym); dist (p um) (p ym) \<le> L + dist pi_z (p um)\<rbrakk> \<Longrightarrow> L - 4 * delta \<le> dist (p um) (p ym)
[PROOF STEP]
using metric_space_class.zero_le_dist[of pi_z "p um"]
[PROOF STATE]
proof (prove)
using this:
0 \<le> dist pi_z (p um)

goal (1 subgoal):
 1. \<lbrakk>L + dist pi_z (p um) - 4 * delta \<le> dist (p um) (p ym); dist (p um) (p ym) \<le> L + dist pi_z (p um)\<rbrakk> \<Longrightarrow> L - 4 * delta \<le> dist (p um) (p ym)
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
L - 4 * delta \<le> dist (p um) (p ym)

goal (1 subgoal):
 1. \<And>w. \<lbrakk>um \<le> w; w \<le> ym\<rbrakk> \<Longrightarrow> dm \<le> dist (f w) (p w)
[PROOF STEP]
show "\<And>y. um \<le> y \<Longrightarrow> y \<le> ym \<Longrightarrow> dm \<le> dist (f y) (p y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>y. \<lbrakk>um \<le> y; y \<le> ym\<rbrakk> \<Longrightarrow> dm \<le> dist (f y) (p y)
[PROOF STEP]
using dm_def closestm proj_setD(2)[OF p]
[PROOF STATE]
proof (prove)
using this:
dm = infdist (f closestm) H
closestm \<in> {um..ym}
?v \<in> {um..ym} \<Longrightarrow> infdist (f closestm) H \<le> infdist (f ?v) H
dist (f ?x1) (p ?x1) = infdist (f ?x1) H

goal (1 subgoal):
 1. \<And>y. \<lbrakk>um \<le> y; y \<le> ym\<rbrakk> \<Longrightarrow> dm \<le> dist (f y) (p y)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>um \<le> ?y; ?y \<le> ym\<rbrakk> \<Longrightarrow> dm \<le> dist (f ?y) (p ?y)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x)

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (0 + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 um) (q 0 x))

goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>The induction. The inductive assumption claims that, either the desired inequality
          holds, or one can construct a point with good properties. If the desired inequality holds,
          there is nothing left to prove. Otherwise, we can start from this point at step $k$,
          say $x$, and either prove the desired inequality or construct a point with the good
          properties at step $k+1$.\<close>
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
case Suck: (Suc k)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x))

goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
proof (cases "Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
obtain x where x: "x \<in> {um..ym}" "dist (q k um) (q k x) \<ge> L - 4 * delta + 7 * QC k"
                                   "\<And>w. w \<in> {um..x} \<Longrightarrow> dist (f w) (p w) \<ge> (2^(k+1)-1) * dm"
[PROOF STATE]
proof (prove)
using this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. (\<And>x. \<lbrakk>x \<in> {um..ym}; L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x); \<And>w. w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using Suck.IH
[PROOF STATE]
proof (prove)
using this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x))

goal (1 subgoal):
 1. (\<And>x. \<lbrakk>x \<in> {um..ym}; L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x); \<And>w. w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> {um..ym}
L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)
?w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f ?w) (p ?w)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Some auxiliary technical inequalities to be used later on.\<close>
[PROOF STATE]
proof (state)
this:
x \<in> {um..ym}
L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)
?w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f ?w) (p ?w)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have aux: "(2 ^ k - 1) * dm \<le> (2*2^k-1) * dm" "0 \<le> 2 * 2 ^ k - (1::real)" "dm \<le> dm * 2 ^ k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm &&& 0 \<le> 2 * 2 ^ k - 1 &&& dm \<le> dm * 2 ^ k
[PROOF STEP]
apply (auto simp add: algebra_simps)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 1 \<le> 2 * 2 ^ k
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
apply (metis power.simps(2) two_realpow_ge_one)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dm \<le> dm * 2 ^ k
[PROOF STEP]
using \<open>0 \<le> dm\<close> less_eq_real_def
[PROOF STATE]
proof (prove)
using this:
0 \<le> dm
(?x \<le> ?y) = (?x < ?y \<or> ?x = ?y)

goal (1 subgoal):
 1. dm \<le> dm * 2 ^ k
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "L + C = (L/D) * (D + (D/L) * C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L + C = L / D * (D + D / L * C)
[PROOF STEP]
using \<open>L > 0\<close> \<open>D > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < L
0 < D

goal (1 subgoal):
 1. L + C = L / D * (D + D / L * C)
[PROOF STEP]
by (simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L + C = L / D * (D + D / L * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L + C = L / D * (D + D / L * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (L/D) * (D + 4 * C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L / D * (D + D / L * C) \<le> L / D * (D + 4 * C)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. D / L \<le> 4
 2. 0 \<le> C
 3. 0 \<le> L / D
[PROOF STEP]
using \<open>L > 0\<close> \<open>D > 0\<close> \<open>C \<ge> 0\<close> \<open>D \<le> 4 * L\<close>
[PROOF STATE]
proof (prove)
using this:
0 < L
0 < D
0 \<le> C
D \<le> 4 * L

goal (3 subgoals):
 1. D / L \<le> 4
 2. 0 \<le> C
 3. 0 \<le> L / D
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L / D * (D + D / L * C) \<le> L / D * (D + 4 * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L / D * (D + D / L * C) \<le> L / D * (D + 4 * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (L/D) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L / D * (D + 4 * C) \<le> L / D * dm
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. D + 4 * C \<le> dm
 2. 0 \<le> L / D
[PROOF STEP]
using I \<open>L > 0\<close> \<open>D > 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 < L
0 < D

goal (2 subgoals):
 1. D + 4 * C \<le> dm
 2. 0 \<le> L / D
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L / D * (D + 4 * C) \<le> L / D * dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L + C \<le> L / D * dm
[PROOF STEP]
have "L + C \<le> (L/D) * dm"
[PROOF STATE]
proof (prove)
using this:
L + C \<le> L / D * dm

goal (1 subgoal):
 1. L + C \<le> L / D * dm
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
L + C \<le> L / D * dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
L + C \<le> L / D * dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "2 * delta \<le> (2 * delta)/D * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * delta \<le> 2 * delta / D * dm
[PROOF STEP]
using I \<open>C \<ge> 0\<close> \<open>delta > 0\<close> \<open>D > 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C
0 < delta
0 < D

goal (1 subgoal):
 1. 2 * delta \<le> 2 * delta / D * dm
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
2 * delta \<le> 2 * delta / D * dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
L + C \<le> L / D * dm
2 * delta \<le> 2 * delta / D * dm
[PROOF STEP]
have aux2: "L + C + 2 * delta \<le> ((L + 2 * delta)/D) * dm"
[PROOF STATE]
proof (prove)
using this:
L + C \<le> L / D * dm
2 * delta \<le> 2 * delta / D * dm

goal (1 subgoal):
 1. L + C + 2 * delta \<le> (L + 2 * delta) / D * dm
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L + C + 2 * delta \<le> (L + 2 * delta) / D * dm

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have aux3: "(1-alpha) * D + alpha * 2^k * dm \<le> dm * 2^k - C/2 - QC k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
proof (cases "k = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
 2. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
k = 0

goal (2 subgoals):
 1. k = 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
 2. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
using I \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C

goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
unfolding True QC_def alpha_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C

goal (1 subgoal):
 1. (1 - 12 / 100) * D + 12 / 100 * 2 ^ 0 * dm \<le> dm * 2 ^ 0 - C / 2 - (if 0 = 0 then 0 else 8 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
k \<noteq> 0

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
have "C/2 + QC k + (1-alpha) * D \<le> 2 * (1-alpha) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dm
[PROOF STEP]
using I \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C

goal (1 subgoal):
 1. C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dm
[PROOF STEP]
unfolding QC_def alpha_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C

goal (1 subgoal):
 1. C / 2 + (if k = 0 then 0 else 8 * delta) + (1 - 12 / 100) * D \<le> 2 * (1 - 12 / 100) * dm
[PROOF STEP]
using False Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C
k \<noteq> 0
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. C / 2 + (if k = 0 then 0 else 8 * delta) + (1 - 12 / 100) * D \<le> 2 * (1 - 12 / 100) * dm
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dm

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dm

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
have "... \<le> 2^k * (1-alpha) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * (1 - alpha) * dm \<le> 2 ^ k * (1 - alpha) * dm
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 1 \<le> 2
 2. 0 < k
 3. 0 \<le> 1 - alpha
 4. 0 \<le> dm
[PROOF STEP]
using False alphaaux I \<open>D > 0\<close> \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
k \<noteq> 0
0 < alpha
alpha \<le> 1
D + 4 * C \<le> dm
dM \<le> dm
0 < D
0 \<le> C

goal (4 subgoals):
 1. 1 \<le> 2
 2. 0 < k
 3. 0 \<le> 1 - alpha
 4. 0 \<le> dm
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
2 * (1 - alpha) * dm \<le> 2 ^ k * (1 - alpha) * dm

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 ^ k * (1 - alpha) * dm
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 ^ k * (1 - alpha) * dm

goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Construct a point $w$ such that its projection on $V_k$ is close to that of $um$
            and therefore far away from that of $x$. This is just the intermediate value theorem
            (with some care as the closest point projection is not continuous).\<close>
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "\<exists>w \<in> {um..x}. (dist (q k um) (q k w) \<in> {(9 * delta + 4 * QC k) - 4 * delta - 2 * QC k .. 9 * delta + 4 * QC k})
                    \<and> (\<forall>v \<in> {um..w}. dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>w\<in>{um..x}. dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{um..w}. dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k)
[PROOF STEP]
proof (rule quasi_convex_projection_small_gaps[where ?f = f and ?G = "V k"])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. continuous_on {um..x} f
 2. um \<le> x
 3. quasiconvex (QC k) (V k)
 4. \<And>w. w \<in> {um..x} \<Longrightarrow> q k w \<in> proj_set (f w) (V k)
 5. deltaG TYPE('a) < delta
 6. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
show "continuous_on {um..x} f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on {um..x} f
[PROOF STEP]
apply (rule continuous_on_subset[OF \<open>continuous_on {a..b} f\<close>])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {um..x} \<subseteq> {a..b}
[PROOF STEP]
using \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>ym \<in> {um..z}\<close> \<open>x \<in> {um..ym}\<close>
[PROOF STATE]
proof (prove)
using this:
um \<in> {a..z}
z \<in> {a..b}
ym \<in> {um..z}
x \<in> {um..ym}

goal (1 subgoal):
 1. {um..x} \<subseteq> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_on {um..x} f

goal (5 subgoals):
 1. um \<le> x
 2. quasiconvex (QC k) (V k)
 3. \<And>w. w \<in> {um..x} \<Longrightarrow> q k w \<in> proj_set (f w) (V k)
 4. deltaG TYPE('a) < delta
 5. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
show "um \<le> x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. um \<le> x
[PROOF STEP]
using \<open>x \<in> {um..ym}\<close>
[PROOF STATE]
proof (prove)
using this:
x \<in> {um..ym}

goal (1 subgoal):
 1. um \<le> x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
um \<le> x

goal (4 subgoals):
 1. quasiconvex (QC k) (V k)
 2. \<And>w. w \<in> {um..x} \<Longrightarrow> q k w \<in> proj_set (f w) (V k)
 3. deltaG TYPE('a) < delta
 4. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
show "quasiconvex (QC k) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (QC k) (V k)
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
quasiconvex (QC k) (V k)

goal (3 subgoals):
 1. \<And>w. w \<in> {um..x} \<Longrightarrow> q k w \<in> proj_set (f w) (V k)
 2. deltaG TYPE('a) < delta
 3. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (2 subgoals):
 1. \<And>w. w \<in> {um..x} \<Longrightarrow> q k w \<in> proj_set (f w) (V k)
 2. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
show "9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
using x(2) \<open>delta > 0\<close> \<open>QC k \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)
0 < delta
0 \<le> QC k
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k um) (q k x)}

goal (1 subgoal):
 1. \<And>w. w \<in> {um..x} \<Longrightarrow> q k w \<in> proj_set (f w) (V k)
[PROOF STEP]
show "q k w \<in> proj_set (f w) (V k)" if "w \<in> {um..x}" for w
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k w \<in> proj_set (f w) (V k)
[PROOF STEP]
unfolding V_def q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p w--f w} (p w) ((2 ^ k - 1) * dm) \<in> proj_set (f w) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p w) (f w)
 4. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
using aux p x(3)[OF that]
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k
p ?x \<in> proj_set (f ?x) H
(2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)

goal (4 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p w) (f w)
 4. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
?w \<in> {um..x} \<Longrightarrow> q k ?w \<in> proj_set (f ?w) (V k)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>w\<in>{um..x}. dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{um..w}. dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>w\<in>{um..x}. dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{um..w}. dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k)
[PROOF STEP]
obtain w where w: "w \<in> {um..x}"
                                   "dist (q k um) (q k w) \<in> {(9 * delta + 4 * QC k) - 4 * delta - 2 * QC k .. 9 * delta + 4 * QC k}"
                                   "\<And>v. v \<in> {um..w} \<Longrightarrow> dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k"
[PROOF STATE]
proof (prove)
using this:
\<exists>w\<in>{um..x}. dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{um..w}. dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k)

goal (1 subgoal):
 1. (\<And>w. \<lbrakk>w \<in> {um..x}; dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}; \<And>v. v \<in> {um..w} \<Longrightarrow> dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
w \<in> {um..x}
dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}
?v \<in> {um..w} \<Longrightarrow> dist (q k um) (q k ?v) \<le> 9 * delta + 4 * QC k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>There are now two cases to be considered: either one can find a point $v$ between
            $um$ and $w$ which is close enough to $H$. Then this point will satisfy~\eqref{eq:xvK},
            and we will be able to prove the desired inequality. Or there is no such point,
            and then $w$ will have the good properties at step $k+1$\<close>
[PROOF STATE]
proof (state)
this:
w \<in> {um..x}
dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}
?v \<in> {um..w} \<Longrightarrow> dist (q k um) (q k ?v) \<le> 9 * delta + 4 * QC k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
proof (cases "\<exists>v \<in> {um..w}. dist (f v) (p v) \<le> (2^(k+2)-1) * dm")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>First subcase: there is a good point $v$ between $um$ and $w$. This is the
              heart of the argument: we will show that the desired inequality holds.\<close>
[PROOF STATE]
proof (state)
this:
\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm
[PROOF STEP]
obtain v where v: "v \<in> {um..w}" "dist (f v) (p v) \<le> (2^(k+2)-1) * dm"
[PROOF STATE]
proof (prove)
using this:
\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm

goal (1 subgoal):
 1. (\<And>v. \<lbrakk>v \<in> {um..w}; dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
v \<in> {um..w}
dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Auxiliary basic fact to be used later on.\<close>
[PROOF STATE]
proof (state)
this:
v \<in> {um..w}
dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have aux4: "dm * 2 ^ k \<le> infdist (f r) (V k)" if "r \<in> {v..x}" for r
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have *: "q k r \<in> proj_set (f r) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k r \<in> proj_set (f r) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm) \<in> proj_set (f r) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p r \<in> proj_set (f r) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p r) (f r)
 4. geodesic_segment_between {p r--f r} (p r) (f r)
[PROOF STEP]
using aux p[of r] x(3)[of r] that \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k
p r \<in> proj_set (f r) H
r \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)
r \<in> {v..x}
v \<in> {um..w}
w \<in> {um..x}

goal (4 subgoals):
 1. p r \<in> proj_set (f r) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p r) (f r)
 4. geodesic_segment_between {p r--f r} (p r) (f r)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k r \<in> proj_set (f r) (V k)

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm))
[PROOF STEP]
using proj_setD(2)[OF *]
[PROOF STATE]
proof (prove)
using this:
dist (f r) (q k r) = infdist (f r) (V k)

goal (1 subgoal):
 1. infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm))
[PROOF STEP]
unfolding q_def
[PROOF STATE]
proof (prove)
using this:
dist (f r) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm)) = infdist (f r) (V k)

goal (1 subgoal):
 1. infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm))

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm))

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "... = abs(dist (p r) (f r) - (2 ^ k - 1) * dm)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm)) = \<bar>dist (p r) (f r) - (2 ^ k - 1) * dm\<bar>
[PROOF STEP]
apply (rule geodesic_segment_param(7)[where ?y = "f r"])
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. geodesic_segment_between {p r--f r} (p r) (f r)
 2. dist (p r) (f r) \<in> {0..dist (p r) (f r)}
 3. (2 ^ k - 1) * dm \<in> {0..dist (p r) (f r)}
[PROOF STEP]
using x(3)[of r] \<open>r \<in> {v..x}\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> aux
[PROOF STATE]
proof (prove)
using this:
r \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)
r \<in> {v..x}
v \<in> {um..w}
w \<in> {um..x}
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (3 subgoals):
 1. geodesic_segment_between {p r--f r} (p r) (f r)
 2. dist (p r) (f r) \<in> {0..dist (p r) (f r)}
 3. (2 ^ k - 1) * dm \<in> {0..dist (p r) (f r)}
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm)) = \<bar>dist (p r) (f r) - (2 ^ k - 1) * dm\<bar>

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dm)) = \<bar>dist (p r) (f r) - (2 ^ k - 1) * dm\<bar>

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "... = dist (f r) (p r) - (2 ^ k - 1) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (p r) (f r) - (2 ^ k - 1) * dm\<bar> = dist (f r) (p r) - (2 ^ k - 1) * dm
[PROOF STEP]
using x(3)[of r] \<open>r \<in> {v..x}\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> aux
[PROOF STATE]
proof (prove)
using this:
r \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)
r \<in> {v..x}
v \<in> {um..w}
w \<in> {um..x}
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (1 subgoal):
 1. \<bar>dist (p r) (f r) - (2 ^ k - 1) * dm\<bar> = dist (f r) (p r) - (2 ^ k - 1) * dm
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
\<bar>dist (p r) (f r) - (2 ^ k - 1) * dm\<bar> = dist (f r) (p r) - (2 ^ k - 1) * dm

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
infdist (f r) (V k) = dist (f r) (p r) - (2 ^ k - 1) * dm
[PROOF STEP]
have "dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dm"
[PROOF STATE]
proof (prove)
using this:
infdist (f r) (V k) = dist (f r) (p r) - (2 ^ k - 1) * dm

goal (1 subgoal):
 1. dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dm
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dm

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dm

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "(2^(k+1) - 1) * dm \<le> dist (f r) (p r)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)
[PROOF STEP]
apply (rule x(3))
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. r \<in> {um..x}
[PROOF STEP]
using \<open>r \<in> {v..x}\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
r \<in> {v..x}
v \<in> {um..w}
w \<in> {um..x}

goal (1 subgoal):
 1. r \<in> {um..x}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dm
(2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)
[PROOF STEP]
have "(2^(k+1) - 1) * dm \<le> infdist (f r) (V k) + (2 ^ k - 1) * dm"
[PROOF STATE]
proof (prove)
using this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dm
(2 ^ (k + 1) - 1) * dm \<le> dist (f r) (p r)

goal (1 subgoal):
 1. (2 ^ (k + 1) - 1) * dm \<le> infdist (f r) (V k) + (2 ^ k - 1) * dm
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(2 ^ (k + 1) - 1) * dm \<le> infdist (f r) (V k) + (2 ^ k - 1) * dm

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(2 ^ (k + 1) - 1) * dm \<le> infdist (f r) (V k) + (2 ^ k - 1) * dm
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(2 ^ (k + 1) - 1) * dm \<le> infdist (f r) (V k) + (2 ^ k - 1) * dm

goal (1 subgoal):
 1. dm * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dm * 2 ^ k \<le> infdist (f r) (V k)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?r \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f ?r) (V k)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Substep 1: We can control the distance from $f(v)$ to $f(closestM)$ in terms of the distance
              of the distance of $f(v)$ to $H$, i.e., by $2^k dm$. The same control follows
              for $closestM - v$ thanks to the quasi-isometry property. Then, we massage this
              inequality to put it in the form we will need, as an upper bound on $(x-v) \exp(-2^k dm)$.\<close>
[PROOF STATE]
proof (state)
this:
?r \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f ?r) (V k)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "infdist (f v) H \<le> (2^(k+2)-1) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f v) H \<le> (2 ^ (k + 2) - 1) * dm
[PROOF STEP]
using v proj_setD(2)[OF p[of v]]
[PROOF STATE]
proof (prove)
using this:
v \<in> {um..w}
dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm
dist (f v) (p v) = infdist (f v) H

goal (1 subgoal):
 1. infdist (f v) H \<le> (2 ^ (k + 2) - 1) * dm
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
infdist (f v) H \<le> (2 ^ (k + 2) - 1) * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "dist v closestM \<le> lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist v closestM \<le> lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H)
[PROOF STEP]
apply (rule D)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. v \<in> {um..ym}
 2. closestM \<in> {yM..uM}
[PROOF STEP]
using \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close> \<open>closestM \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {um..w}
w \<in> {um..x}
x \<in> {um..ym}
ym \<in> {um..z}
um \<in> {a..z}
z \<in> {a..b}
closestM \<in> {yM..uM}
yM \<in> {z..uM}
uM \<in> {z..b}

goal (2 subgoals):
 1. v \<in> {um..ym}
 2. closestM \<in> {yM..uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist v closestM \<le> lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist v closestM \<le> lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> lambda * ((2^(k+2)-1) * dm + 1 * (L + C + 2 * delta) + dM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H) \<le> lambda * ((2 ^ (k + 2) - 1) * dm + 1 * (L + C + 2 * delta) + dM)
[PROOF STEP]
apply (intro mono_intros \<open>infdist (f v) H \<le> (2^(k+2)-1) * dm\<close>)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 0 \<le> L + C + 2 * delta
 2. 1 \<le> 1
 3. infdist (f closestM) H \<le> dM
 4. 0 \<le> lambda
[PROOF STEP]
using dM_def \<open>lambda \<ge> 1\<close> \<open>L > 0\<close> \<open>C \<ge> 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dM = infdist (f closestM) H
1 \<le> lambda
0 < L
0 \<le> C
0 < delta

goal (4 subgoals):
 1. 0 \<le> L + C + 2 * delta
 2. 1 \<le> 1
 3. infdist (f closestM) H \<le> dM
 4. 0 \<le> lambda
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H) \<le> lambda * ((2 ^ (k + 2) - 1) * dm + 1 * (L + C + 2 * delta) + dM)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * (infdist (f v) H + (L + C + 2 * delta) + infdist (f closestM) H) \<le> lambda * ((2 ^ (k + 2) - 1) * dm + 1 * (L + C + 2 * delta) + dM)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> lambda * ((2^(k+2)-1) * dm + 2^k * (((L + 2 * delta)/D) * dm) + dm)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * ((2 ^ (k + 2) - 1) * dm + 1 * (L + C + 2 * delta) + dM) \<le> lambda * ((2 ^ (k + 2) - 1) * dm + 2 ^ k * ((L + 2 * delta) / D * dm) + dm)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. 1 \<le> 2 ^ k
 2. L + C + 2 * delta \<le> (L + 2 * delta) / D * dm
 3. 0 \<le> 2 ^ k
 4. 0 \<le> L + C + 2 * delta
 5. dM \<le> dm
 6. 0 \<le> lambda
[PROOF STEP]
using I \<open>lambda \<ge> 1\<close> \<open>C \<ge> 0\<close> \<open>delta > 0\<close> \<open>L > 0\<close> aux2
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
1 \<le> lambda
0 \<le> C
0 < delta
0 < L
L + C + 2 * delta \<le> (L + 2 * delta) / D * dm

goal (6 subgoals):
 1. 1 \<le> 2 ^ k
 2. L + C + 2 * delta \<le> (L + 2 * delta) / D * dm
 3. 0 \<le> 2 ^ k
 4. 0 \<le> L + C + 2 * delta
 5. dM \<le> dm
 6. 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * ((2 ^ (k + 2) - 1) * dm + 1 * (L + C + 2 * delta) + dM) \<le> lambda * ((2 ^ (k + 2) - 1) * dm + 2 ^ k * ((L + 2 * delta) / D * dm) + dm)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * ((2 ^ (k + 2) - 1) * dm + 1 * (L + C + 2 * delta) + dM) \<le> lambda * ((2 ^ (k + 2) - 1) * dm + 2 ^ k * ((L + 2 * delta) / D * dm) + dm)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = lambda * 2^k * (4 + (L + 2 * delta)/D) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * ((2 ^ (k + 2) - 1) * dm + 2 ^ k * ((L + 2 * delta) / D * dm) + dm) = lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dm
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
lambda * ((2 ^ (k + 2) - 1) * dm + 2 ^ k * ((L + 2 * delta) / D * dm) + dm) = lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist v closestM \<le> lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dm
[PROOF STEP]
have *: "dist v closestM / (lambda * (4 + (L + 2 * delta)/D)) \<le> 2^k * dm"
[PROOF STATE]
proof (prove)
using this:
dist v closestM \<le> lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dm

goal (1 subgoal):
 1. dist v closestM / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dm
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> \<open>L > 0\<close> \<open>D > 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dist v closestM \<le> lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dm
1 \<le> lambda
0 < L
0 < D
0 < delta

goal (1 subgoal):
 1. dist v closestM / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dm
[PROOF STEP]
by (simp add: divide_simps, simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist v closestM / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>We reformulate this control inside of an exponential, as this is the form we
              will use later on.\<close>
[PROOF STATE]
proof (state)
this:
dist v closestM / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dm

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "exp(- (alpha * (2^k * dm) * ln 2 / (5 * delta))) \<le> exp(-(alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta)/D))) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta)))
[PROOF STEP]
apply (intro mono_intros *)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. 0 \<le> alpha
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
[PROOF STEP]
using alphaaux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < alpha
alpha \<le> 1
0 < delta

goal (3 subgoals):
 1. 0 \<le> alpha
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = exp(-K * dist v closestM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- K * dist v closestM)
[PROOF STEP]
unfolding K_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * dist v closestM)
[PROOF STEP]
by (simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- K * dist v closestM)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (dist v closestM / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- K * dist v closestM)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = exp(-K * (closestM - v))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- K * dist v closestM) = exp (- K * (closestM - v))
[PROOF STEP]
unfolding dist_real_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- K * \<bar>v - closestM\<bar>) = exp (- K * (closestM - v))
[PROOF STEP]
using \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>yM \<in> {z..uM}\<close> \<open>closestM \<in> {yM..uM}\<close> \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {um..w}
w \<in> {um..x}
x \<in> {um..ym}
ym \<in> {um..z}
yM \<in> {z..uM}
closestM \<in> {yM..uM}
0 < K

goal (1 subgoal):
 1. exp (- K * \<bar>v - closestM\<bar>) = exp (- K * (closestM - v))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
exp (- K * dist v closestM) = exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))
[PROOF STEP]
have "exp(- (alpha * (2^k * dm) * ln 2 / (5 * delta))) \<le> exp(-K * (closestM - v))"
[PROOF STATE]
proof (prove)
using this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))

goal (1 subgoal):
 1. exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Plug in $x-v$ to get the final form of this inequality.\<close>
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))
[PROOF STEP]
have "K * (x - v) * exp(- (alpha * (2^k * dm) * ln 2 / (5 * delta))) \<le> K * (x - v) * exp(-K * (closestM - v))"
[PROOF STATE]
proof (prove)
using this:
exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - v))

goal (1 subgoal):
 1. K * (x - v) * exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> K * (x - v) * exp (- K * (closestM - v))
[PROOF STEP]
apply (rule mult_left_mono)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> K * (x - v)
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
v \<in> {um..w}
w \<in> {um..x}
0 < K

goal (1 subgoal):
 1. 0 \<le> K * (x - v)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
K * (x - v) * exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> K * (x - v) * exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
K * (x - v) * exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> K * (x - v) * exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = ((1 + K * (x - v)) - 1) * exp(- K * (closestM - v))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. K * (x - v) * exp (- K * (closestM - v)) = (1 + K * (x - v) - 1) * exp (- K * (closestM - v))
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
K * (x - v) * exp (- K * (closestM - v)) = (1 + K * (x - v) - 1) * exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
K * (x - v) * exp (- K * (closestM - v)) = (1 + K * (x - v) - 1) * exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (exp (K * (x - v)) - 1) * exp(-K * (closestM - v))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (1 + K * (x - v) - 1) * exp (- K * (closestM - v)) \<le> (exp (K * (x - v)) - 1) * exp (- K * (closestM - v))
[PROOF STEP]
by (intro mono_intros, auto)
[PROOF STATE]
proof (state)
this:
(1 + K * (x - v) - 1) * exp (- K * (closestM - v)) \<le> (exp (K * (x - v)) - 1) * exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(1 + K * (x - v) - 1) * exp (- K * (closestM - v)) \<le> (exp (K * (x - v)) - 1) * exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = exp(-K * (closestM - x)) - exp(-K * (closestM - v))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (exp (K * (x - v)) - 1) * exp (- K * (closestM - v)) = exp (- K * (closestM - x)) - exp (- K * (closestM - v))
[PROOF STEP]
by (simp add: algebra_simps mult_exp_exp)
[PROOF STATE]
proof (state)
this:
(exp (K * (x - v)) - 1) * exp (- K * (closestM - v)) = exp (- K * (closestM - x)) - exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(exp (K * (x - v)) - 1) * exp (- K * (closestM - v)) = exp (- K * (closestM - x)) - exp (- K * (closestM - v))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> exp(-K * (closestM - x)) - exp(-K * (uM - um))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- K * (closestM - x)) - exp (- K * (closestM - v)) \<le> exp (- K * (closestM - x)) - exp (- K * (uM - um))
[PROOF STEP]
using \<open>K > 0\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>yM \<in> {z..uM}\<close> \<open>closestM \<in> {yM..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
0 < K
v \<in> {um..w}
w \<in> {um..x}
x \<in> {um..ym}
ym \<in> {um..z}
yM \<in> {z..uM}
closestM \<in> {yM..uM}

goal (1 subgoal):
 1. exp (- K * (closestM - x)) - exp (- K * (closestM - v)) \<le> exp (- K * (closestM - x)) - exp (- K * (uM - um))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
exp (- K * (closestM - x)) - exp (- K * (closestM - v)) \<le> exp (- K * (closestM - x)) - exp (- K * (uM - um))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
K * (x - v) * exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - x)) - exp (- K * (uM - um))
[PROOF STEP]
have B: "(x - v) * exp(- alpha * 2^k * dm * ln 2 / (5 * delta)) \<le>
                                  (exp(-K * (closestM - x)) - exp(-K * (uM-um)))/K"
[PROOF STATE]
proof (prove)
using this:
K * (x - v) * exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - x)) - exp (- K * (uM - um))

goal (1 subgoal):
 1. (x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)) \<le> (exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K
[PROOF STEP]
using \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
K * (x - v) * exp (- (alpha * (2 ^ k * dm) * ln 2 / (5 * delta))) \<le> exp (- K * (closestM - x)) - exp (- K * (uM - um))
0 < K

goal (1 subgoal):
 1. (x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)) \<le> (exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K
[PROOF STEP]
by (auto simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
(x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)) \<le> (exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>End of substep 1\<close>
[PROOF STATE]
proof (state)
this:
(x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)) \<le> (exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Substep 2: The projections of $f(v)$ and $f(x)$ on the cylinder $V_k$ are well separated,
              by construction. This implies that $v$ and $x$ themselves are well separated, thanks
              to the exponential contraction property of the projection on the quasi-convex set $V_k$.
              This leads to a uniform lower bound for $(x-v) \exp(-2^k dm)$, which has been upper bounded
              in Substep 1.\<close>
[PROOF STATE]
proof (state)
this:
(x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)) \<le> (exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)
[PROOF STEP]
using x
[PROOF STATE]
proof (prove)
using this:
x \<in> {um..ym}
L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)
?w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f ?w) (p ?w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> dist (q k um) (q k v) + dist (q k v) (q k x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k um) (q k x) \<le> dist (q k um) (q k v) + dist (q k v) (q k x)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (q k um) (q k x) \<le> dist (q k um) (q k v) + dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (q k um) (q k x) \<le> dist (q k um) (q k v) + dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (9 * delta + 4 * QC k) + dist (q k v) (q k x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k um) (q k v) + dist (q k v) (q k x) \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)
[PROOF STEP]
using w(3)[of v] \<open>v \<in> {um..w}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {um..w} \<Longrightarrow> dist (q k um) (q k v) \<le> 9 * delta + 4 * QC k
v \<in> {um..w}

goal (1 subgoal):
 1. dist (q k um) (q k v) + dist (q k v) (q k x) \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (q k um) (q k v) + dist (q k v) (q k x) \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 4 * delta + 7 * QC k \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)
[PROOF STEP]
have "L - 13 * delta + 3 * QC k \<le> dist (q k v) (q k x)"
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC k \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)

goal (1 subgoal):
 1. L - 13 * delta + 3 * QC k \<le> dist (q k v) (q k x)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
L - 13 * delta + 3 * QC k \<le> dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 13 * delta + 3 * QC k \<le> dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> 3 * QC k + max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (x - v) * exp(-(dm * 2^k - C/2 - QC k) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
proof (cases "k = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
text \<open>We use different statements for the projection in the case $k = 0$ (projection on
                a geodesic) and $k > 0$ (projection on a quasi-convex set) as the bounds are better in
                the first case, which is the most important one for the final value of the constant.\<close>
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
k = 0

goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "dist (q k v) (q k x) \<le> max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (x - v) * exp(-(dm * 2^k - C/2) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
proof (rule geodesic_projection_exp_contracting[where ?G = "V k" and ?f = f])
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. geodesic_segment (V k)
 2. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 3. v \<le> x
 4. q k v \<in> proj_set (f v) (V k)
 5. q k x \<in> proj_set (f x) (V k)
 6. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 7. 15 / 2 * delta + C / 2 \<le> dm * 2 ^ k
 8. deltaG TYPE('a) < delta
 9. 0 \<le> C
 10. 0 \<le> lambda
[PROOF STEP]
show "geodesic_segment (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment (V k)
[PROOF STEP]
unfolding True V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment (\<Union>g\<in>H. cball g ((2 ^ 0 - 1) * dm))
[PROOF STEP]
using geodesic_segmentI[OF H]
[PROOF STATE]
proof (prove)
using this:
geodesic_segment H

goal (1 subgoal):
 1. geodesic_segment (\<Union>g\<in>H. cball g ((2 ^ 0 - 1) * dm))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
geodesic_segment (V k)

goal (9 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. v \<le> x
 3. q k v \<in> proj_set (f v) (V k)
 4. q k x \<in> proj_set (f x) (V k)
 5. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 6. 15 / 2 * delta + C / 2 \<le> dm * 2 ^ k
 7. deltaG TYPE('a) < delta
 8. 0 \<le> C
 9. 0 \<le> lambda
[PROOF STEP]
show "v \<le> x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. v \<le> x
[PROOF STEP]
using \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {um..w}
w \<in> {um..x}

goal (1 subgoal):
 1. v \<le> x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
v \<le> x

goal (8 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k v \<in> proj_set (f v) (V k)
 3. q k x \<in> proj_set (f x) (V k)
 4. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 5. 15 / 2 * delta + C / 2 \<le> dm * 2 ^ k
 6. deltaG TYPE('a) < delta
 7. 0 \<le> C
 8. 0 \<le> lambda
[PROOF STEP]
show "q k v \<in> proj_set (f v) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k v \<in> proj_set (f v) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p v--f v} (p v) ((2 ^ k - 1) * dm) \<in> proj_set (f v) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
using aux p[of v] x(3)[of v] \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k
p v \<in> proj_set (f v) H
v \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f v) (p v)
v \<in> {um..w}
w \<in> {um..x}

goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k v \<in> proj_set (f v) (V k)

goal (7 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k x \<in> proj_set (f x) (V k)
 3. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 4. 15 / 2 * delta + C / 2 \<le> dm * 2 ^ k
 5. deltaG TYPE('a) < delta
 6. 0 \<le> C
 7. 0 \<le> lambda
[PROOF STEP]
show "q k x \<in> proj_set (f x) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k x \<in> proj_set (f x) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dm) \<in> proj_set (f x) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
using aux p[of x] x(3)[of x] \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k
p x \<in> proj_set (f x) H
x \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f x) (p x)
w \<in> {um..x}

goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k x \<in> proj_set (f x) (V k)

goal (6 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 3. 15 / 2 * delta + C / 2 \<le> dm * 2 ^ k
 4. deltaG TYPE('a) < delta
 5. 0 \<le> C
 6. 0 \<le> lambda
[PROOF STEP]
show "15/2 * delta + C/2 \<le> dm * 2^k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 15 / 2 * delta + C / 2 \<le> dm * 2 ^ k
[PROOF STEP]
apply (rule order_trans[of _ dm])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 15 / 2 * delta + C / 2 \<le> dm
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
using I \<open>delta > 0\<close> \<open>C \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (2 subgoals):
 1. 15 / 2 * delta + C / 2 \<le> dm
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (2 subgoals):
 1. 15 / 2 * delta + C / 2 \<le> dm
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
15 / 2 * delta + C / 2 \<le> dm * 2 ^ k

goal (5 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 3. deltaG TYPE('a) < delta
 4. 0 \<le> C
 5. 0 \<le> lambda
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (4 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 3. 0 \<le> C
 4. 0 \<le> lambda
[PROOF STEP]
show "\<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
using aux4
[PROOF STATE]
proof (prove)
using this:
?r \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f ?r) (V k)

goal (1 subgoal):
 1. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f ?t) (V k)

goal (3 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. 0 \<le> C
 3. 0 \<le> lambda
[PROOF STEP]
show "0 \<le> C" "0 \<le> lambda"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
using \<open>C \<ge> 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> C
1 \<le> lambda

goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> C
0 \<le> lambda

goal (1 subgoal):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
[PROOF STEP]
show "dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C" if "x1 \<in> {v..x}" "x2 \<in> {v..x}" for x1 x2
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
using quasi_isometry_onD(1)[OF assms(2)] that \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> {a..b}; ?y \<in> {a..b}\<rbrakk> \<Longrightarrow> dist (f ?x) (f ?y) \<le> lambda * dist ?x ?y + C
x1 \<in> {v..x}
x2 \<in> {v..x}
v \<in> {um..w}
w \<in> {um..x}
x \<in> {um..ym}
ym \<in> {um..z}
um \<in> {a..z}
z \<in> {a..b}

goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x1.0 \<in> {v..x}; ?x2.0 \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f ?x1.0) (f ?x2.0) \<le> lambda * dist ?x1.0 ?x2.0 + C

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (q k v) (q k x) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (q k v) (q k x) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (q k v) (q k x) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
unfolding QC_def True
[PROOF STATE]
proof (prove)
using this:
dist (q 0 v) (q 0 x) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ 0 - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q 0 v) (q 0 x) \<le> 3 * (if 0 = 0 then 0 else 8 * delta) + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ 0 - C / 2 - (if 0 = 0 then 0 else 8 * delta)) * ln 2 / (5 * delta)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
k \<noteq> 0

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "dist (q k v) (q k x) \<le> 2 * QC k + 8 * delta + max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (x - v) * exp(-(dm * 2^k - QC k -C/2) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
proof (rule quasiconvex_projection_exp_contracting[where ?G = "V k" and ?f = f])
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. quasiconvex (QC k) (V k)
 2. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 3. v \<le> x
 4. q k v \<in> proj_set (f v) (V k)
 5. q k x \<in> proj_set (f x) (V k)
 6. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 7. 15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k
 8. deltaG TYPE('a) < delta
 9. 0 \<le> C
 10. 0 \<le> lambda
[PROOF STEP]
show "quasiconvex (QC k) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (QC k) (V k)
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
quasiconvex (QC k) (V k)

goal (9 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. v \<le> x
 3. q k v \<in> proj_set (f v) (V k)
 4. q k x \<in> proj_set (f x) (V k)
 5. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 6. 15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k
 7. deltaG TYPE('a) < delta
 8. 0 \<le> C
 9. 0 \<le> lambda
[PROOF STEP]
show "v \<le> x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. v \<le> x
[PROOF STEP]
using \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {um..w}
w \<in> {um..x}

goal (1 subgoal):
 1. v \<le> x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
v \<le> x

goal (8 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k v \<in> proj_set (f v) (V k)
 3. q k x \<in> proj_set (f x) (V k)
 4. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 5. 15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k
 6. deltaG TYPE('a) < delta
 7. 0 \<le> C
 8. 0 \<le> lambda
[PROOF STEP]
show "q k v \<in> proj_set (f v) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k v \<in> proj_set (f v) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p v--f v} (p v) ((2 ^ k - 1) * dm) \<in> proj_set (f v) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
using aux p[of v] x(3)[of v] \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k
p v \<in> proj_set (f v) H
v \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f v) (p v)
v \<in> {um..w}
w \<in> {um..x}

goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k v \<in> proj_set (f v) (V k)

goal (7 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k x \<in> proj_set (f x) (V k)
 3. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 4. 15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k
 5. deltaG TYPE('a) < delta
 6. 0 \<le> C
 7. 0 \<le> lambda
[PROOF STEP]
show "q k x \<in> proj_set (f x) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k x \<in> proj_set (f x) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dm) \<in> proj_set (f x) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
using aux p[of x] x(3)[of x] \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k
p x \<in> proj_set (f x) H
x \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f x) (p x)
w \<in> {um..x}

goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k x \<in> proj_set (f x) (V k)

goal (6 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 3. 15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k
 4. deltaG TYPE('a) < delta
 5. 0 \<le> C
 6. 0 \<le> lambda
[PROOF STEP]
show "15/2 * delta + QC k + C/2 \<le> dm * 2^k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k
[PROOF STEP]
apply (rule order_trans[of _ dm])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 15 / 2 * delta + QC k + C / 2 \<le> dm
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
using I \<open>delta > 0\<close> \<open>C \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (2 subgoals):
 1. 15 / 2 * delta + QC k + C / 2 \<le> dm
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (2 subgoals):
 1. 15 / 2 * delta + (if k = 0 then 0 else 8 * delta) + C / 2 \<le> dm
 2. dm \<le> dm * 2 ^ k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
15 / 2 * delta + QC k + C / 2 \<le> dm * 2 ^ k

goal (5 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 3. deltaG TYPE('a) < delta
 4. 0 \<le> C
 5. 0 \<le> lambda
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (4 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
 3. 0 \<le> C
 4. 0 \<le> lambda
[PROOF STEP]
show "\<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
using aux4
[PROOF STATE]
proof (prove)
using this:
?r \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f ?r) (V k)

goal (1 subgoal):
 1. \<And>t. t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?t \<in> {v..x} \<Longrightarrow> dm * 2 ^ k \<le> infdist (f ?t) (V k)

goal (3 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. 0 \<le> C
 3. 0 \<le> lambda
[PROOF STEP]
show "0 \<le> C" "0 \<le> lambda"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
using \<open>C \<ge> 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> C
1 \<le> lambda

goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> C
0 \<le> lambda

goal (1 subgoal):
 1. \<And>xa y. \<lbrakk>xa \<in> {v..x}; y \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
[PROOF STEP]
show "dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C" if "x1 \<in> {v..x}" "x2 \<in> {v..x}" for x1 x2
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
using quasi_isometry_onD(1)[OF assms(2)] that \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> {a..b}; ?y \<in> {a..b}\<rbrakk> \<Longrightarrow> dist (f ?x) (f ?y) \<le> lambda * dist ?x ?y + C
x1 \<in> {v..x}
x2 \<in> {v..x}
v \<in> {um..w}
w \<in> {um..x}
x \<in> {um..ym}
ym \<in> {um..z}
um \<in> {a..z}
z \<in> {a..b}

goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x1.0 \<in> {v..x}; ?x2.0 \<in> {v..x}\<rbrakk> \<Longrightarrow> dist (f ?x1.0) (f ?x2.0) \<le> lambda * dist ?x1.0 ?x2.0 + C

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (q k v) (q k x) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (q k v) (q k x) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (q k v) (q k x) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
using this:
dist (q k v) (q k x) \<le> 2 * (if k = 0 then 0 else 8 * delta) + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - (if k = 0 then 0 else 8 * delta) - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> 3 * (if k = 0 then 0 else 8 * delta) + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - (if k = 0 then 0 else 8 * delta)) * ln 2 / (5 * delta)))
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
dist (q k v) (q k x) \<le> 2 * (if k = 0 then 0 else 8 * delta) + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - (if k = 0 then 0 else 8 * delta) - C / 2) * ln 2 / (5 * delta)))
k \<noteq> 0

goal (1 subgoal):
 1. dist (q k v) (q k x) \<le> 3 * (if k = 0 then 0 else 8 * delta) + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - (if k = 0 then 0 else 8 * delta)) * ln 2 / (5 * delta)))
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (q k v) (q k x) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta + 3 * QC k \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "L - 13 * delta \<le> max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (x - v) * exp(-(dm * 2^k - C/2 - QC k) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta + 3 * QC k \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "L - 13 * delta \<le> (4 * exp(1/2 * ln 2)) * lambda * (x - v) * exp(-(dm * 2^k - C/2 - QC k) * ln 2 / (5 * delta))"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))
[PROOF STEP]
using \<open>delta > deltaG(TYPE('a))\<close> Laux
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
deltaG TYPE('a) < delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>We separate the exponential gain coming from the contraction into two parts, one
              to be spent to improve the constant, and one for the inductive argument.\<close>
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (4 * exp(1/2 * ln 2)) * lambda * (x - v) * exp(-((1-alpha) * D + alpha * 2^k * dm) * ln 2 / (5 * delta))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)) \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dm) * ln 2 / (5 * delta))
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
 4. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v)
[PROOF STEP]
using aux3 \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
(1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
0 < delta
1 \<le> lambda
v \<in> {um..w}
w \<in> {um..x}

goal (4 subgoals):
 1. (1 - alpha) * D + alpha * 2 ^ k * dm \<le> dm * 2 ^ k - C / 2 - QC k
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
 4. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)) \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dm) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (dm * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)) \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dm) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = (4 * exp(1/2 * ln 2)) * lambda * (x - v) * (exp(-(1-alpha) * D * ln 2 / (5 * delta)) * exp(-alpha * 2^k * dm * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dm) * ln 2 / (5 * delta)) = 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))
[PROOF STEP]
unfolding mult_exp_exp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dm) * ln 2 / (5 * delta)) = 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- (1 - alpha) * D * ln 2 / (5 * delta) + - alpha * 2 ^ k * dm * ln 2 / (5 * delta))
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (x - v) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dm) * ln 2 / (5 * delta)) = 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))
[PROOF STEP]
have A: "L - 13 * delta \<le> (4 * exp(1/2 * ln 2)) * lambda * exp(-(1-alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp(-alpha * 2^k * dm * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (x - v) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>This is the end of the second substep.\<close>
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Use the second substep to show that $x-v$ is bounded below, and therefore
              that $closestM - x$ (the endpoints of the new geodesic we want to consider in the
              inductive argument) are quantitatively closer than $uM - um$, which means that we
              will be able to use the inductive assumption over this new geodesic.\<close>
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (4 * exp(1/2 * ln 2)) * lambda * exp 0 * ((x - v) * exp 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))) \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((x - v) * exp 0)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. - (1 - alpha) * D * ln 2 / (5 * delta) \<le> 0
 2. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda
 3. - alpha * 2 ^ k * dm * ln 2 / (5 * delta) \<le> 0
 4. 0 \<le> x - v
 5. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0
 6. 0 \<le> (x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close> alphaaux \<open>D > 0\<close> \<open>C \<ge> 0\<close> I
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
v \<in> {um..w}
w \<in> {um..x}
0 < alpha
alpha \<le> 1
0 < D
0 \<le> C
D + 4 * C \<le> dm
dM \<le> dm

goal (6 subgoals):
 1. - (1 - alpha) * D * ln 2 / (5 * delta) \<le> 0
 2. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda
 3. - alpha * 2 ^ k * dm * ln 2 / (5 * delta) \<le> 0
 4. 0 \<le> x - v
 5. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0
 6. 0 \<le> (x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))
[PROOF STEP]
by (auto simp add: divide_simps mult_nonpos_nonneg)
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))) \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((x - v) * exp 0)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))) \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((x - v) * exp 0)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = (4 * exp(1/2 * ln 2)) * lambda * (x-v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((x - v) * exp 0) = 4 * exp (1 / 2 * ln 2) * lambda * (x - v)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((x - v) * exp 0) = 4 * exp (1 / 2 * ln 2) * lambda * (x - v)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((x - v) * exp 0) = 4 * exp (1 / 2 * ln 2) * lambda * (x - v)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> 20 * lambda * (x - v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (x - v) \<le> 20 * lambda * (x - v)
[PROOF STEP]
apply (intro mono_intros, approximation 10)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 0 \<le> lambda
 2. 0 \<le> x - v
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {um..w}\<close> \<open>w \<in> {um..x}\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
v \<in> {um..w}
w \<in> {um..x}

goal (2 subgoals):
 1. 0 \<le> lambda
 2. 0 \<le> x - v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (x - v) \<le> 20 * lambda * (x - v)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta \<le> 20 * lambda * (x - v)
[PROOF STEP]
have "x - v \<ge> (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 20 * lambda * (x - v)

goal (1 subgoal):
 1. 1 / 4 * delta / lambda \<le> x - v
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> L_def \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 20 * lambda * (x - v)
1 \<le> lambda
L = 18 * delta
0 < delta

goal (1 subgoal):
 1. 1 / 4 * delta / lambda \<le> x - v
[PROOF STEP]
by (simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
1 / 4 * delta / lambda \<le> x - v

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
1 / 4 * delta / lambda \<le> x - v
[PROOF STEP]
have "closestM - x + (1/4) * delta / lambda \<le> closestM - v"
[PROOF STATE]
proof (prove)
using this:
1 / 4 * delta / lambda \<le> x - v

goal (1 subgoal):
 1. closestM - x + 1 / 4 * delta / lambda \<le> closestM - v
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
closestM - x + 1 / 4 * delta / lambda \<le> closestM - v

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
closestM - x + 1 / 4 * delta / lambda \<le> closestM - v

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> uM - um"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. closestM - v \<le> uM - um
[PROOF STEP]
using \<open>closestM \<in> {yM..uM}\<close> \<open>v \<in> {um..w}\<close>
[PROOF STATE]
proof (prove)
using this:
closestM \<in> {yM..uM}
v \<in> {um..w}

goal (1 subgoal):
 1. closestM - v \<le> uM - um
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
closestM - v \<le> uM - um

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
closestM - v \<le> uM - um

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> Suc n * (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
closestM - x + 1 / 4 * delta / lambda \<le> real (Suc n) * (1 / 4) * delta / lambda
[PROOF STEP]
have "closestM - x \<le> n * (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
using this:
closestM - x + 1 / 4 * delta / lambda \<le> real (Suc n) * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. closestM - x \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
unfolding Suc_eq_plus1
[PROOF STATE]
proof (prove)
using this:
closestM - x + 1 / 4 * delta / lambda \<le> real (n + 1) * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. closestM - x \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
by (auto simp add: algebra_simps add_divide_distrib)
[PROOF STATE]
proof (state)
this:
closestM - x \<le> real n * (1 / 4) * delta / lambda

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Conclusion of the proof: combine the lower bound of the second substep with
              the upper bound of the first substep to get a definite gain when one goes from
              the old geodesic to the new one. Then, apply the inductive assumption to the new one
              to conclude the desired inequality for the old one.\<close>
[PROOF STATE]
proof (state)
this:
closestM - x \<le> real n * (1 / 4) * delta / lambda

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "L + 4 * delta = ((L + 4 * delta)/(L - 13 * delta)) * (L - 13 * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)
[PROOF STEP]
using Laux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta

goal (1 subgoal):
 1. L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)
[PROOF STEP]
by (simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> ((L + 4 * delta)/(L - 13 * delta)) * ((4 * exp(1/2 * ln 2)) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))))
[PROOF STEP]
apply (rule mult_left_mono)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
using A Laux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta

goal (2 subgoals):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
by (auto simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
(L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta))))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> ((L + 4 * delta)/(L - 13 * delta)) * ((4 * exp(1/2 * ln 2)) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp(-K * (closestM - x)) - exp(-K * (uM - um)))/K))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K))
[PROOF STEP]
apply (intro mono_intros B)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
using Laux \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta
1 \<le> lambda

goal (2 subgoals):
 1. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
by (auto simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
(L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((x - v) * exp (- alpha * 2 ^ k * dm * ln 2 / (5 * delta)))) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K))
[PROOF STEP]
have C: "L + 4 * delta \<le> Kmult * (exp(-K * (closestM - x)) - exp(-K * (uM - um)))"
[PROOF STATE]
proof (prove)
using this:
L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K))

goal (1 subgoal):
 1. L + 4 * delta \<le> Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um)))
[PROOF STEP]
unfolding Kmult_def
[PROOF STATE]
proof (prove)
using this:
L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (closestM - x)) - exp (- K * (uM - um))) / K))

goal (1 subgoal):
 1. L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) / K) * (exp (- K * (closestM - x)) - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L + 4 * delta \<le> Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta)
[PROOF STEP]
apply (rule Rec)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. x \<in> {um..ym}
 2. closestM \<in> {yM..uM}
[PROOF STEP]
using \<open>closestM \<in> {yM..uM}\<close> \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close>
[PROOF STATE]
proof (prove)
using this:
closestM \<in> {yM..uM}
x \<in> {um..ym}
ym \<in> {um..z}

goal (2 subgoals):
 1. x \<in> {um..ym}
 2. closestM \<in> {yM..uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (closestM - x)))) + (Kmult * (exp(-K * (closestM - x)) - exp(-K * (uM-um))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (closestM - x))) + Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um)))
[PROOF STEP]
apply (intro mono_intros C Suc.IH)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. x \<in> {a..z}
 2. closestM \<in> {z..b}
 3. closestM - x \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
using \<open>x \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close> \<open>closestM \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>closestM - x \<le> n * (1/4) * delta / lambda\<close>
[PROOF STATE]
proof (prove)
using this:
x \<in> {um..ym}
ym \<in> {um..z}
um \<in> {a..z}
closestM \<in> {yM..uM}
yM \<in> {z..uM}
uM \<in> {z..b}
closestM - x \<le> real n * (1 / 4) * delta / lambda

goal (3 subgoals):
 1. x \<in> {a..z}
 2. closestM \<in> {z..b}
 3. closestM - x \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (closestM - x))) + Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f x) (f closestM) + (L + 4 * delta) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (closestM - x))) + Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "... = (lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (closestM - x))) + Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um))) = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
unfolding K_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (closestM - x))) + Kmult * (exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (closestM - x)) - exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (uM - um))) = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (uM - um)))
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (closestM - x))) + Kmult * (exp (- K * (closestM - x)) - exp (- K * (uM - um))) = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>End of the first subcase, when there is a good point $v$ between $um$ and $w$.\<close>
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm)

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
text \<open>Second subcase: between $um$ and $w$, all points are far away from $V_k$. We
              will show that this implies that $w$ is admissible for the step $k+1$.\<close>
[PROOF STATE]
proof (state)
this:
\<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm)

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
have "\<exists>w\<in>{um..ym}. (\<forall>v\<in>{um..w}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f v) (p v)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>w\<in>{um..ym}. (\<forall>v\<in>{um..w}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f v) (p v)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
proof (rule bexI[of _ w], auto)
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>v. \<lbrakk>um \<le> v; v \<le> w\<rbrakk> \<Longrightarrow> (4 * 2 ^ k - 1) * dm \<le> dist (f v) (p v)
 2. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
 3. um \<le> w
 4. w \<le> ym
[PROOF STEP]
show "um \<le> w" "w \<le> ym"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. um \<le> w &&& w \<le> ym
[PROOF STEP]
using \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close>
[PROOF STATE]
proof (prove)
using this:
w \<in> {um..x}
x \<in> {um..ym}

goal (1 subgoal):
 1. um \<le> w &&& w \<le> ym
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
um \<le> w
w \<le> ym

goal (2 subgoals):
 1. \<And>v. \<lbrakk>um \<le> v; v \<le> w\<rbrakk> \<Longrightarrow> (4 * 2 ^ k - 1) * dm \<le> dist (f v) (p v)
 2. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
show "(4 * 2 ^ k - 1) * dm \<le> dist (f x) (p x)" if "um \<le> x" "x \<le> w" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (4 * 2 ^ k - 1) * dm \<le> dist (f x) (p x)
[PROOF STEP]
using False \<open>dm \<ge> 0\<close> that
[PROOF STATE]
proof (prove)
using this:
\<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm)
0 \<le> dm
um \<le> x
x \<le> w

goal (1 subgoal):
 1. (4 * 2 ^ k - 1) * dm \<le> dist (f x) (p x)
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
\<lbrakk>um \<le> ?x; ?x \<le> w\<rbrakk> \<Longrightarrow> (4 * 2 ^ k - 1) * dm \<le> dist (f ?x) (p ?x)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "dist (q k um) (q (k+1) um) = 2^k * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k um) (q (k + 1) um) = 2 ^ k * dm
[PROOF STEP]
unfolding q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (geodesic_segment_param {p um--f um} (p um) ((2 ^ k - 1) * dm)) (geodesic_segment_param {p um--f um} (p um) ((2 ^ (k + 1) - 1) * dm)) = 2 ^ k * dm
[PROOF STEP]
apply (subst geodesic_segment_param(7)[where ?y = "f um"])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. geodesic_segment_between {p um--f um} (p um) (f um)
 2. (2 ^ k - 1) * dm \<in> {0..dist (p um) (f um)}
 3. (2 ^ (k + 1) - 1) * dm \<in> {0..dist (p um) (f um)}
 4. \<bar>(2 ^ k - 1) * dm - (2 ^ (k + 1) - 1) * dm\<bar> = 2 ^ k * dm
[PROOF STEP]
using x(3)[of um] \<open>x \<in> {um..ym}\<close> aux
[PROOF STATE]
proof (prove)
using this:
um \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)
x \<in> {um..ym}
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (4 subgoals):
 1. geodesic_segment_between {p um--f um} (p um) (f um)
 2. (2 ^ k - 1) * dm \<in> {0..dist (p um) (f um)}
 3. (2 ^ (k + 1) - 1) * dm \<in> {0..dist (p um) (f um)}
 4. \<bar>(2 ^ k - 1) * dm - (2 ^ (k + 1) - 1) * dm\<bar> = 2 ^ k * dm
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute, simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (q k um) (q (k + 1) um) = 2 ^ k * dm

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "dist (q k w) (q (k+1) w) = 2^k * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k w) (q (k + 1) w) = 2 ^ k * dm
[PROOF STEP]
unfolding q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (geodesic_segment_param {p w--f w} (p w) ((2 ^ k - 1) * dm)) (geodesic_segment_param {p w--f w} (p w) ((2 ^ (k + 1) - 1) * dm)) = 2 ^ k * dm
[PROOF STEP]
apply (subst geodesic_segment_param(7)[where ?y = "f w"])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. geodesic_segment_between {p w--f w} (p w) (f w)
 2. (2 ^ k - 1) * dm \<in> {0..dist (p w) (f w)}
 3. (2 ^ (k + 1) - 1) * dm \<in> {0..dist (p w) (f w)}
 4. \<bar>(2 ^ k - 1) * dm - (2 ^ (k + 1) - 1) * dm\<bar> = 2 ^ k * dm
[PROOF STEP]
using x(3)[of w] \<open>w \<in> {um..x}\<close> \<open>x \<in> {um..ym}\<close> aux
[PROOF STATE]
proof (prove)
using this:
w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)
w \<in> {um..x}
x \<in> {um..ym}
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (4 subgoals):
 1. geodesic_segment_between {p w--f w} (p w) (f w)
 2. (2 ^ k - 1) * dm \<in> {0..dist (p w) (f w)}
 3. (2 ^ (k + 1) - 1) * dm \<in> {0..dist (p w) (f w)}
 4. \<bar>(2 ^ k - 1) * dm - (2 ^ (k + 1) - 1) * dm\<bar> = 2 ^ k * dm
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute, simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (q k w) (q (k + 1) w) = 2 ^ k * dm

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have i: "q k um \<in> proj_set (q (k+1) um) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k um \<in> proj_set (q (k + 1) um) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p um--f um} (p um) ((2 ^ k - 1) * dm) \<in> proj_set (geodesic_segment_param {p um--f um} (p um) ((2 ^ (k + 1) - 1) * dm)) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening'[of _ "f um"])
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. p um \<in> proj_set (f um) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> (2 ^ (k + 1) - 1) * dm
 4. (2 ^ (k + 1) - 1) * dm \<le> dist (p um) (f um)
 5. geodesic_segment_between {p um--f um} (p um) (f um)
[PROOF STEP]
using p x(3)[of um] \<open>x \<in> {um..ym}\<close> aux
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
um \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)
x \<in> {um..ym}
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (5 subgoals):
 1. p um \<in> proj_set (f um) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> (2 ^ (k + 1) - 1) * dm
 4. (2 ^ (k + 1) - 1) * dm \<le> dist (p um) (f um)
 5. geodesic_segment_between {p um--f um} (p um) (f um)
[PROOF STEP]
by (auto simp add: algebra_simps metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k um \<in> proj_set (q (k + 1) um) (V k)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have j: "q k w \<in> proj_set (q (k+1) w) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k w \<in> proj_set (q (k + 1) w) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p w--f w} (p w) ((2 ^ k - 1) * dm) \<in> proj_set (geodesic_segment_param {p w--f w} (p w) ((2 ^ (k + 1) - 1) * dm)) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dm))
[PROOF STEP]
apply (rule proj_set_thickening'[of _ "f w"])
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> (2 ^ (k + 1) - 1) * dm
 4. (2 ^ (k + 1) - 1) * dm \<le> dist (p w) (f w)
 5. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
using p x(3)[of w] \<open>x \<in> {um..ym}\<close> \<open>w \<in> {um..x}\<close> aux
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
w \<in> {um..x} \<Longrightarrow> (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)
x \<in> {um..ym}
w \<in> {um..x}
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (5 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dm
 3. (2 ^ k - 1) * dm \<le> (2 ^ (k + 1) - 1) * dm
 4. (2 ^ (k + 1) - 1) * dm \<le> dist (p w) (f w)
 5. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
by (auto simp add: algebra_simps metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k w \<in> proj_set (q (k + 1) w) (V k)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "5 * delta + 2 * QC k \<le> dist (q k um) (q k w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q k um) (q k w)
[PROOF STEP]
using w(2)
[PROOF STATE]
proof (prove)
using this:
dist (q k um) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}

goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q k um) (q k w)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
5 * delta + 2 * QC k \<le> dist (q k um) (q k w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
5 * delta + 2 * QC k \<le> dist (q k um) (q k w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "... \<le> max (5 * deltaG(TYPE('a)) + 2 * QC k)
                                      (dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG(TYPE('a)) + 4 * QC k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k um) (q k w) \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)
[PROOF STEP]
by (rule proj_along_quasiconvex_contraction[OF \<open>quasiconvex (QC k) (V k)\<close> i j])
[PROOF STATE]
proof (state)
this:
dist (q k um) (q k w) \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
5 * delta + 2 * QC k \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)
[PROOF STEP]
have "5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG(TYPE('a)) + 4 * QC k"
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)

goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
[PROOF STEP]
have "0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w)"
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k

goal (1 subgoal):
 1. 0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w)
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w) - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "... = dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - 2^(k+1) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) = dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dm
[PROOF STEP]
by (simp only: \<open>dist (q k w) (q (k+1) w) = 2^k * dm\<close> \<open>dist (q k um) (q (k+1) um) = 2^k * dm\<close>, auto)
[PROOF STATE]
proof (state)
this:
dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k um) (q (k + 1) um) - dist (q k w) (q (k + 1) w) = dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dm

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dm
[PROOF STEP]
have *: "2^(k+1) * dm - 5 * delta - 2 * QC k \<le> dist (q (k+1) um) (q (k+1) w)"
[PROOF STATE]
proof (prove)
using this:
0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dm

goal (1 subgoal):
 1. 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w)
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> dist (q (k + 1) um) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dm
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
2 ^ (k + 1) * dm - 5 * delta - 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "L - 4 * delta + 7 * QC (k+1) \<le> 2 * dm - 5 * delta - 2 * QC k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (k + 1) \<le> 2 * dm - 5 * delta - 2 * QC k
[PROOF STEP]
unfolding QC_def L_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 18 * delta - 4 * delta + 7 * (if k + 1 = 0 then 0 else 8 * delta) \<le> 2 * dm - 5 * delta - 2 * (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
using \<open>delta > 0\<close> Laux I \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
D + 4 * C \<le> dm
dM \<le> dm
0 \<le> C

goal (1 subgoal):
 1. 18 * delta - 4 * delta + 7 * (if k + 1 = 0 then 0 else 8 * delta) \<le> 2 * dm - 5 * delta - 2 * (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 * dm - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 * dm - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
have "... \<le> 2^(k+1) * dm - 5 * delta - 2 * QC k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * dm - 5 * delta - 2 * QC k \<le> 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k
[PROOF STEP]
using aux
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dm \<le> (2 * 2 ^ k - 1) * dm
0 \<le> 2 * 2 ^ k - 1
dm \<le> dm * 2 ^ k

goal (1 subgoal):
 1. 2 * dm - 5 * delta - 2 * QC k \<le> 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
2 * dm - 5 * delta - 2 * QC k \<le> 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k
[PROOF STEP]
show "L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)"
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 ^ (k + 1) * dm - 5 * delta - 2 * QC k
2 ^ (k + 1) * dm - 5 * delta - 2 * QC k \<le> dist (q (k + 1) um) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>w\<in>{um..ym}. (\<forall>v\<in>{um..w}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f v) (p v)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{um..w}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dm) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>w\<in>{um..ym}. (\<forall>v\<in>{um..w}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f v) (p v)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<exists>w\<in>{um..ym}. (\<forall>v\<in>{um..w}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f v) (p v)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) w)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (Suc k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) um) (q (Suc k) x))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (?k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC ?k \<le> dist (q ?k um) (q ?k x))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>This is the end of the main induction over $k$. To conclude, choose $k$ large enough
        so that the second alternative in this induction is impossible. It follows that the first
        alternative holds, i.e., the desired inequality is true.\<close>
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (?k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC ?k \<le> dist (q ?k um) (q ?k x))

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dm > 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < dm
[PROOF STEP]
using I \<open>delta > 0\<close> \<open>C \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dm
dM \<le> dm
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. 0 < dm
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 < dm

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "\<exists>k. 2^k > dist (f um) (p um)/dm + 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>k. dist (f um) (p um) / dm + 1 < 2 ^ k
[PROOF STEP]
by (simp add: real_arch_pow)
[PROOF STATE]
proof (state)
this:
\<exists>k. dist (f um) (p um) / dm + 1 < 2 ^ k

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>k. dist (f um) (p um) / dm + 1 < 2 ^ k
[PROOF STEP]
obtain k where "2^k > dist (f um) (p um)/dm + 1"
[PROOF STATE]
proof (prove)
using this:
\<exists>k. dist (f um) (p um) / dm + 1 < 2 ^ k

goal (1 subgoal):
 1. (\<And>k. dist (f um) (p um) / dm + 1 < 2 ^ k \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
dist (f um) (p um) / dm + 1 < 2 ^ k

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (f um) (p um) / dm + 1 < 2 ^ k
[PROOF STEP]
have "dist (f um) (p um) < (2^k - 1) * dm"
[PROOF STATE]
proof (prove)
using this:
dist (f um) (p um) / dm + 1 < 2 ^ k

goal (1 subgoal):
 1. dist (f um) (p um) < (2 ^ k - 1) * dm
[PROOF STEP]
using \<open>dm > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f um) (p um) / dm + 1 < 2 ^ k
0 < dm

goal (1 subgoal):
 1. dist (f um) (p um) < (2 ^ k - 1) * dm
[PROOF STEP]
by (auto simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (f um) (p um) < (2 ^ k - 1) * dm

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f um) (p um) < (2 ^ k - 1) * dm

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> (2^(Suc k) - 1) * dm"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 ^ k - 1) * dm \<le> (2 ^ Suc k - 1) * dm
[PROOF STEP]
by (intro mono_intros, auto)
[PROOF STATE]
proof (state)
this:
(2 ^ k - 1) * dm \<le> (2 ^ Suc k - 1) * dm

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f um) (p um) < (2 ^ Suc k - 1) * dm
[PROOF STEP]
have "\<not>((2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um))"
[PROOF STATE]
proof (prove)
using this:
dist (f um) (p um) < (2 ^ Suc k - 1) * dm

goal (1 subgoal):
 1. \<not> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<not> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)

goal (2 subgoals):
 1. D + 4 * C \<le> dm \<and> dM \<le> dm \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
 2. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)
[PROOF STEP]
show "Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))"
[PROOF STATE]
proof (prove)
using this:
\<not> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
using Ind_k[of k]
[PROOF STATE]
proof (prove)
using this:
\<not> (2 ^ (k + 1) - 1) * dm \<le> dist (f um) (p um)
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{um..ym}. (\<forall>w\<in>{um..x}. (2 ^ (k + 1) - 1) * dm \<le> dist (f w) (p w)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k um) (q k x))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>end of the case where $D + 4 * C \leq dm$ and $dM \leq dm$.\<close>
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
case 3
[PROOF STATE]
proof (state)
this:
D + 4 * C \<le> dM \<and> dm \<le> dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
text \<open>This is the exact copy of the previous case, except that the roles of the points before
        and after $z$ are exchanged. In a perfect world, one would use a lemma subsuming both cases,
        but in practice copy-paste seems to work better here as there are two many details to be
        changed regarding the direction of inequalities.\<close>
[PROOF STATE]
proof (state)
this:
D + 4 * C \<le> dM \<and> dm \<le> dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
D + 4 * C \<le> dM \<and> dm \<le> dM
[PROOF STEP]
have I: "D + 4 * C \<le> dM" "dm \<le> dM"
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM \<and> dm \<le> dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM &&& dm \<le> dM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
D + 4 * C \<le> dM
dm \<le> dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define V where "V = (\<lambda>k::nat. (\<Union>g\<in>H. cball g ((2^k - 1) * dM)))"
[PROOF STATE]
proof (state)
this:
V = (\<lambda>k. \<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define QC where "QC = (\<lambda>k::nat. if k = 0 then 0 else 8 * delta)"
[PROOF STATE]
proof (state)
this:
QC = (\<lambda>k. if k = 0 then 0 else 8 * delta)

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "QC k \<ge> 0" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> QC k
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
using \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta

goal (1 subgoal):
 1. 0 \<le> (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> QC ?k

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have Q: "quasiconvex (0 + 8 * deltaG(TYPE('a))) (V k)" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (0 + 8 * deltaG TYPE('a)) (V k)
[PROOF STEP]
unfolding V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (0 + 8 * deltaG TYPE('a)) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule quasiconvex_thickening)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. quasiconvex 0 H
 2. 0 \<le> (2 ^ k - 1) * dM
[PROOF STEP]
using geodesic_segmentI[OF H]
[PROOF STATE]
proof (prove)
using this:
geodesic_segment H

goal (2 subgoals):
 1. quasiconvex 0 H
 2. 0 \<le> (2 ^ k - 1) * dM
[PROOF STEP]
by (auto simp add: quasiconvex_of_geodesic)
[PROOF STATE]
proof (state)
this:
quasiconvex (0 + 8 * deltaG TYPE('a)) (V ?k)

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "quasiconvex (QC k) (V k)" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (QC k) (V k)
[PROOF STEP]
apply (cases "k = 0")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> quasiconvex (QC k) (V k)
 2. k \<noteq> 0 \<Longrightarrow> quasiconvex (QC k) (V k)
[PROOF STEP]
apply (simp add: V_def QC_def quasiconvex_of_geodesic geodesic_segmentI[OF H])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> quasiconvex (QC k) (V k)
[PROOF STEP]
apply (rule quasiconvex_mono[OF _ Q[of k]])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> 0 + 8 * deltaG TYPE('a) \<le> QC k
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close> QC_def
[PROOF STATE]
proof (prove)
using this:
deltaG TYPE('a) < delta
QC = (\<lambda>k. if k = 0 then 0 else 8 * delta)

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> 0 + 8 * deltaG TYPE('a) \<le> QC k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
quasiconvex (QC ?k) (V ?k)

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
define q::"nat \<Rightarrow> real \<Rightarrow> 'a" where "q = (\<lambda>k x. geodesic_segment_param {p x--f x} (p x) ((2^k - 1) * dM))"
[PROOF STATE]
proof (state)
this:
q = (\<lambda>k x. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dM))

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have Ind_k: "(Gromov_product_at (f z) (f um) (f uM) \<le> lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um))))
              \<or> (\<exists>x \<in> {yM..uM}. (\<forall>y \<in> {x..uM}. dist (f y) (p y) \<ge> (2^(k+1)-1) * dM) \<and> dist (q k uM) (q k x) \<ge> L - 4 * delta + 7 * QC k)" for k
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x))
[PROOF STEP]
proof (induction k)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
case 0
[PROOF STATE]
proof (state)
this:

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have *: "\<exists>x\<in> {yM..uM}. (\<forall>y \<in> {x..uM}. dist (f y) (p y) \<ge> (2^(0+1)-1) * dM) \<and> dist (q 0 uM) (q 0 x) \<ge> L - 4 * delta + 7 * QC 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x)
[PROOF STEP]
proof (rule bexI[of _ yM], auto simp add: V_def q_def QC_def)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>y. \<lbrakk>yM \<le> y; y \<le> uM\<rbrakk> \<Longrightarrow> dM \<le> dist (f y) (p y)
 2. L - 4 * delta \<le> dist (p uM) (p yM)
 3. yM \<le> uM
[PROOF STEP]
show "yM \<le> uM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. yM \<le> uM
[PROOF STEP]
using \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
yM \<in> {z..uM}

goal (1 subgoal):
 1. yM \<le> uM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
yM \<le> uM

goal (2 subgoals):
 1. \<And>y. \<lbrakk>yM \<le> y; y \<le> uM\<rbrakk> \<Longrightarrow> dM \<le> dist (f y) (p y)
 2. L - 4 * delta \<le> dist (p uM) (p yM)
[PROOF STEP]
show "L -4 * delta \<le> dist (p uM) (p yM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L - 4 * delta \<le> dist (p uM) (p yM)
[PROOF STEP]
using yM(2)
[PROOF STATE]
proof (prove)
using this:
dist (p uM) (p yM) \<in> {L + dist pi_z (p uM) - 4 * delta - 2 * 0..L + dist pi_z (p uM)}

goal (1 subgoal):
 1. L - 4 * delta \<le> dist (p uM) (p yM)
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>L + dist pi_z (p uM) - 4 * delta \<le> dist (p uM) (p yM); dist (p uM) (p yM) \<le> L + dist pi_z (p uM)\<rbrakk> \<Longrightarrow> L - 4 * delta \<le> dist (p uM) (p yM)
[PROOF STEP]
using metric_space_class.zero_le_dist[of pi_z "p uM"]
[PROOF STATE]
proof (prove)
using this:
0 \<le> dist pi_z (p uM)

goal (1 subgoal):
 1. \<lbrakk>L + dist pi_z (p uM) - 4 * delta \<le> dist (p uM) (p yM); dist (p uM) (p yM) \<le> L + dist pi_z (p uM)\<rbrakk> \<Longrightarrow> L - 4 * delta \<le> dist (p uM) (p yM)
[PROOF STEP]
by linarith
[PROOF STATE]
proof (state)
this:
L - 4 * delta \<le> dist (p uM) (p yM)

goal (1 subgoal):
 1. \<And>y. \<lbrakk>yM \<le> y; y \<le> uM\<rbrakk> \<Longrightarrow> dM \<le> dist (f y) (p y)
[PROOF STEP]
show "\<And>y. y \<le> uM \<Longrightarrow> yM \<le> y \<Longrightarrow> dM \<le> dist (f y) (p y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>y. \<lbrakk>y \<le> uM; yM \<le> y\<rbrakk> \<Longrightarrow> dM \<le> dist (f y) (p y)
[PROOF STEP]
using dM_def closestM proj_setD(2)[OF p]
[PROOF STATE]
proof (prove)
using this:
dM = infdist (f closestM) H
closestM \<in> {yM..uM}
?v \<in> {yM..uM} \<Longrightarrow> infdist (f closestM) H \<le> infdist (f ?v) H
dist (f ?x1) (p ?x1) = infdist (f ?x1) H

goal (1 subgoal):
 1. \<And>y. \<lbrakk>y \<le> uM; yM \<le> y\<rbrakk> \<Longrightarrow> dM \<le> dist (f y) (p y)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>?y \<le> uM; yM \<le> ?y\<rbrakk> \<Longrightarrow> dM \<le> dist (f ?y) (p ?y)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x)

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x))
 2. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (0 + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC 0 \<le> dist (q 0 uM) (q 0 x))

goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
case Suck: (Suc k)
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x))

goal (1 subgoal):
 1. \<And>k. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
proof (cases "Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
obtain x where x: "x \<in> {yM..uM}" "dist (q k uM) (q k x) \<ge> L - 4 * delta + 7 * QC k"
                                   "\<And>w. w \<in> {x..uM} \<Longrightarrow> dist (f w) (p w) \<ge> (2^(k+1)-1) * dM"
[PROOF STATE]
proof (prove)
using this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. (\<And>x. \<lbrakk>x \<in> {yM..uM}; L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x); \<And>w. w \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f w) (p w)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using Suck.IH
[PROOF STATE]
proof (prove)
using this:
\<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x))

goal (1 subgoal):
 1. (\<And>x. \<lbrakk>x \<in> {yM..uM}; L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x); \<And>w. w \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f w) (p w)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> {yM..uM}
L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)
?w \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f ?w) (p ?w)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have aux: "(2 ^ k - 1) * dM \<le> (2*2^k-1) * dM" "0 \<le> 2 * 2 ^ k - (1::real)" "dM \<le> dM * 2 ^ k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM &&& 0 \<le> 2 * 2 ^ k - 1 &&& dM \<le> dM * 2 ^ k
[PROOF STEP]
apply (auto simp add: algebra_simps)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 1 \<le> 2 * 2 ^ k
 2. dM \<le> dM * 2 ^ k
[PROOF STEP]
apply (metis power.simps(2) two_realpow_ge_one)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dM \<le> dM * 2 ^ k
[PROOF STEP]
using \<open>0 \<le> dM\<close> less_eq_real_def
[PROOF STATE]
proof (prove)
using this:
0 \<le> dM
(?x \<le> ?y) = (?x < ?y \<or> ?x = ?y)

goal (1 subgoal):
 1. dM \<le> dM * 2 ^ k
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "L + C = (L/D) * (D + (D/L) * C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L + C = L / D * (D + D / L * C)
[PROOF STEP]
using \<open>L > 0\<close> \<open>D > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < L
0 < D

goal (1 subgoal):
 1. L + C = L / D * (D + D / L * C)
[PROOF STEP]
by (simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L + C = L / D * (D + D / L * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L + C = L / D * (D + D / L * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (L/D) * (D + 4 * C)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L / D * (D + D / L * C) \<le> L / D * (D + 4 * C)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. D / L \<le> 4
 2. 0 \<le> C
 3. 0 \<le> L / D
[PROOF STEP]
using \<open>L > 0\<close> \<open>D > 0\<close> \<open>C \<ge> 0\<close> \<open>D \<le> 4 * L\<close>
[PROOF STATE]
proof (prove)
using this:
0 < L
0 < D
0 \<le> C
D \<le> 4 * L

goal (3 subgoals):
 1. D / L \<le> 4
 2. 0 \<le> C
 3. 0 \<le> L / D
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L / D * (D + D / L * C) \<le> L / D * (D + 4 * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L / D * (D + D / L * C) \<le> L / D * (D + 4 * C)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (L/D) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L / D * (D + 4 * C) \<le> L / D * dM
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. D + 4 * C \<le> dM
 2. 0 \<le> L / D
[PROOF STEP]
using I \<open>L > 0\<close> \<open>D > 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 < L
0 < D

goal (2 subgoals):
 1. D + 4 * C \<le> dM
 2. 0 \<le> L / D
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L / D * (D + 4 * C) \<le> L / D * dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L + C \<le> L / D * dM
[PROOF STEP]
have "L + C \<le> (L/D) * dM"
[PROOF STATE]
proof (prove)
using this:
L + C \<le> L / D * dM

goal (1 subgoal):
 1. L + C \<le> L / D * dM
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
L + C \<le> L / D * dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
L + C \<le> L / D * dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "2 * delta \<le> (2 * delta)/D * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * delta \<le> 2 * delta / D * dM
[PROOF STEP]
using I \<open>C \<ge> 0\<close> \<open>delta > 0\<close> \<open>D > 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C
0 < delta
0 < D

goal (1 subgoal):
 1. 2 * delta \<le> 2 * delta / D * dM
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
2 * delta \<le> 2 * delta / D * dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
L + C \<le> L / D * dM
2 * delta \<le> 2 * delta / D * dM
[PROOF STEP]
have aux2: "L + C + 2 * delta \<le> ((L + 2 * delta)/D) * dM"
[PROOF STATE]
proof (prove)
using this:
L + C \<le> L / D * dM
2 * delta \<le> 2 * delta / D * dM

goal (1 subgoal):
 1. L + C + 2 * delta \<le> (L + 2 * delta) / D * dM
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L + C + 2 * delta \<le> (L + 2 * delta) / D * dM

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have aux3: "(1-alpha) * D + alpha * 2^k * dM \<le> dM * 2^k - C/2 - QC k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
proof (cases "k = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
 2. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
k = 0

goal (2 subgoals):
 1. k = 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
 2. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
using I \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C

goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
unfolding True QC_def alpha_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C

goal (1 subgoal):
 1. (1 - 12 / 100) * D + 12 / 100 * 2 ^ 0 * dM \<le> dM * 2 ^ 0 - C / 2 - (if 0 = 0 then 0 else 8 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
k \<noteq> 0

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
have "C/2 + QC k + (1-alpha) * D \<le> 2 * (1-alpha) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dM
[PROOF STEP]
using I \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C

goal (1 subgoal):
 1. C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dM
[PROOF STEP]
unfolding QC_def alpha_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C

goal (1 subgoal):
 1. C / 2 + (if k = 0 then 0 else 8 * delta) + (1 - 12 / 100) * D \<le> 2 * (1 - 12 / 100) * dM
[PROOF STEP]
using False Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C
k \<noteq> 0
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. C / 2 + (if k = 0 then 0 else 8 * delta) + (1 - 12 / 100) * D \<le> 2 * (1 - 12 / 100) * dM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dM

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 * (1 - alpha) * dM

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
have "... \<le> 2^k * (1-alpha) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * (1 - alpha) * dM \<le> 2 ^ k * (1 - alpha) * dM
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. 1 \<le> 2
 2. 0 < k
 3. 0 \<le> 1 - alpha
 4. 0 \<le> dM
[PROOF STEP]
using False alphaaux I \<open>D > 0\<close> \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
k \<noteq> 0
0 < alpha
alpha \<le> 1
D + 4 * C \<le> dM
dm \<le> dM
0 < D
0 \<le> C

goal (4 subgoals):
 1. 1 \<le> 2
 2. 0 < k
 3. 0 \<le> 1 - alpha
 4. 0 \<le> dM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
2 * (1 - alpha) * dM \<le> 2 ^ k * (1 - alpha) * dM

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 ^ k * (1 - alpha) * dM
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
C / 2 + QC k + (1 - alpha) * D \<le> 2 ^ k * (1 - alpha) * dM

goal (1 subgoal):
 1. (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "\<exists>w \<in> {x..uM}. (dist (q k uM) (q k w) \<in> {(9 * delta + 4 * QC k) - 4 * delta - 2 * QC k .. 9 * delta + 4 * QC k})
                    \<and> (\<forall>v \<in> {w..uM}. dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>w\<in>{x..uM}. dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{w..uM}. dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k)
[PROOF STEP]
proof (rule quasi_convex_projection_small_gaps'[where ?f = f and ?G = "V k"])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. continuous_on {x..uM} f
 2. x \<le> uM
 3. quasiconvex (QC k) (V k)
 4. \<And>xa. xa \<in> {x..uM} \<Longrightarrow> q k xa \<in> proj_set (f xa) (V k)
 5. deltaG TYPE('a) < delta
 6. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
show "continuous_on {x..uM} f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on {x..uM} f
[PROOF STEP]
apply (rule continuous_on_subset[OF \<open>continuous_on {a..b} f\<close>])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {x..uM} \<subseteq> {a..b}
[PROOF STEP]
using \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>yM \<in> {z..uM}\<close> \<open>x \<in> {yM..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
uM \<in> {z..b}
z \<in> {a..b}
yM \<in> {z..uM}
x \<in> {yM..uM}

goal (1 subgoal):
 1. {x..uM} \<subseteq> {a..b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_on {x..uM} f

goal (5 subgoals):
 1. x \<le> uM
 2. quasiconvex (QC k) (V k)
 3. \<And>xa. xa \<in> {x..uM} \<Longrightarrow> q k xa \<in> proj_set (f xa) (V k)
 4. deltaG TYPE('a) < delta
 5. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
show "x \<le> uM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<le> uM
[PROOF STEP]
using \<open>x \<in> {yM..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
x \<in> {yM..uM}

goal (1 subgoal):
 1. x \<le> uM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<le> uM

goal (4 subgoals):
 1. quasiconvex (QC k) (V k)
 2. \<And>xa. xa \<in> {x..uM} \<Longrightarrow> q k xa \<in> proj_set (f xa) (V k)
 3. deltaG TYPE('a) < delta
 4. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
show "quasiconvex (QC k) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (QC k) (V k)
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
quasiconvex (QC k) (V k)

goal (3 subgoals):
 1. \<And>xa. xa \<in> {x..uM} \<Longrightarrow> q k xa \<in> proj_set (f xa) (V k)
 2. deltaG TYPE('a) < delta
 3. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (2 subgoals):
 1. \<And>xa. xa \<in> {x..uM} \<Longrightarrow> q k xa \<in> proj_set (f xa) (V k)
 2. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
show "9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
using x(2) \<open>delta > 0\<close> \<open>QC k \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)
0 < delta
0 \<le> QC k
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. 9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
9 * delta + 4 * QC k \<in> {4 * delta + 2 * QC k..dist (q k x) (q k uM)}

goal (1 subgoal):
 1. \<And>xa. xa \<in> {x..uM} \<Longrightarrow> q k xa \<in> proj_set (f xa) (V k)
[PROOF STEP]
show "q k w \<in> proj_set (f w) (V k)" if "w \<in> {x..uM}" for w
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k w \<in> proj_set (f w) (V k)
[PROOF STEP]
unfolding V_def q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p w--f w} (p w) ((2 ^ k - 1) * dM) \<in> proj_set (f w) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p w) (f w)
 4. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
using aux p x(3)[OF that]
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k
p ?x \<in> proj_set (f ?x) H
(2 ^ (k + 1) - 1) * dM \<le> dist (f w) (p w)

goal (4 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p w) (f w)
 4. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
?w \<in> {x..uM} \<Longrightarrow> q k ?w \<in> proj_set (f ?w) (V k)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>w\<in>{x..uM}. dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{w..uM}. dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k)

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>w\<in>{x..uM}. dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{w..uM}. dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k)
[PROOF STEP]
obtain w where w: "w \<in> {x..uM}"
                                   "dist (q k uM) (q k w) \<in> {(9 * delta + 4 * QC k) - 4 * delta - 2 * QC k .. 9 * delta + 4 * QC k}"
                                   "\<And>v. v \<in> {w..uM} \<Longrightarrow> dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k"
[PROOF STATE]
proof (prove)
using this:
\<exists>w\<in>{x..uM}. dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k} \<and> (\<forall>v\<in>{w..uM}. dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k)

goal (1 subgoal):
 1. (\<And>w. \<lbrakk>w \<in> {x..uM}; dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}; \<And>v. v \<in> {w..uM} \<Longrightarrow> dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
w \<in> {x..uM}
dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}
?v \<in> {w..uM} \<Longrightarrow> dist (q k uM) (q k ?v) \<le> 9 * delta + 4 * QC k

goal (1 subgoal):
 1. \<not> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
proof (cases "\<exists>v \<in> {w..uM}. dist (f v) (p v) \<le> (2^(k+2)-1) * dM")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM
[PROOF STEP]
obtain v where v: "v \<in> {w..uM}" "dist (f v) (p v) \<le> (2^(k+2)-1) * dM"
[PROOF STATE]
proof (prove)
using this:
\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM

goal (1 subgoal):
 1. (\<And>v. \<lbrakk>v \<in> {w..uM}; dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
v \<in> {w..uM}
dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have aux4: "dM * 2 ^ k \<le> infdist (f r) (V k)" if "r \<in> {x..v}" for r
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have *: "q k r \<in> proj_set (f r) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k r \<in> proj_set (f r) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM) \<in> proj_set (f r) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p r \<in> proj_set (f r) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p r) (f r)
 4. geodesic_segment_between {p r--f r} (p r) (f r)
[PROOF STEP]
using aux p[of r] x(3)[of r] that \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k
p r \<in> proj_set (f r) H
r \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)
r \<in> {x..v}
v \<in> {w..uM}
w \<in> {x..uM}

goal (4 subgoals):
 1. p r \<in> proj_set (f r) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p r) (f r)
 4. geodesic_segment_between {p r--f r} (p r) (f r)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k r \<in> proj_set (f r) (V k)

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM))
[PROOF STEP]
using proj_setD(2)[OF *]
[PROOF STATE]
proof (prove)
using this:
dist (f r) (q k r) = infdist (f r) (V k)

goal (1 subgoal):
 1. infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM))
[PROOF STEP]
unfolding q_def
[PROOF STATE]
proof (prove)
using this:
dist (f r) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM)) = infdist (f r) (V k)

goal (1 subgoal):
 1. infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM))

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
infdist (f r) (V k) = dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM))

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "... = abs(dist (p r) (f r) - (2 ^ k - 1) * dM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM)) = \<bar>dist (p r) (f r) - (2 ^ k - 1) * dM\<bar>
[PROOF STEP]
apply (rule geodesic_segment_param(7)[where ?y = "f r"])
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. geodesic_segment_between {p r--f r} (p r) (f r)
 2. dist (p r) (f r) \<in> {0..dist (p r) (f r)}
 3. (2 ^ k - 1) * dM \<in> {0..dist (p r) (f r)}
[PROOF STEP]
using x(3)[of r] \<open>r \<in> {x..v}\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> aux
[PROOF STATE]
proof (prove)
using this:
r \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)
r \<in> {x..v}
v \<in> {w..uM}
w \<in> {x..uM}
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (3 subgoals):
 1. geodesic_segment_between {p r--f r} (p r) (f r)
 2. dist (p r) (f r) \<in> {0..dist (p r) (f r)}
 3. (2 ^ k - 1) * dM \<in> {0..dist (p r) (f r)}
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM)) = \<bar>dist (p r) (f r) - (2 ^ k - 1) * dM\<bar>

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (geodesic_segment_param {p r--f r} (p r) (dist (p r) (f r))) (geodesic_segment_param {p r--f r} (p r) ((2 ^ k - 1) * dM)) = \<bar>dist (p r) (f r) - (2 ^ k - 1) * dM\<bar>

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "... = dist (f r) (p r) - (2 ^ k - 1) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<bar>dist (p r) (f r) - (2 ^ k - 1) * dM\<bar> = dist (f r) (p r) - (2 ^ k - 1) * dM
[PROOF STEP]
using x(3)[of r] \<open>r \<in> {x..v}\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> aux
[PROOF STATE]
proof (prove)
using this:
r \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)
r \<in> {x..v}
v \<in> {w..uM}
w \<in> {x..uM}
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (1 subgoal):
 1. \<bar>dist (p r) (f r) - (2 ^ k - 1) * dM\<bar> = dist (f r) (p r) - (2 ^ k - 1) * dM
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
\<bar>dist (p r) (f r) - (2 ^ k - 1) * dM\<bar> = dist (f r) (p r) - (2 ^ k - 1) * dM

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
infdist (f r) (V k) = dist (f r) (p r) - (2 ^ k - 1) * dM
[PROOF STEP]
have "dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dM"
[PROOF STATE]
proof (prove)
using this:
infdist (f r) (V k) = dist (f r) (p r) - (2 ^ k - 1) * dM

goal (1 subgoal):
 1. dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dM
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dM

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dM

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
have "(2^(k+1) - 1) * dM \<le> dist (f r) (p r)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)
[PROOF STEP]
apply (rule x(3))
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. r \<in> {x..uM}
[PROOF STEP]
using \<open>r \<in> {x..v}\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
r \<in> {x..v}
v \<in> {w..uM}
w \<in> {x..uM}

goal (1 subgoal):
 1. r \<in> {x..uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dM
(2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)
[PROOF STEP]
have "(2^(k+1) - 1) * dM \<le> infdist (f r) (V k) + (2 ^ k - 1) * dM"
[PROOF STATE]
proof (prove)
using this:
dist (f r) (p r) = infdist (f r) (V k) + (2 ^ k - 1) * dM
(2 ^ (k + 1) - 1) * dM \<le> dist (f r) (p r)

goal (1 subgoal):
 1. (2 ^ (k + 1) - 1) * dM \<le> infdist (f r) (V k) + (2 ^ k - 1) * dM
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(2 ^ (k + 1) - 1) * dM \<le> infdist (f r) (V k) + (2 ^ k - 1) * dM

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(2 ^ (k + 1) - 1) * dM \<le> infdist (f r) (V k) + (2 ^ k - 1) * dM
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(2 ^ (k + 1) - 1) * dM \<le> infdist (f r) (V k) + (2 ^ k - 1) * dM

goal (1 subgoal):
 1. dM * 2 ^ k \<le> infdist (f r) (V k)
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dM * 2 ^ k \<le> infdist (f r) (V k)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?r \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f ?r) (V k)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "infdist (f v) H \<le> (2^(k+2)-1) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f v) H \<le> (2 ^ (k + 2) - 1) * dM
[PROOF STEP]
using v proj_setD(2)[OF p[of v]]
[PROOF STATE]
proof (prove)
using this:
v \<in> {w..uM}
dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM
dist (f v) (p v) = infdist (f v) H

goal (1 subgoal):
 1. infdist (f v) H \<le> (2 ^ (k + 2) - 1) * dM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
infdist (f v) H \<le> (2 ^ (k + 2) - 1) * dM

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "dist closestm v \<le> lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist closestm v \<le> lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H)
[PROOF STEP]
apply (rule D)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. closestm \<in> {um..ym}
 2. v \<in> {yM..uM}
[PROOF STEP]
using \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close> \<open>closestm \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>um \<in> {a..z}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {w..uM}
w \<in> {x..uM}
x \<in> {yM..uM}
yM \<in> {z..uM}
uM \<in> {z..b}
z \<in> {a..b}
closestm \<in> {um..ym}
ym \<in> {um..z}
um \<in> {a..z}

goal (2 subgoals):
 1. closestm \<in> {um..ym}
 2. v \<in> {yM..uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist closestm v \<le> lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist closestm v \<le> lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> lambda * (dm + 1 * (L + C + 2 * delta) + (2^(k+2)-1) * dM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H) \<le> lambda * (dm + 1 * (L + C + 2 * delta) + (2 ^ (k + 2) - 1) * dM)
[PROOF STEP]
apply (intro mono_intros \<open>infdist (f v) H \<le> (2^(k+2)-1) * dM\<close>)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. infdist (f closestm) H \<le> dm
 2. 0 \<le> L + C + 2 * delta
 3. 1 \<le> 1
 4. 0 \<le> lambda
[PROOF STEP]
using dm_def \<open>lambda \<ge> 1\<close> \<open>L > 0\<close> \<open>C \<ge> 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dm = infdist (f closestm) H
1 \<le> lambda
0 < L
0 \<le> C
0 < delta

goal (4 subgoals):
 1. infdist (f closestm) H \<le> dm
 2. 0 \<le> L + C + 2 * delta
 3. 1 \<le> 1
 4. 0 \<le> lambda
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H) \<le> lambda * (dm + 1 * (L + C + 2 * delta) + (2 ^ (k + 2) - 1) * dM)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * (infdist (f closestm) H + (L + C + 2 * delta) + infdist (f v) H) \<le> lambda * (dm + 1 * (L + C + 2 * delta) + (2 ^ (k + 2) - 1) * dM)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> lambda * (dM + 2^k * (((L + 2 * delta)/D) * dM) + (2^(k+2)-1) * dM)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (dm + 1 * (L + C + 2 * delta) + (2 ^ (k + 2) - 1) * dM) \<le> lambda * (dM + 2 ^ k * ((L + 2 * delta) / D * dM) + (2 ^ (k + 2) - 1) * dM)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. dm \<le> dM
 2. 1 \<le> 2 ^ k
 3. L + C + 2 * delta \<le> (L + 2 * delta) / D * dM
 4. 0 \<le> 2 ^ k
 5. 0 \<le> L + C + 2 * delta
 6. 0 \<le> lambda
[PROOF STEP]
using I \<open>lambda \<ge> 1\<close> \<open>C \<ge> 0\<close> \<open>delta > 0\<close> \<open>L > 0\<close> aux2
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
1 \<le> lambda
0 \<le> C
0 < delta
0 < L
L + C + 2 * delta \<le> (L + 2 * delta) / D * dM

goal (6 subgoals):
 1. dm \<le> dM
 2. 1 \<le> 2 ^ k
 3. L + C + 2 * delta \<le> (L + 2 * delta) / D * dM
 4. 0 \<le> 2 ^ k
 5. 0 \<le> L + C + 2 * delta
 6. 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda * (dm + 1 * (L + C + 2 * delta) + (2 ^ (k + 2) - 1) * dM) \<le> lambda * (dM + 2 ^ k * ((L + 2 * delta) / D * dM) + (2 ^ (k + 2) - 1) * dM)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda * (dm + 1 * (L + C + 2 * delta) + (2 ^ (k + 2) - 1) * dM) \<le> lambda * (dM + 2 ^ k * ((L + 2 * delta) / D * dM) + (2 ^ (k + 2) - 1) * dM)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = lambda * 2^k * (4 + (L + 2 * delta)/D) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda * (dM + 2 ^ k * ((L + 2 * delta) / D * dM) + (2 ^ (k + 2) - 1) * dM) = lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dM
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
lambda * (dM + 2 ^ k * ((L + 2 * delta) / D * dM) + (2 ^ (k + 2) - 1) * dM) = lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dM

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist closestm v \<le> lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dM
[PROOF STEP]
have *: "dist closestm v / (lambda * (4 + (L + 2 * delta)/D)) \<le> 2^k * dM"
[PROOF STATE]
proof (prove)
using this:
dist closestm v \<le> lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dM

goal (1 subgoal):
 1. dist closestm v / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dM
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> \<open>L > 0\<close> \<open>D > 0\<close> \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dist closestm v \<le> lambda * 2 ^ k * (4 + (L + 2 * delta) / D) * dM
1 \<le> lambda
0 < L
0 < D
0 < delta

goal (1 subgoal):
 1. dist closestm v / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dM
[PROOF STEP]
by (simp add: divide_simps, simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist closestm v / (lambda * (4 + (L + 2 * delta) / D)) \<le> 2 ^ k * dM

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "exp(- (alpha * (2^k * dM) * ln 2 / (5 * delta))) \<le> exp(-(alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta)/D))) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta)))
[PROOF STEP]
apply (intro mono_intros *)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. 0 \<le> alpha
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
[PROOF STEP]
using alphaaux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < alpha
alpha \<le> 1
0 < delta

goal (3 subgoals):
 1. 0 \<le> alpha
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = exp(-K * dist closestm v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- K * dist closestm v)
[PROOF STEP]
unfolding K_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * dist closestm v)
[PROOF STEP]
by (simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- K * dist closestm v)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (dist closestm v / (lambda * (4 + (L + 2 * delta) / D))) * ln 2 / (5 * delta))) = exp (- K * dist closestm v)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = exp(-K * (v - closestm))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- K * dist closestm v) = exp (- K * (v - closestm))
[PROOF STEP]
unfolding dist_real_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- K * \<bar>closestm - v\<bar>) = exp (- K * (v - closestm))
[PROOF STEP]
using \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>ym \<in> {um..z}\<close> \<open>closestm \<in> {um..ym}\<close> \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {w..uM}
w \<in> {x..uM}
x \<in> {yM..uM}
yM \<in> {z..uM}
ym \<in> {um..z}
closestm \<in> {um..ym}
0 < K

goal (1 subgoal):
 1. exp (- K * \<bar>closestm - v\<bar>) = exp (- K * (v - closestm))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
exp (- K * dist closestm v) = exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (v - closestm))
[PROOF STEP]
have "exp(- (alpha * (2^k * dM) * ln 2 / (5 * delta))) \<le> exp(-K * (v - closestm))"
[PROOF STATE]
proof (prove)
using this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (v - closestm))

goal (1 subgoal):
 1. exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (v - closestm))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (v - closestm))
[PROOF STEP]
have "K * (v - x) * exp(- (alpha * (2^k * dM) * ln 2 / (5 * delta))) \<le> K * (v - x) * exp(-K * (v - closestm))"
[PROOF STATE]
proof (prove)
using this:
exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (v - closestm))

goal (1 subgoal):
 1. K * (v - x) * exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> K * (v - x) * exp (- K * (v - closestm))
[PROOF STEP]
apply (rule mult_left_mono)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> K * (v - x)
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
v \<in> {w..uM}
w \<in> {x..uM}
0 < K

goal (1 subgoal):
 1. 0 \<le> K * (v - x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
K * (v - x) * exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> K * (v - x) * exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
K * (v - x) * exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> K * (v - x) * exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = ((1 + K * (v - x)) - 1) * exp(- K * (v - closestm))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. K * (v - x) * exp (- K * (v - closestm)) = (1 + K * (v - x) - 1) * exp (- K * (v - closestm))
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
K * (v - x) * exp (- K * (v - closestm)) = (1 + K * (v - x) - 1) * exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
K * (v - x) * exp (- K * (v - closestm)) = (1 + K * (v - x) - 1) * exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (exp (K * (v - x)) - 1) * exp(-K * (v - closestm))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (1 + K * (v - x) - 1) * exp (- K * (v - closestm)) \<le> (exp (K * (v - x)) - 1) * exp (- K * (v - closestm))
[PROOF STEP]
by (intro mono_intros, auto)
[PROOF STATE]
proof (state)
this:
(1 + K * (v - x) - 1) * exp (- K * (v - closestm)) \<le> (exp (K * (v - x)) - 1) * exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(1 + K * (v - x) - 1) * exp (- K * (v - closestm)) \<le> (exp (K * (v - x)) - 1) * exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = exp(-K * (x - closestm)) - exp(-K * (v - closestm))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (exp (K * (v - x)) - 1) * exp (- K * (v - closestm)) = exp (- K * (x - closestm)) - exp (- K * (v - closestm))
[PROOF STEP]
by (simp add: algebra_simps mult_exp_exp)
[PROOF STATE]
proof (state)
this:
(exp (K * (v - x)) - 1) * exp (- K * (v - closestm)) = exp (- K * (x - closestm)) - exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(exp (K * (v - x)) - 1) * exp (- K * (v - closestm)) = exp (- K * (x - closestm)) - exp (- K * (v - closestm))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> exp(-K * (x - closestm)) - exp(-K * (uM - um))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exp (- K * (x - closestm)) - exp (- K * (v - closestm)) \<le> exp (- K * (x - closestm)) - exp (- K * (uM - um))
[PROOF STEP]
using \<open>K > 0\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>ym \<in> {um..z}\<close> \<open>closestm \<in> {um..ym}\<close>
[PROOF STATE]
proof (prove)
using this:
0 < K
v \<in> {w..uM}
w \<in> {x..uM}
x \<in> {yM..uM}
yM \<in> {z..uM}
ym \<in> {um..z}
closestm \<in> {um..ym}

goal (1 subgoal):
 1. exp (- K * (x - closestm)) - exp (- K * (v - closestm)) \<le> exp (- K * (x - closestm)) - exp (- K * (uM - um))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
exp (- K * (x - closestm)) - exp (- K * (v - closestm)) \<le> exp (- K * (x - closestm)) - exp (- K * (uM - um))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
K * (v - x) * exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (x - closestm)) - exp (- K * (uM - um))
[PROOF STEP]
have B: "(v - x) * exp(- alpha * 2^k * dM * ln 2 / (5 * delta)) \<le>
                                  (exp(-K * (x - closestm)) - exp(-K * (uM - um)))/K"
[PROOF STATE]
proof (prove)
using this:
K * (v - x) * exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (x - closestm)) - exp (- K * (uM - um))

goal (1 subgoal):
 1. (v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)) \<le> (exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K
[PROOF STEP]
using \<open>K > 0\<close>
[PROOF STATE]
proof (prove)
using this:
K * (v - x) * exp (- (alpha * (2 ^ k * dM) * ln 2 / (5 * delta))) \<le> exp (- K * (x - closestm)) - exp (- K * (uM - um))
0 < K

goal (1 subgoal):
 1. (v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)) \<le> (exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K
[PROOF STEP]
by (auto simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
(v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)) \<le> (exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
text \<open>The projections of $f(v)$ and $f(x)$ on the cylinder $V_k$ are well separated,
              by construction. This implies that $v$ and $x$ themselves are well separated.\<close>
[PROOF STATE]
proof (state)
this:
(v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)) \<le> (exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)
[PROOF STEP]
using x
[PROOF STATE]
proof (prove)
using this:
x \<in> {yM..uM}
L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)
?w \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f ?w) (p ?w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> dist (q k uM) (q k v) + dist (q k v) (q k x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k uM) (q k x) \<le> dist (q k uM) (q k v) + dist (q k v) (q k x)
[PROOF STEP]
by (intro mono_intros)
[PROOF STATE]
proof (state)
this:
dist (q k uM) (q k x) \<le> dist (q k uM) (q k v) + dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (q k uM) (q k x) \<le> dist (q k uM) (q k v) + dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (9 * delta + 4 * QC k) + dist (q k v) (q k x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k uM) (q k v) + dist (q k v) (q k x) \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)
[PROOF STEP]
using w(3)[of v] \<open>v \<in> {w..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {w..uM} \<Longrightarrow> dist (q k uM) (q k v) \<le> 9 * delta + 4 * QC k
v \<in> {w..uM}

goal (1 subgoal):
 1. dist (q k uM) (q k v) + dist (q k v) (q k x) \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (q k uM) (q k v) + dist (q k v) (q k x) \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 4 * delta + 7 * QC k \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)
[PROOF STEP]
have "L - 13 * delta + 3 * QC k \<le> dist (q k x) (q k v)"
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC k \<le> 9 * delta + 4 * QC k + dist (q k v) (q k x)

goal (1 subgoal):
 1. L - 13 * delta + 3 * QC k \<le> dist (q k x) (q k v)
[PROOF STEP]
by (simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
L - 13 * delta + 3 * QC k \<le> dist (q k x) (q k v)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 13 * delta + 3 * QC k \<le> dist (q k x) (q k v)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> 3 * QC k + max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (v - x) * exp(-(dM * 2^k - C/2 - QC k) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
proof (cases "k = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
k = 0

goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "dist (q k x) (q k v) \<le> max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (v - x) * exp(-(dM * 2^k - C/2) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
proof (rule geodesic_projection_exp_contracting[where ?G = "V k" and ?f = f])
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. geodesic_segment (V k)
 2. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 3. x \<le> v
 4. q k x \<in> proj_set (f x) (V k)
 5. q k v \<in> proj_set (f v) (V k)
 6. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 7. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
 8. deltaG TYPE('a) < delta
 9. 0 \<le> C
 10. 0 \<le> lambda
[PROOF STEP]
show "geodesic_segment (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment (V k)
[PROOF STEP]
unfolding V_def True
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment (\<Union>g\<in>H. cball g ((2 ^ 0 - 1) * dM))
[PROOF STEP]
using geodesic_segmentI[OF H]
[PROOF STATE]
proof (prove)
using this:
geodesic_segment H

goal (1 subgoal):
 1. geodesic_segment (\<Union>g\<in>H. cball g ((2 ^ 0 - 1) * dM))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
geodesic_segment (V k)

goal (9 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. x \<le> v
 3. q k x \<in> proj_set (f x) (V k)
 4. q k v \<in> proj_set (f v) (V k)
 5. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 6. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
 7. deltaG TYPE('a) < delta
 8. 0 \<le> C
 9. 0 \<le> lambda
[PROOF STEP]
show "x \<le> v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<le> v
[PROOF STEP]
using \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {w..uM}
w \<in> {x..uM}

goal (1 subgoal):
 1. x \<le> v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<le> v

goal (8 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k x \<in> proj_set (f x) (V k)
 3. q k v \<in> proj_set (f v) (V k)
 4. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 5. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
 6. deltaG TYPE('a) < delta
 7. 0 \<le> C
 8. 0 \<le> lambda
[PROOF STEP]
show "q k v \<in> proj_set (f v) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k v \<in> proj_set (f v) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p v--f v} (p v) ((2 ^ k - 1) * dM) \<in> proj_set (f v) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
using aux p[of v] x(3)[of v] \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k
p v \<in> proj_set (f v) H
v \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f v) (p v)
v \<in> {w..uM}
w \<in> {x..uM}

goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k v \<in> proj_set (f v) (V k)

goal (7 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k x \<in> proj_set (f x) (V k)
 3. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 4. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
 5. deltaG TYPE('a) < delta
 6. 0 \<le> C
 7. 0 \<le> lambda
[PROOF STEP]
show "q k x \<in> proj_set (f x) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k x \<in> proj_set (f x) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dM) \<in> proj_set (f x) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
using aux p[of x] x(3)[of x] \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k
p x \<in> proj_set (f x) H
x \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f x) (p x)
w \<in> {x..uM}

goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k x \<in> proj_set (f x) (V k)

goal (6 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 3. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
 4. deltaG TYPE('a) < delta
 5. 0 \<le> C
 6. 0 \<le> lambda
[PROOF STEP]
show "15/2 * delta + C/2 \<le> dM * 2^k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
[PROOF STEP]
using I \<open>delta > 0\<close> \<open>C \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ k
[PROOF STEP]
unfolding QC_def True
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. 15 / 2 * delta + C / 2 \<le> dM * 2 ^ 0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
15 / 2 * delta + C / 2 \<le> dM * 2 ^ k

goal (5 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 3. deltaG TYPE('a) < delta
 4. 0 \<le> C
 5. 0 \<le> lambda
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (4 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 3. 0 \<le> C
 4. 0 \<le> lambda
[PROOF STEP]
show "\<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
using aux4
[PROOF STATE]
proof (prove)
using this:
?r \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f ?r) (V k)

goal (1 subgoal):
 1. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f ?t) (V k)

goal (3 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. 0 \<le> C
 3. 0 \<le> lambda
[PROOF STEP]
show "0 \<le> C" "0 \<le> lambda"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
using \<open>C \<ge> 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> C
1 \<le> lambda

goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> C
0 \<le> lambda

goal (1 subgoal):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
[PROOF STEP]
show "dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C" if "x1 \<in> {x..v}" "x2 \<in> {x..v}" for x1 x2
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
using quasi_isometry_onD(1)[OF assms(2)] that \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> {a..b}; ?y \<in> {a..b}\<rbrakk> \<Longrightarrow> dist (f ?x) (f ?y) \<le> lambda * dist ?x ?y + C
x1 \<in> {x..v}
x2 \<in> {x..v}
v \<in> {w..uM}
w \<in> {x..uM}
x \<in> {yM..uM}
yM \<in> {z..uM}
uM \<in> {z..b}
z \<in> {a..b}

goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x1.0 \<in> {x..v}; ?x2.0 \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f ?x1.0) (f ?x2.0) \<le> lambda * dist ?x1.0 ?x2.0 + C

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (q k x) (q k v) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. k = 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
 2. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (q k x) (q k v) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (q k x) (q k v) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
unfolding QC_def True
[PROOF STATE]
proof (prove)
using this:
dist (q 0 x) (q 0 v) \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ 0 - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q 0 x) (q 0 v) \<le> 3 * (if 0 = 0 then 0 else 8 * delta) + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ 0 - C / 2 - (if 0 = 0 then 0 else 8 * delta)) * ln 2 / (5 * delta)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
k \<noteq> 0

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "dist (q k x) (q k v) \<le> 2 * QC k + 8 * delta + max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (v - x) * exp(-(dM * 2^k - QC k - C/2) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
proof (rule quasiconvex_projection_exp_contracting[where ?G = "V k" and ?f = f])
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. quasiconvex (QC k) (V k)
 2. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 3. x \<le> v
 4. q k x \<in> proj_set (f x) (V k)
 5. q k v \<in> proj_set (f v) (V k)
 6. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 7. 15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k
 8. deltaG TYPE('a) < delta
 9. 0 \<le> C
 10. 0 \<le> lambda
[PROOF STEP]
show "quasiconvex (QC k) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. quasiconvex (QC k) (V k)
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
quasiconvex (QC k) (V k)

goal (9 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. x \<le> v
 3. q k x \<in> proj_set (f x) (V k)
 4. q k v \<in> proj_set (f v) (V k)
 5. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 6. 15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k
 7. deltaG TYPE('a) < delta
 8. 0 \<le> C
 9. 0 \<le> lambda
[PROOF STEP]
show "x \<le> v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<le> v
[PROOF STEP]
using \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
v \<in> {w..uM}
w \<in> {x..uM}

goal (1 subgoal):
 1. x \<le> v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<le> v

goal (8 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k x \<in> proj_set (f x) (V k)
 3. q k v \<in> proj_set (f v) (V k)
 4. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 5. 15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k
 6. deltaG TYPE('a) < delta
 7. 0 \<le> C
 8. 0 \<le> lambda
[PROOF STEP]
show "q k v \<in> proj_set (f v) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k v \<in> proj_set (f v) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p v--f v} (p v) ((2 ^ k - 1) * dM) \<in> proj_set (f v) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
using aux p[of v] x(3)[of v] \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k
p v \<in> proj_set (f v) H
v \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f v) (p v)
v \<in> {w..uM}
w \<in> {x..uM}

goal (4 subgoals):
 1. p v \<in> proj_set (f v) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p v) (f v)
 4. geodesic_segment_between {p v--f v} (p v) (f v)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k v \<in> proj_set (f v) (V k)

goal (7 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. q k x \<in> proj_set (f x) (V k)
 3. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 4. 15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k
 5. deltaG TYPE('a) < delta
 6. 0 \<le> C
 7. 0 \<le> lambda
[PROOF STEP]
show "q k x \<in> proj_set (f x) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k x \<in> proj_set (f x) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p x--f x} (p x) ((2 ^ k - 1) * dM) \<in> proj_set (f x) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
using aux p[of x] x(3)[of x] \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k
p x \<in> proj_set (f x) H
x \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f x) (p x)
w \<in> {x..uM}

goal (4 subgoals):
 1. p x \<in> proj_set (f x) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> dist (p x) (f x)
 4. geodesic_segment_between {p x--f x} (p x) (f x)
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k x \<in> proj_set (f x) (V k)

goal (6 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 3. 15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k
 4. deltaG TYPE('a) < delta
 5. 0 \<le> C
 6. 0 \<le> lambda
[PROOF STEP]
show "15/2 * delta + QC k + C/2 \<le> dM * 2^k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k
[PROOF STEP]
apply (rule order_trans[of _ dM])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 15 / 2 * delta + QC k + C / 2 \<le> dM
 2. dM \<le> dM * 2 ^ k
[PROOF STEP]
using I \<open>delta > 0\<close> \<open>C \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (2 subgoals):
 1. 15 / 2 * delta + QC k + C / 2 \<le> dM
 2. dM \<le> dM * 2 ^ k
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (2 subgoals):
 1. 15 / 2 * delta + (if k = 0 then 0 else 8 * delta) + C / 2 \<le> dM
 2. dM \<le> dM * 2 ^ k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
15 / 2 * delta + QC k + C / 2 \<le> dM * 2 ^ k

goal (5 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 3. deltaG TYPE('a) < delta
 4. 0 \<le> C
 5. 0 \<le> lambda
[PROOF STEP]
show "deltaG TYPE('a) < delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deltaG TYPE('a) < delta
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
deltaG TYPE('a) < delta

goal (4 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
 3. 0 \<le> C
 4. 0 \<le> lambda
[PROOF STEP]
show "\<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
using aux4
[PROOF STATE]
proof (prove)
using this:
?r \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f ?r) (V k)

goal (1 subgoal):
 1. \<And>t. t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f t) (V k)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?t \<in> {x..v} \<Longrightarrow> dM * 2 ^ k \<le> infdist (f ?t) (V k)

goal (3 subgoals):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
 2. 0 \<le> C
 3. 0 \<le> lambda
[PROOF STEP]
show "0 \<le> C" "0 \<le> lambda"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
using \<open>C \<ge> 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> C
1 \<le> lambda

goal (1 subgoal):
 1. 0 \<le> C &&& 0 \<le> lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> C
0 \<le> lambda

goal (1 subgoal):
 1. \<And>xa y. \<lbrakk>xa \<in> {x..v}; y \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f xa) (f y) \<le> lambda * dist xa y + C
[PROOF STEP]
show "dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C" if "x1 \<in> {x..v}" "x2 \<in> {x..v}" for x1 x2
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
using quasi_isometry_onD(1)[OF assms(2)] that \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>uM \<in> {z..b}\<close> \<open>z \<in> {a..b}\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> {a..b}; ?y \<in> {a..b}\<rbrakk> \<Longrightarrow> dist (f ?x) (f ?y) \<le> lambda * dist ?x ?y + C
x1 \<in> {x..v}
x2 \<in> {x..v}
v \<in> {w..uM}
w \<in> {x..uM}
x \<in> {yM..uM}
yM \<in> {z..uM}
uM \<in> {z..b}
z \<in> {a..b}

goal (1 subgoal):
 1. dist (f x1) (f x2) \<le> lambda * dist x1 x2 + C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x1.0 \<in> {x..v}; ?x2.0 \<in> {x..v}\<rbrakk> \<Longrightarrow> dist (f ?x1.0) (f ?x2.0) \<le> lambda * dist ?x1.0 ?x2.0 + C

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (q k x) (q k v) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. k \<noteq> 0 \<Longrightarrow> dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (q k x) (q k v) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
dist (q k x) (q k v) \<le> 2 * QC k + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - QC k - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
unfolding QC_def
[PROOF STATE]
proof (prove)
using this:
dist (q k x) (q k v) \<le> 2 * (if k = 0 then 0 else 8 * delta) + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - (if k = 0 then 0 else 8 * delta) - C / 2) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> 3 * (if k = 0 then 0 else 8 * delta) + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - (if k = 0 then 0 else 8 * delta)) * ln 2 / (5 * delta)))
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
dist (q k x) (q k v) \<le> 2 * (if k = 0 then 0 else 8 * delta) + 8 * delta + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - (if k = 0 then 0 else 8 * delta) - C / 2) * ln 2 / (5 * delta)))
k \<noteq> 0

goal (1 subgoal):
 1. dist (q k x) (q k v) \<le> 3 * (if k = 0 then 0 else 8 * delta) + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - (if k = 0 then 0 else 8 * delta)) * ln 2 / (5 * delta)))
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
dist (q k x) (q k v) \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta + 3 * QC k \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "L - 13 * delta \<le> max (5 * deltaG(TYPE('a))) ((4 * exp(1/2 * ln 2)) * lambda * (v - x) * exp(-(dM * 2^k - C/2 - QC k) * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta + 3 * QC k \<le> 3 * QC k + max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
[PROOF STEP]
have "L - 13 * delta \<le> (4 * exp(1/2 * ln 2)) * lambda * (v - x) * exp(-(dM * 2^k - C/2 - QC k) * ln 2 / (5 * delta))"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))
[PROOF STEP]
using \<open>delta > deltaG(TYPE('a))\<close> Laux
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> max (5 * deltaG TYPE('a)) (4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)))
deltaG TYPE('a) < delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (4 * exp(1/2 * ln 2)) * lambda * (v - x) * exp(-((1-alpha) * D + alpha * 2^k * dM) * ln 2 / (5 * delta))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)) \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dM) * ln 2 / (5 * delta))
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
 4. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x)
[PROOF STEP]
using aux3 \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
(1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
0 < delta
1 \<le> lambda
v \<in> {w..uM}
w \<in> {x..uM}

goal (4 subgoals):
 1. (1 - alpha) * D + alpha * 2 ^ k * dM \<le> dM * 2 ^ k - C / 2 - QC k
 2. 1 \<le> 2
 3. 0 \<le> 5 * delta
 4. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)) \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dM) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (dM * 2 ^ k - C / 2 - QC k) * ln 2 / (5 * delta)) \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dM) * ln 2 / (5 * delta))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = (4 * exp(1/2 * ln 2)) * lambda * (v - x) * (exp(-(1-alpha) * D * ln 2 / (5 * delta)) * exp(-alpha * 2^k * dM * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dM) * ln 2 / (5 * delta)) = 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))
[PROOF STEP]
unfolding mult_exp_exp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dM) * ln 2 / (5 * delta)) = 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- (1 - alpha) * D * ln 2 / (5 * delta) + - alpha * 2 ^ k * dM * ln 2 / (5 * delta))
[PROOF STEP]
by (auto simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (v - x) * exp (- ((1 - alpha) * D + alpha * 2 ^ k * dM) * ln 2 / (5 * delta)) = 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))
[PROOF STEP]
have A: "L - 13 * delta \<le> (4 * exp(1/2 * ln 2)) * lambda * exp(-(1-alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp(-alpha * 2^k * dM * ln 2 / (5 * delta)))"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * (v - x) * (exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))

goal (1 subgoal):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (4 * exp(1/2 * ln 2)) * lambda * exp 0 * ((v - x) * exp 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))) \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((v - x) * exp 0)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. - (1 - alpha) * D * ln 2 / (5 * delta) \<le> 0
 2. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda
 3. - alpha * 2 ^ k * dM * ln 2 / (5 * delta) \<le> 0
 4. 0 \<le> v - x
 5. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0
 6. 0 \<le> (v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close> alphaaux \<open>D > 0\<close> \<open>C \<ge> 0\<close> I
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
v \<in> {w..uM}
w \<in> {x..uM}
0 < alpha
alpha \<le> 1
0 < D
0 \<le> C
D + 4 * C \<le> dM
dm \<le> dM

goal (6 subgoals):
 1. - (1 - alpha) * D * ln 2 / (5 * delta) \<le> 0
 2. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda
 3. - alpha * 2 ^ k * dM * ln 2 / (5 * delta) \<le> 0
 4. 0 \<le> v - x
 5. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0
 6. 0 \<le> (v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))
[PROOF STEP]
by (auto simp add: divide_simps mult_nonpos_nonneg)
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))) \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((v - x) * exp 0)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))) \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((v - x) * exp 0)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = (4 * exp(1/2 * ln 2)) * lambda * (v - x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((v - x) * exp 0) = 4 * exp (1 / 2 * ln 2) * lambda * (v - x)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((v - x) * exp 0) = 4 * exp (1 / 2 * ln 2) * lambda * (v - x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * exp 0 * ((v - x) * exp 0) = 4 * exp (1 / 2 * ln 2) * lambda * (v - x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> 20 * lambda * (v - x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 4 * exp (1 / 2 * ln 2) * lambda * (v - x) \<le> 20 * lambda * (v - x)
[PROOF STEP]
apply (intro mono_intros, approximation 10)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 0 \<le> lambda
 2. 0 \<le> v - x
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close> \<open>v \<in> {w..uM}\<close> \<open>w \<in> {x..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda
v \<in> {w..uM}
w \<in> {x..uM}

goal (2 subgoals):
 1. 0 \<le> lambda
 2. 0 \<le> v - x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
4 * exp (1 / 2 * ln 2) * lambda * (v - x) \<le> 20 * lambda * (v - x)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 13 * delta \<le> 20 * lambda * (v - x)
[PROOF STEP]
have "v - x \<ge> (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 20 * lambda * (v - x)

goal (1 subgoal):
 1. 1 / 4 * delta / lambda \<le> v - x
[PROOF STEP]
using \<open>lambda \<ge> 1\<close> L_def \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 20 * lambda * (v - x)
1 \<le> lambda
L = 18 * delta
0 < delta

goal (1 subgoal):
 1. 1 / 4 * delta / lambda \<le> v - x
[PROOF STEP]
by (simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
1 / 4 * delta / lambda \<le> v - x

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
1 / 4 * delta / lambda \<le> v - x
[PROOF STEP]
have "x - closestm + (1/4) * delta / lambda \<le> v - closestm"
[PROOF STATE]
proof (prove)
using this:
1 / 4 * delta / lambda \<le> v - x

goal (1 subgoal):
 1. x - closestm + 1 / 4 * delta / lambda \<le> v - closestm
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
x - closestm + 1 / 4 * delta / lambda \<le> v - closestm

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
x - closestm + 1 / 4 * delta / lambda \<le> v - closestm

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> uM - um"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. v - closestm \<le> uM - um
[PROOF STEP]
using \<open>closestm \<in> {um..ym}\<close> \<open>v \<in> {w..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
closestm \<in> {um..ym}
v \<in> {w..uM}

goal (1 subgoal):
 1. v - closestm \<le> uM - um
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
v - closestm \<le> uM - um

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
v - closestm \<le> uM - um

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> Suc n * (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
uM - um \<le> real (Suc n) * (1 / 4) * delta / lambda

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
x - closestm + 1 / 4 * delta / lambda \<le> real (Suc n) * (1 / 4) * delta / lambda
[PROOF STEP]
have "x - closestm \<le> n * (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
using this:
x - closestm + 1 / 4 * delta / lambda \<le> real (Suc n) * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. x - closestm \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
unfolding Suc_eq_plus1
[PROOF STATE]
proof (prove)
using this:
x - closestm + 1 / 4 * delta / lambda \<le> real (n + 1) * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. x - closestm \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
by (auto simp add: algebra_simps add_divide_distrib)
[PROOF STATE]
proof (state)
this:
x - closestm \<le> real n * (1 / 4) * delta / lambda

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "L + 4 * delta = ((L + 4 * delta)/(L - 13 * delta)) * (L - 13 * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)
[PROOF STEP]
using Laux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta

goal (1 subgoal):
 1. L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)
[PROOF STEP]
by (simp add: algebra_simps divide_simps)
[PROOF STATE]
proof (state)
this:
L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L + 4 * delta = (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> ((L + 4 * delta)/(L - 13 * delta)) * ((4 * exp(1/2 * ln 2)) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))))
[PROOF STEP]
apply (rule mult_left_mono)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
using A Laux \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta

goal (2 subgoals):
 1. L - 13 * delta \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
by (auto simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
(L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(L + 4 * delta) / (L - 13 * delta) * (L - 13 * delta) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta))))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> ((L + 4 * delta)/(L - 13 * delta)) * ((4 * exp(1/2 * ln 2)) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp(-K * (x - closestm)) - exp(-K * (uM - um)))/K))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K))
[PROOF STEP]
apply (intro mono_intros B)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
using Laux \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
0 < delta
1 \<le> lambda

goal (2 subgoals):
 1. 0 \<le> 4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta))
 2. 0 \<le> (L + 4 * delta) / (L - 13 * delta)
[PROOF STEP]
by (auto simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
(L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((v - x) * exp (- alpha * 2 ^ k * dM * ln 2 / (5 * delta)))) \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K))
[PROOF STEP]
have C: "L + 4 * delta \<le> Kmult * (exp(-K * (x - closestm)) - exp(-K * (uM - um)))"
[PROOF STATE]
proof (prove)
using this:
L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K))

goal (1 subgoal):
 1. L + 4 * delta \<le> Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um)))
[PROOF STEP]
unfolding Kmult_def
[PROOF STATE]
proof (prove)
using this:
L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) * ((exp (- K * (x - closestm)) - exp (- K * (uM - um))) / K))

goal (1 subgoal):
 1. L + 4 * delta \<le> (L + 4 * delta) / (L - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - alpha) * D * ln 2 / (5 * delta)) / K) * (exp (- K * (x - closestm)) - exp (- K * (uM - um)))
[PROOF STEP]
by argo
[PROOF STATE]
proof (state)
this:
L + 4 * delta \<le> Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta)
[PROOF STEP]
apply (rule Rec)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. closestm \<in> {um..ym}
 2. x \<in> {yM..uM}
[PROOF STEP]
using \<open>closestm \<in> {um..ym}\<close> \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
closestm \<in> {um..ym}
x \<in> {yM..uM}
yM \<in> {z..uM}

goal (2 subgoals):
 1. closestm \<in> {um..ym}
 2. x \<in> {yM..uM}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta)

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... \<le> (lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (x - closestm)))) + (Kmult * (exp(-K * (x - closestm)) - exp(-K * (uM-um))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (x - closestm))) + Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um)))
[PROOF STEP]
apply (intro mono_intros C Suc.IH)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. closestm \<in> {a..z}
 2. x \<in> {z..b}
 3. x - closestm \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
using \<open>x \<in> {yM..uM}\<close> \<open>yM \<in> {z..uM}\<close> \<open>um \<in> {a..z}\<close> \<open>closestm \<in> {um..ym}\<close> \<open>ym \<in> {um..z}\<close> \<open>uM \<in> {z..b}\<close> \<open>x - closestm \<le> n * (1/4) * delta / lambda\<close>
[PROOF STATE]
proof (prove)
using this:
x \<in> {yM..uM}
yM \<in> {z..uM}
um \<in> {a..z}
closestm \<in> {um..ym}
ym \<in> {um..z}
uM \<in> {z..b}
x - closestm \<le> real n * (1 / 4) * delta / lambda

goal (3 subgoals):
 1. closestm \<in> {a..z}
 2. x \<in> {z..b}
 3. x - closestm \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (x - closestm))) + Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f closestm) (f x) + (L + 4 * delta) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (x - closestm))) + Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "... = (lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(- K * (uM - um))))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (x - closestm))) + Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um))) = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
unfolding K_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (x - closestm))) + Kmult * (exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (x - closestm)) - exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (uM - um))) = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- (alpha * ln 2 / (5 * (4 + (L + 2 * delta) / D) * delta * lambda)) * (uM - um)))
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (x - closestm))) + Kmult * (exp (- K * (x - closestm)) - exp (- K * (uM - um))) = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (2 subgoals):
 1. \<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
 2. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM)

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
have "\<exists>w\<in>{yM..uM}. (\<forall>r\<in>{w..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f r) (p r)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>w\<in>{yM..uM}. (\<forall>r\<in>{w..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f r) (p r)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
proof (rule bexI[of _ w], auto)
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>r. \<lbrakk>w \<le> r; r \<le> uM\<rbrakk> \<Longrightarrow> (4 * 2 ^ k - 1) * dM \<le> dist (f r) (p r)
 2. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
 3. yM \<le> w
 4. w \<le> uM
[PROOF STEP]
show "w \<le> uM" "yM \<le> w"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. w \<le> uM &&& yM \<le> w
[PROOF STEP]
using \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close>
[PROOF STATE]
proof (prove)
using this:
w \<in> {x..uM}
x \<in> {yM..uM}

goal (1 subgoal):
 1. w \<le> uM &&& yM \<le> w
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
w \<le> uM
yM \<le> w

goal (2 subgoals):
 1. \<And>r. \<lbrakk>w \<le> r; r \<le> uM\<rbrakk> \<Longrightarrow> (4 * 2 ^ k - 1) * dM \<le> dist (f r) (p r)
 2. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
show "(4 * 2 ^ k - 1) * dM \<le> dist (f x) (p x)" if "x \<le> uM" "w \<le> x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (4 * 2 ^ k - 1) * dM \<le> dist (f x) (p x)
[PROOF STEP]
using False \<open>dM \<ge> 0\<close> that
[PROOF STATE]
proof (prove)
using this:
\<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM)
0 \<le> dM
x \<le> uM
w \<le> x

goal (1 subgoal):
 1. (4 * 2 ^ k - 1) * dM \<le> dist (f x) (p x)
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x \<le> uM; w \<le> ?x\<rbrakk> \<Longrightarrow> (4 * 2 ^ k - 1) * dM \<le> dist (f ?x) (p ?x)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "dist (q k uM) (q (k+1) uM) = 2^k * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k uM) (q (k + 1) uM) = 2 ^ k * dM
[PROOF STEP]
unfolding q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (geodesic_segment_param {p uM--f uM} (p uM) ((2 ^ k - 1) * dM)) (geodesic_segment_param {p uM--f uM} (p uM) ((2 ^ (k + 1) - 1) * dM)) = 2 ^ k * dM
[PROOF STEP]
apply (subst geodesic_segment_param(7)[where ?y = "f uM"])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. geodesic_segment_between {p uM--f uM} (p uM) (f uM)
 2. (2 ^ k - 1) * dM \<in> {0..dist (p uM) (f uM)}
 3. (2 ^ (k + 1) - 1) * dM \<in> {0..dist (p uM) (f uM)}
 4. \<bar>(2 ^ k - 1) * dM - (2 ^ (k + 1) - 1) * dM\<bar> = 2 ^ k * dM
[PROOF STEP]
using x(3)[of uM] \<open>x \<in> {yM..uM}\<close> aux
[PROOF STATE]
proof (prove)
using this:
uM \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)
x \<in> {yM..uM}
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (4 subgoals):
 1. geodesic_segment_between {p uM--f uM} (p uM) (f uM)
 2. (2 ^ k - 1) * dM \<in> {0..dist (p uM) (f uM)}
 3. (2 ^ (k + 1) - 1) * dM \<in> {0..dist (p uM) (f uM)}
 4. \<bar>(2 ^ k - 1) * dM - (2 ^ (k + 1) - 1) * dM\<bar> = 2 ^ k * dM
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute, simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (q k uM) (q (k + 1) uM) = 2 ^ k * dM

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "dist (q k w) (q (k+1) w) = 2^k * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k w) (q (k + 1) w) = 2 ^ k * dM
[PROOF STEP]
unfolding q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (geodesic_segment_param {p w--f w} (p w) ((2 ^ k - 1) * dM)) (geodesic_segment_param {p w--f w} (p w) ((2 ^ (k + 1) - 1) * dM)) = 2 ^ k * dM
[PROOF STEP]
apply (subst geodesic_segment_param(7)[where ?y = "f w"])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. geodesic_segment_between {p w--f w} (p w) (f w)
 2. (2 ^ k - 1) * dM \<in> {0..dist (p w) (f w)}
 3. (2 ^ (k + 1) - 1) * dM \<in> {0..dist (p w) (f w)}
 4. \<bar>(2 ^ k - 1) * dM - (2 ^ (k + 1) - 1) * dM\<bar> = 2 ^ k * dM
[PROOF STEP]
using x(3)[of w] \<open>w \<in> {x..uM}\<close> \<open>x \<in> {yM..uM}\<close> aux
[PROOF STATE]
proof (prove)
using this:
w \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f w) (p w)
w \<in> {x..uM}
x \<in> {yM..uM}
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (4 subgoals):
 1. geodesic_segment_between {p w--f w} (p w) (f w)
 2. (2 ^ k - 1) * dM \<in> {0..dist (p w) (f w)}
 3. (2 ^ (k + 1) - 1) * dM \<in> {0..dist (p w) (f w)}
 4. \<bar>(2 ^ k - 1) * dM - (2 ^ (k + 1) - 1) * dM\<bar> = 2 ^ k * dM
[PROOF STEP]
by (auto simp add: metric_space_class.dist_commute, simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (q k w) (q (k + 1) w) = 2 ^ k * dM

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have i: "q k uM \<in> proj_set (q (k+1) uM) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k uM \<in> proj_set (q (k + 1) uM) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p uM--f uM} (p uM) ((2 ^ k - 1) * dM) \<in> proj_set (geodesic_segment_param {p uM--f uM} (p uM) ((2 ^ (k + 1) - 1) * dM)) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening'[of _ "f uM"])
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. p uM \<in> proj_set (f uM) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> (2 ^ (k + 1) - 1) * dM
 4. (2 ^ (k + 1) - 1) * dM \<le> dist (p uM) (f uM)
 5. geodesic_segment_between {p uM--f uM} (p uM) (f uM)
[PROOF STEP]
using p x(3)[of uM] \<open>x \<in> {yM..uM}\<close> aux
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
uM \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)
x \<in> {yM..uM}
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (5 subgoals):
 1. p uM \<in> proj_set (f uM) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> (2 ^ (k + 1) - 1) * dM
 4. (2 ^ (k + 1) - 1) * dM \<le> dist (p uM) (f uM)
 5. geodesic_segment_between {p uM--f uM} (p uM) (f uM)
[PROOF STEP]
by (auto simp add: algebra_simps metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k uM \<in> proj_set (q (k + 1) uM) (V k)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have j: "q k w \<in> proj_set (q (k+1) w) (V k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. q k w \<in> proj_set (q (k + 1) w) (V k)
[PROOF STEP]
unfolding q_def V_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_param {p w--f w} (p w) ((2 ^ k - 1) * dM) \<in> proj_set (geodesic_segment_param {p w--f w} (p w) ((2 ^ (k + 1) - 1) * dM)) (\<Union>g\<in>H. cball g ((2 ^ k - 1) * dM))
[PROOF STEP]
apply (rule proj_set_thickening'[of _ "f w"])
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> (2 ^ (k + 1) - 1) * dM
 4. (2 ^ (k + 1) - 1) * dM \<le> dist (p w) (f w)
 5. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
using p x(3)[of w] \<open>x \<in> {yM..uM}\<close> \<open>w \<in> {x..uM}\<close> aux
[PROOF STATE]
proof (prove)
using this:
p ?x \<in> proj_set (f ?x) H
w \<in> {x..uM} \<Longrightarrow> (2 ^ (k + 1) - 1) * dM \<le> dist (f w) (p w)
x \<in> {yM..uM}
w \<in> {x..uM}
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (5 subgoals):
 1. p w \<in> proj_set (f w) H
 2. 0 \<le> (2 ^ k - 1) * dM
 3. (2 ^ k - 1) * dM \<le> (2 ^ (k + 1) - 1) * dM
 4. (2 ^ (k + 1) - 1) * dM \<le> dist (p w) (f w)
 5. geodesic_segment_between {p w--f w} (p w) (f w)
[PROOF STEP]
by (auto simp add: algebra_simps metric_space_class.dist_commute)
[PROOF STATE]
proof (state)
this:
q k w \<in> proj_set (q (k + 1) w) (V k)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "5 * delta + 2 * QC k \<le> dist (q k uM) (q k w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q k uM) (q k w)
[PROOF STEP]
using w(2)
[PROOF STATE]
proof (prove)
using this:
dist (q k uM) (q k w) \<in> {9 * delta + 4 * QC k - 4 * delta - 2 * QC k..9 * delta + 4 * QC k}

goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q k uM) (q k w)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
5 * delta + 2 * QC k \<le> dist (q k uM) (q k w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
5 * delta + 2 * QC k \<le> dist (q k uM) (q k w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "... \<le> max (5 * deltaG(TYPE('a)) + 2 * QC k)
                                      (dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG(TYPE('a)) + 4 * QC k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q k uM) (q k w) \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)
[PROOF STEP]
by (rule proj_along_quasiconvex_contraction[OF \<open>quasiconvex (QC k) (V k)\<close> i j])
[PROOF STATE]
proof (state)
this:
dist (q k uM) (q k w) \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
5 * delta + 2 * QC k \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)
[PROOF STEP]
have "5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG(TYPE('a)) + 4 * QC k"
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)

goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> max (5 * deltaG TYPE('a) + 2 * QC k) (dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k)
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
[PROOF STEP]
have "0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w)"
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k

goal (1 subgoal):
 1. 0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w)
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
5 * delta + 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w) - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) + 10 * deltaG TYPE('a) + 4 * QC k
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "... = dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - 2^(k+1) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) = dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dM
[PROOF STEP]
by (simp only: \<open>dist (q k w) (q (k+1) w) = 2^k * dM\<close> \<open>dist (q k uM) (q (k+1) uM) = 2^k * dM\<close>, auto)
[PROOF STATE]
proof (state)
this:
dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - dist (q k uM) (q (k + 1) uM) - dist (q k w) (q (k + 1) w) = dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dM

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dM
[PROOF STEP]
have *: "2^(k+1) * dM - 5 * delta - 2 * QC k \<le> dist (q (k+1) uM) (q (k+1) w)"
[PROOF STATE]
proof (prove)
using this:
0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dM

goal (1 subgoal):
 1. 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w)
[PROOF STEP]
using \<open>deltaG(TYPE('a)) < delta\<close>
[PROOF STATE]
proof (prove)
using this:
0 \<le> dist (q (k + 1) uM) (q (k + 1) w) + 5 * delta + 2 * QC k - 2 ^ (k + 1) * dM
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
2 ^ (k + 1) * dM - 5 * delta - 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "L - 4 * delta + 7 * QC (k+1) \<le> 2 * dM - 5 * delta - 2 * QC k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (k + 1) \<le> 2 * dM - 5 * delta - 2 * QC k
[PROOF STEP]
unfolding QC_def L_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 18 * delta - 4 * delta + 7 * (if k + 1 = 0 then 0 else 8 * delta) \<le> 2 * dM - 5 * delta - 2 * (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
using \<open>delta > 0\<close> Laux I \<open>C \<ge> 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L
D + 4 * C \<le> dM
dm \<le> dM
0 \<le> C

goal (1 subgoal):
 1. 18 * delta - 4 * delta + 7 * (if k + 1 = 0 then 0 else 8 * delta) \<le> 2 * dM - 5 * delta - 2 * (if k = 0 then 0 else 8 * delta)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 * dM - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 * dM - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
have "... \<le> 2^(k+1) * dM - 5 * delta - 2 * QC k"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * dM - 5 * delta - 2 * QC k \<le> 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k
[PROOF STEP]
using aux
[PROOF STATE]
proof (prove)
using this:
(2 ^ k - 1) * dM \<le> (2 * 2 ^ k - 1) * dM
0 \<le> 2 * 2 ^ k - 1
dM \<le> dM * 2 ^ k

goal (1 subgoal):
 1. 2 * dM - 5 * delta - 2 * QC k \<le> 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k
[PROOF STEP]
by (auto simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
2 * dM - 5 * delta - 2 * QC k \<le> 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k
[PROOF STEP]
show "L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)"
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
L - 4 * delta + 7 * QC (k + 1) \<le> 2 ^ (k + 1) * dM - 5 * delta - 2 * QC k
2 ^ (k + 1) * dM - 5 * delta - 2 * QC k \<le> dist (q (k + 1) uM) (q (k + 1) w)

goal (1 subgoal):
 1. L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>w\<in>{yM..uM}. (\<forall>r\<in>{w..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f r) (p r)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)

goal (1 subgoal):
 1. \<not> (\<exists>v\<in>{w..uM}. dist (f v) (p v) \<le> (2 ^ (k + 2) - 1) * dM) \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>w\<in>{yM..uM}. (\<forall>r\<in>{w..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f r) (p r)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<exists>w\<in>{yM..uM}. (\<forall>r\<in>{w..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f r) (p r)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) w)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (Suc k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC (Suc k) \<le> dist (q (Suc k) uM) (q (Suc k) x))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (?k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC ?k \<le> dist (q ?k uM) (q ?k x))

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "dM > 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < dM
[PROOF STEP]
using I \<open>delta > 0\<close> \<open>C \<ge> 0\<close> Laux
[PROOF STATE]
proof (prove)
using this:
D + 4 * C \<le> dM
dm \<le> dM
0 < delta
0 \<le> C
18 * delta \<le> L
50 * delta \<le> D
L \<le> D
D \<le> 4 * L

goal (1 subgoal):
 1. 0 < dM
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 < dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "\<exists>k. 2^k > dist (f uM) (p uM)/dM + 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>k. dist (f uM) (p uM) / dM + 1 < 2 ^ k
[PROOF STEP]
by (simp add: real_arch_pow)
[PROOF STATE]
proof (state)
this:
\<exists>k. dist (f uM) (p uM) / dM + 1 < 2 ^ k

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>k. dist (f uM) (p uM) / dM + 1 < 2 ^ k
[PROOF STEP]
obtain k where "2^k > dist (f uM) (p uM)/dM + 1"
[PROOF STATE]
proof (prove)
using this:
\<exists>k. dist (f uM) (p uM) / dM + 1 < 2 ^ k

goal (1 subgoal):
 1. (\<And>k. dist (f uM) (p uM) / dM + 1 < 2 ^ k \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
dist (f uM) (p uM) / dM + 1 < 2 ^ k

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dist (f uM) (p uM) / dM + 1 < 2 ^ k
[PROOF STEP]
have "dist (f uM) (p uM) < (2^k - 1) * dM"
[PROOF STATE]
proof (prove)
using this:
dist (f uM) (p uM) / dM + 1 < 2 ^ k

goal (1 subgoal):
 1. dist (f uM) (p uM) < (2 ^ k - 1) * dM
[PROOF STEP]
using \<open>dM > 0\<close>
[PROOF STATE]
proof (prove)
using this:
dist (f uM) (p uM) / dM + 1 < 2 ^ k
0 < dM

goal (1 subgoal):
 1. dist (f uM) (p uM) < (2 ^ k - 1) * dM
[PROOF STEP]
by (auto simp add: divide_simps algebra_simps)
[PROOF STATE]
proof (state)
this:
dist (f uM) (p uM) < (2 ^ k - 1) * dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
dist (f uM) (p uM) < (2 ^ k - 1) * dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
have "... \<le> (2^(Suc k) - 1) * dM"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 ^ k - 1) * dM \<le> (2 ^ Suc k - 1) * dM
[PROOF STEP]
by (intro mono_intros, auto)
[PROOF STATE]
proof (state)
this:
(2 ^ k - 1) * dM \<le> (2 ^ Suc k - 1) * dM

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
dist (f uM) (p uM) < (2 ^ Suc k - 1) * dM
[PROOF STEP]
have "\<not>((2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM))"
[PROOF STATE]
proof (prove)
using this:
dist (f uM) (p uM) < (2 ^ Suc k - 1) * dM

goal (1 subgoal):
 1. \<not> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<not> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)

goal (1 subgoal):
 1. D + 4 * C \<le> dM \<and> dm \<le> dM \<Longrightarrow> Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)
[PROOF STEP]
show "Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))"
[PROOF STATE]
proof (prove)
using this:
\<not> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
using Ind_k[of k]
[PROOF STATE]
proof (prove)
using this:
\<not> (2 ^ (k + 1) - 1) * dM \<le> dist (f uM) (p uM)
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um))) \<or> (\<exists>x\<in>{yM..uM}. (\<forall>y\<in>{x..uM}. (2 ^ (k + 1) - 1) * dM \<le> dist (f y) (p y)) \<and> L - 4 * delta + 7 * QC k \<le> dist (q k uM) (q k x))

goal (1 subgoal):
 1. Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f um) (f uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (uM - um)))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>?um \<in> {a..z}; ?uM \<in> {z..b}; ?uM - ?um \<le> real ?n1 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f ?um) (f ?uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (?uM - ?um)))

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
text \<open>The main induction is over. To conclude, one should apply its result to the original
  geodesic segment joining the points $f(a)$ and $f(b)$.\<close>
[PROOF STATE]
proof (state)
this:
\<lbrakk>?um \<in> {a..z}; ?uM \<in> {z..b}; ?uM - ?um \<le> real ?n1 * (1 / 4) * delta / lambda\<rbrakk> \<Longrightarrow> Gromov_product_at (f z) (f ?um) (f ?uM) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (?uM - ?um)))

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
obtain n::nat where "(b - a)/((1/4) * delta / lambda) \<le> n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n. (b - a) / (1 / 4 * delta / lambda) \<le> real n \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using real_arch_simple
[PROOF STATE]
proof (prove)
using this:
\<exists>n. ?x \<le> of_nat n

goal (1 subgoal):
 1. (\<And>n. (b - a) / (1 / 4 * delta / lambda) \<le> real n \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
(b - a) / (1 / 4 * delta / lambda) \<le> real n

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(b - a) / (1 / 4 * delta / lambda) \<le> real n
[PROOF STEP]
have "b - a \<le> n * (1/4) * delta / lambda"
[PROOF STATE]
proof (prove)
using this:
(b - a) / (1 / 4 * delta / lambda) \<le> real n

goal (1 subgoal):
 1. b - a \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
(b - a) / (1 / 4 * delta / lambda) \<le> real n
0 < delta
1 \<le> lambda

goal (1 subgoal):
 1. b - a \<le> real n * (1 / 4) * delta / lambda
[PROOF STEP]
by (auto simp add: divide_simps)
[PROOF STATE]
proof (state)
this:
b - a \<le> real n * (1 / 4) * delta / lambda

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "infdist (f z) G \<le> Gromov_product_at (f z) (f a) (f b) + 2 * deltaG(TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infdist (f z) G \<le> Gromov_product_at (f z) (f a) (f b) + 2 * deltaG TYPE('a)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. geodesic_segment_between G (f a) (f b)
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
continuous_on {a..b} f
lambda C -quasi_isometry_on {a..b} f
a \<le> b
geodesic_segment_between G (f a) (f b)
z \<in> {a..b}
deltaG TYPE('a) < delta

goal (1 subgoal):
 1. geodesic_segment_between G (f a) (f b)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
infdist (f z) G \<le> Gromov_product_at (f z) (f a) (f b) + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
infdist (f z) G \<le> Gromov_product_at (f z) (f a) (f b) + 2 * deltaG TYPE('a)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "... \<le> (lambda^2 * (D + 3/2 * L + delta + 11/2 * C) - 2 * delta + Kmult * (1 - exp(-K * (b - a)))) + 2 * delta"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Gromov_product_at (f z) (f a) (f b) + 2 * deltaG TYPE('a) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (b - a))) + 2 * delta
[PROOF STEP]
apply (intro mono_intros Main[OF _ _ \<open>b - a \<le> n * (1/4) * delta / lambda\<close>])
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. a \<in> {a..z}
 2. b \<in> {z..b}
 3. deltaG TYPE('a) \<le> delta
 4. 0 \<le> 2
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
continuous_on {a..b} f
lambda C -quasi_isometry_on {a..b} f
a \<le> b
geodesic_segment_between G (f a) (f b)
z \<in> {a..b}
deltaG TYPE('a) < delta

goal (4 subgoals):
 1. a \<in> {a..z}
 2. b \<in> {z..b}
 3. deltaG TYPE('a) \<le> delta
 4. 0 \<le> 2
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f a) (f b) + 2 * deltaG TYPE('a) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (b - a))) + 2 * delta

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
Gromov_product_at (f z) (f a) (f b) + 2 * deltaG TYPE('a) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (b - a))) + 2 * delta

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "... = lambda^2 * (D + 3/2 * L + delta + 11/2 * C) + Kmult * (1 - exp(-K * (b - a)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (b - a))) + 2 * delta = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - exp (- K * (b - a)))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (b - a))) + 2 * delta = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - exp (- K * (b - a)))

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) - 2 * delta + Kmult * (1 - exp (- K * (b - a))) + 2 * delta = lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - exp (- K * (b - a)))

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "... \<le> lambda^2 * (D + 3/2 * L + delta + 11/2 * C) + Kmult * (1 - 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - exp (- K * (b - a))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - 0)
[PROOF STEP]
apply (intro mono_intros)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 0 \<le> exp (- K * (b - a))
 2. 0 \<le> Kmult
[PROOF STEP]
using \<open>Kmult > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < Kmult

goal (2 subgoals):
 1. 0 \<le> exp (- K * (b - a))
 2. 0 \<le> Kmult
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - exp (- K * (b - a))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - 0)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - exp (- K * (b - a))) \<le> lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - 0)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "... = lambda^2 * (11/2 * C + (3200*exp(-459/50*ln 2)/ln 2 + 83) * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - 0) = lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta)
[PROOF STEP]
unfolding Kmult_def K_def L_def alpha_def D_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (55 * delta + 3 / 2 * (18 * delta) + delta + 11 / 2 * C) + (18 * delta + 4 * delta) / (18 * delta - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - 12 / 100) * (55 * delta) * ln 2 / (5 * delta)) / (12 / 100 * ln 2 / (5 * (4 + (18 * delta + 2 * delta) / (55 * delta)) * delta * lambda))) * (1 - 0) = lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta)
[PROOF STEP]
using \<open>delta > 0\<close> \<open>lambda \<ge> 1\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta
1 \<le> lambda

goal (1 subgoal):
 1. lambda\<^sup>2 * (55 * delta + 3 / 2 * (18 * delta) + delta + 11 / 2 * C) + (18 * delta + 4 * delta) / (18 * delta - 13 * delta) * (4 * exp (1 / 2 * ln 2) * lambda * exp (- (1 - 12 / 100) * (55 * delta) * ln 2 / (5 * delta)) / (12 / 100 * ln 2 / (5 * (4 + (18 * delta + 2 * delta) / (55 * delta)) * delta * lambda))) * (1 - 0) = lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta)
[PROOF STEP]
by (simp add: algebra_simps divide_simps power2_eq_square mult_exp_exp)
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - 0) = lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (D + 3 / 2 * L + delta + 11 / 2 * C) + Kmult * (1 - 0) = lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
have "... \<le> lambda^2 * (11/2 * C + 91 * delta)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta) \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
apply (intro mono_intros, simp add: divide_simps, approximation 14)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. 0 \<le> delta
 2. 0 \<le> lambda\<^sup>2
[PROOF STEP]
using \<open>delta > 0\<close>
[PROOF STATE]
proof (prove)
using this:
0 < delta

goal (2 subgoals):
 1. 0 \<le> delta
 2. 0 \<le> lambda\<^sup>2
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lambda\<^sup>2 * (11 / 2 * C + (3200 * exp (- 459 / 50 * ln 2) / ln 2 + 83) * delta) \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)

goal (1 subgoal):
 1. infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)
[PROOF STEP]
by (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
infdist (f z) G \<le> lambda\<^sup>2 * (11 / 2 * C + 91 * delta)

goal:
No subgoals!
[PROOF STEP]
qed