Theorem: conformalAt_iff_differentiableAt_or_differentiableAt_comp_conj
File: Mathlib/Analysis/Complex/RealDeriv.lean

tactic: rw [conformalAt_iff_isConformalMap_fderiv]
state_before: E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
⊢ ConformalAt f z ↔
    (DifferentiableAt ℂ f z ∨ DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)) ∧ fderiv ℝ f z ≠ 0

tactic: rw [isConformalMap_iff_is_complex_or_conj_linear]
state_before: E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
⊢ IsConformalMap (fderiv ℝ f z) ↔
    (DifferentiableAt ℂ f z ∨ DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)) ∧ fderiv ℝ f z ≠ 0

tactic: apply and_congr_left
state_before: E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
⊢ ((∃ map, restrictScalars ℝ map = fderiv ℝ f z) ∨ ∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ∧
      fderiv ℝ f z ≠ 0 ↔
    (DifferentiableAt ℂ f z ∨ DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)) ∧ fderiv ℝ f z ≠ 0

tactic: intro h
state_before: case h
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
⊢ fderiv ℝ f z ≠ 0 →
    (((∃ map, restrictScalars ℝ map = fderiv ℝ f z) ∨ ∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ↔
      DifferentiableAt ℂ f z ∨ DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z))

tactic: have h_diff := h.imp_symm fderiv_zero_of_not_differentiableAt
state_before: case h
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
⊢ ((∃ map, restrictScalars ℝ map = fderiv ℝ f z) ∨ ∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ↔
    DifferentiableAt ℂ f z ∨ DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: apply or_congr
state_before: case h
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f z
⊢ ((∃ map, restrictScalars ℝ map = fderiv ℝ f z) ∨ ∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ↔
    DifferentiableAt ℂ f z ∨ DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: rw [← conj_conj z] at h_diff
state_before: case h.h₂
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f z
⊢ (∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ↔
    DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: rw [differentiableAt_iff_restrictScalars ℝ (h_diff.comp _ conjCle.differentiableAt)]
state_before: case h.h₂
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f (↑(starRingEnd ℂ) (↑(starRingEnd ℂ) z))
⊢ (∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ↔
    DifferentiableAt ℂ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: refine' exists_congr fun g => rfl.congr _
state_before: case h.h₂
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f (↑(starRingEnd ℂ) (↑(starRingEnd ℂ) z))
⊢ (∃ map, restrictScalars ℝ map = comp (fderiv ℝ f z) ↑conjCle) ↔
    ∃ g', restrictScalars ℝ g' = fderiv ℝ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: have : fderiv ℝ conj (conj z) = _ := conjCle.fderiv
state_before: case h.h₂
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f (↑(starRingEnd ℂ) (↑(starRingEnd ℂ) z))
g : ℂ →L[ℂ] ℂ
⊢ comp (fderiv ℝ f z) ↑conjCle = fderiv ℝ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: simp [fderiv.comp _ h_diff conjCle.differentiableAt, this, conj_conj]
state_before: case h.h₂
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f (↑(starRingEnd ℂ) (↑(starRingEnd ℂ) z))
g : ℂ →L[ℂ] ℂ
this : fderiv ℝ (↑(starRingEnd ((fun x => ℂ) z))) (↑(starRingEnd ℂ) z) = ↑conjCle
⊢ comp (fderiv ℝ f z) ↑conjCle = fderiv ℝ (f ∘ ↑(starRingEnd ℂ)) (↑(starRingEnd ℂ) z)

tactic: rw [differentiableAt_iff_restrictScalars ℝ h_diff]
state_before: case h.h₁
E : Type ?u.154957
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z✝ : ℂ
f✝ : ℂ → E
f : ℂ → ℂ
z : ℂ
h : fderiv ℝ f z ≠ 0
h_diff : DifferentiableAt ℝ f z
⊢ (∃ map, restrictScalars ℝ map = fderiv ℝ f z) ↔ DifferentiableAt ℂ f z