Theorem: Set.Finite.exists_maximal_wrt
File: Mathlib/Data/Set/Finite.lean

tactic: exact absurd hs not_nonempty_empty
state_before: case H0
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
inst✝ : PartialOrder β
f : α → β
s : Set α
hs : ∅.Nonempty
⊢ ∃ a ∈ ∅, ∀ a' ∈ ∅, f a ≤ f a' → f a = f a'
state_after: no goals

tactic: rcases s.eq_empty_or_nonempty with h | h
state_before: case H1
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'
state_after: case H1.inl
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s = ∅
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'

case H1.inr
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s.Nonempty
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'

tactic: rcases ih h with ⟨b, hb, ih⟩
state_before: case H1.inr
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s.Nonempty
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'
state_after: case H1.inr.intro.intro
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'

tactic: by_cases h : f b ≤ f a
state_before: case H1.inr.intro.intro
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'
state_after: case pos
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : f b ≤ f a
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'

case neg
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : ¬f b ≤ f a
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'

tactic: use a
state_before: case H1.inl
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s = ∅
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'
state_after: case h
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s = ∅
⊢ a ∈ insert a s ∧ ∀ a' ∈ insert a s, f a ≤ f a' → f a = f a'

tactic: simp [h]
state_before: case h
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝ : s.Finite
ih : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h : s = ∅
⊢ a ∈ insert a s ∧ ∀ a' ∈ insert a s, f a ≤ f a' → f a = f a'
state_after: no goals

tactic: refine ⟨a, Set.mem_insert _ _, fun c hc hac => le_antisymm hac ?_⟩
state_before: case pos
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : f b ≤ f a
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'
state_after: case pos
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : f b ≤ f a
c : α
hc : c ∈ insert a s
hac : f a ≤ f c
⊢ f c ≤ f a

tactic: rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
state_before: case pos
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : f b ≤ f a
c : α
hc : c ∈ insert a s
hac : f a ≤ f c
⊢ f c ≤ f a
state_after: case pos.inl
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ s : Set α
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
c : α
his : c ∉ s
hs : (insert c s).Nonempty
h : f b ≤ f c
hc : c ∈ insert c s
hac : f c ≤ f c
⊢ f c ≤ f c

case pos.inr
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : f b ≤ f a
c : α
hc : c ∈ insert a s
hac : f a ≤ f c
hcs : c ∈ s
⊢ f c ≤ f a

tactic: rfl
state_before: case pos.inl
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ s : Set α
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
c : α
his : c ∉ s
hs : (insert c s).Nonempty
h : f b ≤ f c
hc : c ∈ insert c s
hac : f c ≤ f c
⊢ f c ≤ f c
state_after: no goals

tactic: rwa [← ih c hcs (le_trans h hac)]
state_before: case pos.inr
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : f b ≤ f a
c : α
hc : c ∈ insert a s
hac : f a ≤ f c
hcs : c ∈ s
⊢ f c ≤ f a
state_after: no goals

tactic: refine ⟨b, Set.mem_insert_of_mem _ hb, fun c hc hbc => ?_⟩
state_before: case neg
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : ¬f b ≤ f a
⊢ ∃ a_1 ∈ insert a s, ∀ a' ∈ insert a s, f a_1 ≤ f a' → f a_1 = f a'
state_after: case neg
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : ¬f b ≤ f a
c : α
hc : c ∈ insert a s
hbc : f b ≤ f c
⊢ f b = f c

tactic: rcases Set.mem_insert_iff.1 hc with (rfl | hcs)
state_before: case neg
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : ¬f b ≤ f a
c : α
hc : c ∈ insert a s
hbc : f b ≤ f c
⊢ f b = f c
state_after: case neg.inl
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ s : Set α
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
c : α
hbc : f b ≤ f c
his : c ∉ s
hs : (insert c s).Nonempty
h : ¬f b ≤ f c
hc : c ∈ insert c s
⊢ f b = f c

case neg.inr
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : ¬f b ≤ f a
c : α
hc : c ∈ insert a s
hbc : f b ≤ f c
hcs : c ∈ s
⊢ f b = f c

tactic: exact (h hbc).elim
state_before: case neg.inl
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ s : Set α
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
c : α
hbc : f b ≤ f c
his : c ∉ s
hs : (insert c s).Nonempty
h : ¬f b ≤ f c
hc : c ∈ insert c s
⊢ f b = f c
state_after: no goals

tactic: exact ih c hcs hbc
state_before: case neg.inr
α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝¹ t : Set α
inst✝ : PartialOrder β
f : α → β
s✝ : Set α
a : α
s : Set α
his : a ∉ s
h✝¹ : s.Finite
ih✝ : s.Nonempty → ∃ a ∈ s, ∀ a' ∈ s, f a ≤ f a' → f a = f a'
hs : (insert a s).Nonempty
h✝ : s.Nonempty
b : α
hb : b ∈ s
ih : ∀ a' ∈ s, f b ≤ f a' → f b = f a'
h : ¬f b ≤ f a
c : α
hc : c ∈ insert a s
hbc : f b ≤ f c
hcs : c ∈ s
⊢ f b = f c
state_after: no goals