Theorem: contDiff_stereoInvFunAux
File: Mathlib/Geometry/Manifold/Instances/Sphere.lean

tactic: have h₀ : ContDiff ℝ ⊤ fun w : E => ‖w‖ ^ 2 := contDiff_norm_sq ℝ
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)

tactic: have h₁ : ContDiff ℝ ⊤ fun w : E => (‖w‖ ^ 2 + 4)⁻¹ := by
  refine (h₀.add contDiff_const).inv ?_
  intro x
  nlinarith
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)

tactic: have h₂ : ContDiff ℝ ⊤ fun w => (4 : ℝ) • w + (‖w‖ ^ 2 - 4) • v := by
  refine (contDiff_const.smul contDiff_id).add ?_
  exact (h₀.sub contDiff_const).smul contDiff_const
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
h₂ : ContDiff ℝ ⊤ fun w => 4 • w + (‖w‖ ^ 2 - 4) • v
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)

tactic: exact h₁.smul h₂
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
h₂ : ContDiff ℝ ⊤ fun w => 4 • w + (‖w‖ ^ 2 - 4) • v
⊢ ContDiff ℝ ⊤ (stereoInvFunAux v)
state_after: no goals

tactic: refine (h₀.add contDiff_const).inv ?_
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
⊢ ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
⊢ ∀ (x : E), ‖x‖ ^ 2 + 4 ≠ 0

tactic: intro x
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
⊢ ∀ (x : E), ‖x‖ ^ 2 + 4 ≠ 0
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
x : E
⊢ ‖x‖ ^ 2 + 4 ≠ 0

tactic: nlinarith
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
x : E
⊢ ‖x‖ ^ 2 + 4 ≠ 0
state_after: no goals

tactic: refine (contDiff_const.smul contDiff_id).add ?_
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
⊢ ContDiff ℝ ⊤ fun w => 4 • w + (‖w‖ ^ 2 - 4) • v
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
⊢ ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 - 4) • v

tactic: exact (h₀.sub contDiff_const).smul contDiff_const
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
h₀ : ContDiff ℝ ⊤ fun w => ‖w‖ ^ 2
h₁ : ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 + 4)⁻¹
⊢ ContDiff ℝ ⊤ fun w => (‖w‖ ^ 2 - 4) • v
state_after: no goals