Theorem: Complex.norm_le_of_forall_mem_frontier_norm_le
File: Mathlib/Analysis/Complex/AbsMax.lean

tactic: rw [closure_eq_self_union_frontier, union_comm, mem_union] at hz
state_before: E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ closure U
⊢ ‖f z‖ ≤ C

tactic: cases' hz with hz hz
state_before: E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ frontier U ∨ z ∈ U
⊢ ‖f z‖ ≤ C

tactic: rcases exists_ne z with ⟨w, hne⟩
state_before: case inr
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
⊢ ‖f z‖ ≤ C

tactic: set e := (lineMap z w : ℂ → E)
state_before: case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
⊢ ‖f z‖ ≤ C

tactic: have hde : Differentiable ℂ e := (differentiable_id.smul_const (w - z)).add_const z
state_before: case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
⊢ ‖f z‖ ≤ C

tactic: have hL : AntilipschitzWith (nndist z w)⁻¹ e := antilipschitzWith_lineMap hne.symm
state_before: case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
⊢ ‖f z‖ ≤ C

tactic: replace hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
state_before: case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
⊢ ‖f z‖ ≤ C

tactic: exact hd.comp hde.diffContOnCl (mapsTo_preimage _ _)
state_before: case hd
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
⊢ DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)

case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
⊢ ‖f z‖ ≤ C

tactic: have h₀ : (0 : ℂ) ∈ e ⁻¹' U := by simpa only [mem_preimage, lineMap_apply_zero]
state_before: case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
⊢ ‖f z‖ ≤ C

tactic: rcases exists_mem_frontier_isMaxOn_norm (hL.bounded_preimage hU) ⟨0, h₀⟩ hd with ⟨ζ, hζU, hζ⟩
state_before: case inr.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
h₀ : 0 ∈ e ⁻¹' U
⊢ ‖f z‖ ≤ C

tactic: calc
  ‖f z‖ = ‖f (e 0)‖ := by simp only [lineMap_apply_zero]
  _ ≤ ‖f (e ζ)‖ := (hζ (subset_closure h₀))
  _ ≤ C := hC _ (hde.continuous.frontier_preimage_subset _ hζU)
state_before: case inr.intro.intro.intro
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
h₀ : 0 ∈ e ⁻¹' U
ζ : ℂ
hζU : ζ ∈ frontier (e ⁻¹' U)
hζ : IsMaxOn (norm ∘ f ∘ e) (closure (e ⁻¹' U)) ζ
⊢ ‖f z‖ ≤ C

tactic: exact hC z hz
state_before: case inl
E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
hd : DiffContOnCl ℂ f U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ frontier U
⊢ ‖f z‖ ≤ C

tactic: simpa only [mem_preimage, lineMap_apply_zero]
state_before: E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
⊢ 0 ∈ e ⁻¹' U

tactic: simp only [lineMap_apply_zero]
state_before: E : Type u
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℂ E
F : Type v
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℂ F
inst✝ : Nontrivial E
f : E → F
U : Set E
hU : Metric.Bounded U
C : ℝ
hC : ∀ (z : E), z ∈ frontier U → ‖f z‖ ≤ C
z : E
hz : z ∈ U
w : E
hne : w ≠ z
e : (a : ℂ) → (fun a => E) a := ↑(lineMap z w)
hde : Differentiable ℂ e
hL : AntilipschitzWith (nndist z w)⁻¹ e
hd : DiffContOnCl ℂ (f ∘ e) (e ⁻¹' U)
h₀ : 0 ∈ e ⁻¹' U
ζ : ℂ
hζU : ζ ∈ frontier (e ⁻¹' U)
hζ : IsMaxOn (norm ∘ f ∘ e) (closure (e ⁻¹' U)) ζ
⊢ ‖f z‖ = ‖f (e 0)‖