Theorem: StrictMono.wellFoundedLT
File: Mathlib/Order/WellFounded.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
tactic: have hs' : (f '' s).Nonempty := ⟨f hne.some, _, hne.some_mem, rfl⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
tactic: obtain ⟨x, hx, hex⟩ := WellFounded.min_mem wellFounded_lt (f '' s) hs'
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
y : α
hy : y ∈ s
hlt : y < x
⊢ False
tactic: refine ⟨x, hx, fun y hy hlt ↦ ?_⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
y : α
hy : y ∈ s
hlt : y < x
⊢ False
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
y : α
hy : y ∈ s
hlt : y < x
⊢ f y < ⋯.min (f '' s) hs'
tactic: apply WellFounded.not_lt_min wellFounded_lt (s.image f) hs' (Set.mem_image_of_mem _ hy)
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
y : α
hy : y ∈ s
hlt : y < x
⊢ f y < ⋯.min (f '' s) hs'
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
y : α
hy : y ∈ s
hlt : y < x
⊢ f y < f x
tactic: rw [← hex]
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Preorder α
inst✝¹ : Preorder β
f : α → β
inst✝ : WellFoundedLT β
hf : StrictMono f
s : Set α
hne : s.Nonempty
hs' : (f '' s).Nonempty
x : α
hx : x ∈ s
hex : f x = ⋯.min (f '' s) hs'
y : α
hy : y ∈ s
hlt : y < x
⊢ f y < f x
state_after: no goals
tactic: exact hf hlt