Theorem: Set.partiallyWellOrderedOn_iff_finite_antichains
File: Mathlib/Order/WellFoundedSet.lean

tactic: refine' ⟨fun h t ht hrt => hrt.finite_of_partiallyWellOrderedOn (h.mono ht), _⟩
state_before: ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
⊢ PartiallyWellOrderedOn s r ↔ ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t

tactic: rintro hs f hf
state_before: ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
⊢ (∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t) → PartiallyWellOrderedOn s r

tactic: by_contra' H
state_before: ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
⊢ ∃ m n, m < n ∧ r (f m) (f n)

tactic: refine' infinite_range_of_injective (fun m n hmn => _) (hs _ (range_subset_iff.2 hf) _)
state_before: ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
⊢ False

tactic: rintro _ ⟨m, hm, rfl⟩ _ ⟨n, hn, rfl⟩ hmn
state_before: case refine'_2
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
⊢ IsAntichain r (range fun y => f y)

tactic: obtain h | h := (ne_of_apply_ne _ hmn).lt_or_lt
state_before: case refine'_2.intro.refl.intro.refl
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : (fun y => f y) m ≠ (fun y => f y) n
⊢ (rᶜ) ((fun y => f y) m) ((fun y => f y) n)

tactic: obtain h | h | h := lt_trichotomy m n
state_before: case refine'_1
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
⊢ m = n

tactic: refine' (H _ _ h _).elim
state_before: case refine'_1.inl
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : m < n
⊢ m = n

tactic: rw [hmn]
state_before: case refine'_1.inl
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : m < n
⊢ r (f m) (f n)

tactic: exact refl _
state_before: case refine'_1.inl
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : m < n
⊢ r (f n) (f n)

tactic: exact h
state_before: case refine'_1.inr.inl
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : m = n
⊢ m = n

tactic: refine' (H _ _ h _).elim
state_before: case refine'_1.inr.inr
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : n < m
⊢ m = n

tactic: rw [hmn]
state_before: case refine'_1.inr.inr
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : n < m
⊢ r (f n) (f m)

tactic: exact refl _
state_before: case refine'_1.inr.inr
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : f m = f n
h : n < m
⊢ r (f n) (f n)

tactic: exact H _ _ h
state_before: case refine'_2.intro.refl.intro.refl.inl
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : (fun y => f y) m ≠ (fun y => f y) n
h : m < n
⊢ (rᶜ) ((fun y => f y) m) ((fun y => f y) n)

tactic: exact mt symm (H _ _ h)
state_before: case refine'_2.intro.refl.intro.refl.inr
ι : Type ?u.81761
α : Type u_1
β : Type ?u.81767
r : α → α → Prop
r' : β → β → Prop
f✝ : α → β
s t : Set α
a : α
inst✝¹ : IsRefl α r
inst✝ : IsSymm α r
hs : ∀ (t : Set α), t ⊆ s → IsAntichain r t → Set.Finite t
f : ℕ → α
hf : ∀ (n : ℕ), f n ∈ s
H : ∀ (m n : ℕ), m < n → ¬r (f m) (f n)
m n : ℕ
hmn : (fun y => f y) m ≠ (fun y => f y) n
h : n < m
⊢ (rᶜ) ((fun y => f y) m) ((fun y => f y) n)