Theorem: exists_Ioo_extr_on_Icc
File: Mathlib/Analysis/Calculus/LocalExtr.lean

tactic: have ne : (Icc a b).Nonempty := nonempty_Icc.2 (le_of_lt hab)
state_before: f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: obtain ⟨c, cmem, cle⟩ : ∃ c ∈ Icc a b, ∀ x ∈ Icc a b, f c ≤ f x :=
  isCompact_Icc.exists_forall_le ne hfc
state_before: f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: obtain ⟨C, Cmem, Cge⟩ : ∃ C ∈ Icc a b, ∀ x ∈ Icc a b, f x ≤ f C :=
  isCompact_Icc.exists_forall_ge ne hfc
state_before: case intro.intro
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: by_cases hc : f c = f a
state_before: case intro.intro.intro.intro
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: by_cases hC : f C = f a
state_before: case pos
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: have : ∀ x ∈ Icc a b, f x = f a := fun x hx => le_antisymm (hC ▸ Cge x hx) (hc ▸ cle x hx)
state_before: case pos
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : f C = f a
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: rcases nonempty_Ioo.2 hab with ⟨c', hc'⟩
state_before: case pos
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : f C = f a
this : ∀ (x : ℝ), x ∈ Icc a b → f x = f a
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: refine ⟨c', hc', Or.inl fun x hx ↦ ?_⟩
state_before: case pos.intro
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : f C = f a
this : ∀ (x : ℝ), x ∈ Icc a b → f x = f a
c' : ℝ
hc' : c' ∈ Ioo a b
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: simp only [mem_setOf_eq, this x hx, this c' (Ioo_subset_Icc_self hc'), le_rfl]
state_before: case pos.intro
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : f C = f a
this : ∀ (x : ℝ), x ∈ Icc a b → f x = f a
c' : ℝ
hc' : c' ∈ Ioo a b
x : ℝ
hx : x ∈ Icc a b
⊢ x ∈ {x | (fun x => f c' ≤ f x) x}

tactic: refine' ⟨C, ⟨lt_of_le_of_ne Cmem.1 <| mt _ hC, lt_of_le_of_ne Cmem.2 <| mt _ hC⟩, Or.inr Cge⟩
state_before: case neg
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : ¬f C = f a
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: exacts [fun h => by rw [h], fun h => by rw [h, hfI]]
state_before: case neg.refine'_1
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : ¬f C = f a
⊢ a = C → f C = f a

case neg.refine'_2
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : ¬f C = f a
⊢ C = b → f C = f a

tactic: rw [h]
state_before: f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : ¬f C = f a
h : a = C
⊢ f C = f a

tactic: rw [h, hfI]
state_before: f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : f c = f a
hC : ¬f C = f a
h : C = b
⊢ f C = f a

tactic: refine' ⟨c, ⟨lt_of_le_of_ne cmem.1 <| mt _ hc, lt_of_le_of_ne cmem.2 <| mt _ hc⟩, Or.inl cle⟩
state_before: case neg
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : ¬f c = f a
⊢ ∃ c, c ∈ Ioo a b ∧ IsExtrOn f (Icc a b) c

tactic: exacts [fun h => by rw [h], fun h => by rw [h, hfI]]
state_before: case neg.refine'_1
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : ¬f c = f a
⊢ a = c → f c = f a

case neg.refine'_2
f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : ¬f c = f a
⊢ c = b → f c = f a

tactic: rw [h]
state_before: f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : ¬f c = f a
h : a = c
⊢ f c = f a

tactic: rw [h, hfI]
state_before: f f' : ℝ → ℝ
a b : ℝ
hab : a < b
hfc : ContinuousOn f (Icc a b)
hfI : f a = f b
ne : Set.Nonempty (Icc a b)
c : ℝ
cmem : c ∈ Icc a b
cle : ∀ (x : ℝ), x ∈ Icc a b → f c ≤ f x
C : ℝ
Cmem : C ∈ Icc a b
Cge : ∀ (x : ℝ), x ∈ Icc a b → f x ≤ f C
hc : ¬f c = f a
h : c = b
⊢ f c = f a