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

tactic: have : 2 / (1 - (‖(w : E)‖ ^ 2 + 4)⁻¹ * (‖(w : E)‖ ^ 2 - 4)) * (‖(w : E)‖ ^ 2 + 4)⁻¹ * 4 = 1 := by
  field_simp; ring
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
⊢ stereoToFun v ↑(stereoInvFun hv w) = w
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
⊢ stereoToFun v ↑(stereoInvFun hv w) = w

tactic: field_simp
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
⊢ 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
⊢ 2 * (‖↑w‖ ^ 2 + 4) * 4 = (4 + 4) * (‖↑w‖ ^ 2 + 4)

tactic: ring
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
⊢ 2 * (‖↑w‖ ^ 2 + 4) * 4 = (4 + 4) * (‖↑w‖ ^ 2 + 4)
state_after: no goals

tactic: have h₁ : orthogonalProjection (ℝ ∙ v)ᗮ v = 0 :=
  orthogonalProjection_orthogonalComplement_singleton_eq_zero v
state_before: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w
state_after: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w

tactic: have h₃ : inner v w = (0 : ℝ) := Submodule.mem_orthogonal_singleton_iff_inner_right.mp w.2
state_before: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w
state_after: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
h₃ : ⟪v, ↑w⟫_ℝ = 0
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w

tactic: have h₄ : inner v v = (1 : ℝ) := by simp [real_inner_self_eq_norm_mul_norm, hv]
state_before: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
h₃ : ⟪v, ↑w⟫_ℝ = 0
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w
state_after: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
h₃ : ⟪v, ↑w⟫_ℝ = 0
h₄ : ⟪v, v⟫_ℝ = 1
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w

tactic: simp [h₁, h₃, h₄, ContinuousLinearMap.map_add, ContinuousLinearMap.map_smul, mul_smul]
state_before: case h.e'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
h₃ : ⟪v, ↑w⟫_ℝ = 0
h₄ : ⟪v, v⟫_ℝ = 1
⊢ stereoToFun v ↑(stereoInvFun hv w) = (2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4) • w
state_after: no goals

tactic: simp [real_inner_self_eq_norm_mul_norm, hv]
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
h₁ : (orthogonalProjection (Submodule.span ℝ {v})ᗮ) v = 0
h₃ : ⟪v, ↑w⟫_ℝ = 0
⊢ ⟪v, v⟫_ℝ = 1
state_after: no goals

tactic: simp
state_before: case h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace ℝ E
v : E
hv : ‖v‖ = 1
w : ↥(Submodule.span ℝ {v})ᗮ
this : 2 / (1 - (‖↑w‖ ^ 2 + 4)⁻¹ * (‖↑w‖ ^ 2 - 4)) * (‖↑w‖ ^ 2 + 4)⁻¹ * 4 = 1
⊢ w = 1 • w
state_after: no goals