Theorem: isConformalMap_iff
File: Mathlib/Analysis/InnerProductSpace/ConformalLinearMap.lean

tactic: constructor
state_before: E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
⊢ IsConformalMap f ↔ ∃ c, 0 < c ∧ ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * ⟪u, v⟫_ℝ
state_after: case mp
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
⊢ IsConformalMap f → ∃ c, 0 < c ∧ ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * ⟪u, v⟫_ℝ

case mpr
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
⊢ (∃ c, 0 < c ∧ ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * ⟪u, v⟫_ℝ) → IsConformalMap f

tactic: rintro ⟨c₁, hc₁, li, rfl⟩
state_before: case mp
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
⊢ IsConformalMap f → ∃ c, 0 < c ∧ ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * ⟪u, v⟫_ℝ
state_after: case mp.intro.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
c₁ : ℝ
hc₁ : c₁ ≠ 0
li : E →ₗᵢ[ℝ] F
⊢ ∃ c, 0 < c ∧ ∀ (u v : E), ⟪(c₁ • li.toContinuousLinearMap) u, (c₁ • li.toContinuousLinearMap) v⟫_ℝ = c * ⟪u, v⟫_ℝ

tactic: refine ⟨c₁ * c₁, mul_self_pos.2 hc₁, fun u v => ?_⟩
state_before: case mp.intro.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
c₁ : ℝ
hc₁ : c₁ ≠ 0
li : E →ₗᵢ[ℝ] F
⊢ ∃ c, 0 < c ∧ ∀ (u v : E), ⟪(c₁ • li.toContinuousLinearMap) u, (c₁ • li.toContinuousLinearMap) v⟫_ℝ = c * ⟪u, v⟫_ℝ
state_after: case mp.intro.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
c₁ : ℝ
hc₁ : c₁ ≠ 0
li : E →ₗᵢ[ℝ] F
u v : E
⊢ ⟪(c₁ • li.toContinuousLinearMap) u, (c₁ • li.toContinuousLinearMap) v⟫_ℝ = c₁ * c₁ * ⟪u, v⟫_ℝ

tactic: simp only [real_inner_smul_left, real_inner_smul_right, mul_assoc, coe_smul',
  coe_toContinuousLinearMap, Pi.smul_apply, inner_map_map]
state_before: case mp.intro.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
c₁ : ℝ
hc₁ : c₁ ≠ 0
li : E →ₗᵢ[ℝ] F
u v : E
⊢ ⟪(c₁ • li.toContinuousLinearMap) u, (c₁ • li.toContinuousLinearMap) v⟫_ℝ = c₁ * c₁ * ⟪u, v⟫_ℝ
state_after: no goals

tactic: rintro ⟨c₁, hc₁, huv⟩
state_before: case mpr
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
⊢ (∃ c, 0 < c ∧ ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * ⟪u, v⟫_ℝ) → IsConformalMap f
state_after: case mpr.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c₁ : ℝ
hc₁ : 0 < c₁
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c₁ * ⟪u, v⟫_ℝ
⊢ IsConformalMap f

tactic: obtain ⟨c, hc, rfl⟩ : ∃ c : ℝ, 0 < c ∧ c₁ = c * c :=
  ⟨√c₁, Real.sqrt_pos.2 hc₁, (Real.mul_self_sqrt hc₁.le).symm⟩
state_before: case mpr.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c₁ : ℝ
hc₁ : 0 < c₁
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c₁ * ⟪u, v⟫_ℝ
⊢ IsConformalMap f
state_after: case mpr.intro.intro.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
⊢ IsConformalMap f

tactic: refine ⟨c, hc.ne', (c⁻¹ • f : E →ₗ[ℝ] F).isometryOfInner fun u v => ?_, ?_⟩
state_before: case mpr.intro.intro.intro.intro
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
⊢ IsConformalMap f
state_after: case mpr.intro.intro.intro.intro.refine_1
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
u v : E
⊢ ⟪(c⁻¹ • ↑f) u, (c⁻¹ • ↑f) v⟫_ℝ = ⟪u, v⟫_ℝ

case mpr.intro.intro.intro.intro.refine_2
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
⊢ f = c • ((c⁻¹ • ↑f).isometryOfInner ⋯).toContinuousLinearMap

tactic: simp only [real_inner_smul_left, real_inner_smul_right, huv, mul_assoc, coe_smul,
  inv_mul_cancel_left₀ hc.ne', LinearMap.smul_apply, ContinuousLinearMap.coe_coe]
state_before: case mpr.intro.intro.intro.intro.refine_1
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
u v : E
⊢ ⟪(c⁻¹ • ↑f) u, (c⁻¹ • ↑f) v⟫_ℝ = ⟪u, v⟫_ℝ
state_after: no goals

tactic: ext1 x
state_before: case mpr.intro.intro.intro.intro.refine_2
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
⊢ f = c • ((c⁻¹ • ↑f).isometryOfInner ⋯).toContinuousLinearMap
state_after: case mpr.intro.intro.intro.intro.refine_2.h
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
x : E
⊢ f x = (c • ((c⁻¹ • ↑f).isometryOfInner ⋯).toContinuousLinearMap) x

tactic: exact (smul_inv_smul₀ hc.ne' (f x)).symm
state_before: case mpr.intro.intro.intro.intro.refine_2.h
E : Type u_1
F : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace ℝ E
inst✝ : InnerProductSpace ℝ F
f : E →L[ℝ] F
c : ℝ
hc : 0 < c
hc₁ : 0 < c * c
huv : ∀ (u v : E), ⟪f u, f v⟫_ℝ = c * c * ⟪u, v⟫_ℝ
x : E
⊢ f x = (c • ((c⁻¹ • ↑f).isometryOfInner ⋯).toContinuousLinearMap) x
state_after: no goals