Theorem: Complex.liouville_theorem_aux
File: Mathlib/Analysis/Complex/Liouville.lean

tactic: suffices : ∀ c, deriv f c = 0
state_before: E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
z w : ℂ
⊢ f z = f w

tactic: exact is_const_of_deriv_eq_zero hf this z w
state_before: E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
z w : ℂ
this : ∀ (c : ℂ), deriv f c = 0
⊢ f z = f w

case this
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
z w : ℂ
⊢ ∀ (c : ℂ), deriv f c = 0

tactic: clear z w
state_before: case this
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
z w : ℂ
⊢ ∀ (c : ℂ), deriv f c = 0

tactic: intro c
state_before: case this
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
⊢ ∀ (c : ℂ), deriv f c = 0

tactic: obtain ⟨C, C₀, hC⟩ : ∃ C > (0 : ℝ), ∀ z, ‖f z‖ ≤ C := by
  rcases bounded_iff_forall_norm_le.1 hb with ⟨C, hC⟩
  exact
    ⟨max C 1, lt_max_iff.2 (Or.inr zero_lt_one), fun z =>
      (hC (f z) (mem_range_self _)).trans (le_max_left _ _)⟩
state_before: case this
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
c : ℂ
⊢ deriv f c = 0

tactic: refine' norm_le_zero_iff.1 (le_of_forall_le_of_dense fun ε ε₀ => _)
state_before: case this.intro.intro
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
c : ℂ
C : ℝ
C₀ : C > 0
hC : ∀ (z : ℂ), ‖f z‖ ≤ C
⊢ deriv f c = 0

tactic: calc
  ‖deriv f c‖ ≤ C / (C / ε) :=
    norm_deriv_le_of_forall_mem_sphere_norm_le (div_pos C₀ ε₀) hf.diffContOnCl fun z _ => hC z
  _ = ε := div_div_cancel' C₀.lt.ne'
state_before: case this.intro.intro
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
c : ℂ
C : ℝ
C₀ : C > 0
hC : ∀ (z : ℂ), ‖f z‖ ≤ C
ε : ℝ
ε₀ : 0 < ε
⊢ ‖deriv f c‖ ≤ ε

tactic: rcases bounded_iff_forall_norm_le.1 hb with ⟨C, hC⟩
state_before: E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
c : ℂ
⊢ ∃ C, C > 0 ∧ ∀ (z : ℂ), ‖f z‖ ≤ C

tactic: exact
  ⟨max C 1, lt_max_iff.2 (Or.inr zero_lt_one), fun z =>
    (hC (f z) (mem_range_self _)).trans (le_max_left _ _)⟩
state_before: case intro
E : Type u
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℂ E
F : Type v
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℂ F
f : ℂ → F
hf : Differentiable ℂ f
hb : Metric.Bounded (range f)
c : ℂ
C : ℝ
hC : ∀ (x : F), x ∈ range f → ‖x‖ ≤ C
⊢ ∃ C, C > 0 ∧ ∀ (z : ℂ), ‖f z‖ ≤ C