Theorem: PicardLindelof.FunSpace.dist_iterate_next_apply_le
File: Mathlib/Analysis/ODE/PicardLindelof.lean

tactic: induction' n with n ihn generalizing t
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
n : ℕ
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[n] f₁).toFun t) ((next^[n] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ n / ↑n ! * dist f₁ f₂
state_after: case zero
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[0] f₁).toFun t) ((next^[0] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ 0 / ↑0! * dist f₁ f₂

case succ
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
n : ℕ
ihn :
  ∀ (t : ↑(Icc v.tMin v.tMax)),
    dist ((next^[n] f₁).toFun t) ((next^[n] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ n / ↑n ! * dist f₁ f₂
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[n + 1] f₁).toFun t) ((next^[n + 1] f₂).toFun t) ≤
    (↑v.L * |↑t - ↑v.t₀|) ^ (n + 1) / ↑(n + 1)! * dist f₁ f₂

tactic: rw [pow_zero, Nat.factorial_zero, Nat.cast_one, div_one, one_mul]
state_before: case zero
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[0] f₁).toFun t) ((next^[0] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ 0 / ↑0! * dist f₁ f₂
state_after: case zero
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[0] f₁).toFun t) ((next^[0] f₂).toFun t) ≤ dist f₁ f₂

tactic: exact dist_apply_le_dist f₁ f₂ t
state_before: case zero
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[0] f₁).toFun t) ((next^[0] f₂).toFun t) ≤ dist f₁ f₂
state_after: no goals

tactic: rw [iterate_succ_apply', iterate_succ_apply']
state_before: case succ
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
n : ℕ
ihn :
  ∀ (t : ↑(Icc v.tMin v.tMax)),
    dist ((next^[n] f₁).toFun t) ((next^[n] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ n / ↑n ! * dist f₁ f₂
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[n + 1] f₁).toFun t) ((next^[n + 1] f₂).toFun t) ≤
    (↑v.L * |↑t - ↑v.t₀|) ^ (n + 1) / ↑(n + 1)! * dist f₁ f₂
state_after: case succ
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
n : ℕ
ihn :
  ∀ (t : ↑(Icc v.tMin v.tMax)),
    dist ((next^[n] f₁).toFun t) ((next^[n] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ n / ↑n ! * dist f₁ f₂
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[n] f₁).next.toFun t) ((next^[n] f₂).next.toFun t) ≤
    (↑v.L * |↑t - ↑v.t₀|) ^ (n + 1) / ↑(n + 1)! * dist f₁ f₂

tactic: exact dist_next_apply_le_of_le ihn _
state_before: case succ
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
v : PicardLindelof E
f : v.FunSpace
inst✝ : CompleteSpace E
f₁ f₂ : v.FunSpace
n : ℕ
ihn :
  ∀ (t : ↑(Icc v.tMin v.tMax)),
    dist ((next^[n] f₁).toFun t) ((next^[n] f₂).toFun t) ≤ (↑v.L * |↑t - ↑v.t₀|) ^ n / ↑n ! * dist f₁ f₂
t : ↑(Icc v.tMin v.tMax)
⊢ dist ((next^[n] f₁).next.toFun t) ((next^[n] f₂).next.toFun t) ≤
    (↑v.L * |↑t - ↑v.t₀|) ^ (n + 1) / ↑(n + 1)! * dist f₁ f₂
state_after: no goals