Theorem: WellFounded.lt_succ_iff
File: Mathlib/Order/WellFounded.lean

tactic: constructor
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
⊢ r y (⋯.succ x) ↔ r y x ∨ y = x
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
⊢ r y (⋯.succ x) → r y x ∨ y = x

case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
⊢ r y x ∨ y = x → r y (⋯.succ x)

tactic: rintro (hy | rfl)
state_before: case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
⊢ r y x ∨ y = x → r y (⋯.succ x)
state_after: case mpr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
hy : r y x
⊢ r y (⋯.succ x)

case mpr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
y : α
h : ∃ y_1, r y y_1
⊢ r y (⋯.succ y)

tactic: exact wo.wf.lt_succ h
state_before: case mpr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
y : α
h : ∃ y_1, r y y_1
⊢ r y (⋯.succ y)
state_after: no goals

tactic: intro h'
state_before: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
⊢ r y (⋯.succ x) → r y x ∨ y = x
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
⊢ r y x ∨ y = x

tactic: have : ¬r x y := by
  intro hy
  rw [WellFounded.succ, dif_pos] at h'
  exact wo.wf.not_lt_min _ h hy h'
state_before: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
⊢ r y x ∨ y = x
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
⊢ r y x ∨ y = x

tactic: rcases trichotomous_of r x y with (hy | hy | hy)
state_before: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
⊢ r y x ∨ y = x
state_after: case mp.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r x y
⊢ r y x ∨ y = x

case mp.inr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : x = y
⊢ r y x ∨ y = x

case mp.inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r y x
⊢ r y x ∨ y = x

tactic: left
state_before: case mp.inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r y x
⊢ r y x ∨ y = x
state_after: case mp.inr.inr.h
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r y x
⊢ r y x

tactic: exact hy
state_before: case mp.inr.inr.h
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r y x
⊢ r y x
state_after: no goals

tactic: intro hy
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
⊢ ¬r x y
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
hy : r x y
⊢ False

tactic: rw [WellFounded.succ, dif_pos] at h'
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
hy : r x y
⊢ False
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h'✝ : r y (if h : ∃ y, r x y then ⋯.min {y | r x y} h else x)
h' : r y (⋯.min {y | r x y} ?hc)
hy : r x y
⊢ False

case hc
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (if h : ∃ y, r x y then ⋯.min {y | r x y} h else x)
hy : r x y
⊢ ∃ y, r x y

tactic: exact wo.wf.not_lt_min _ h hy h'
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h'✝ : r y (if h : ∃ y, r x y then ⋯.min {y | r x y} h else x)
h' : r y (⋯.min {y | r x y} ?hc)
hy : r x y
⊢ False

case hc
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (if h : ∃ y, r x y then ⋯.min {y | r x y} h else x)
hy : r x y
⊢ ∃ y, r x y
state_after: no goals

tactic: exfalso
state_before: case mp.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r x y
⊢ r y x ∨ y = x
state_after: case mp.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r x y
⊢ False

tactic: exact this hy
state_before: case mp.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : r x y
⊢ False
state_after: no goals

tactic: right
state_before: case mp.inr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : x = y
⊢ r y x ∨ y = x
state_after: case mp.inr.inl.h
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : x = y
⊢ y = x

tactic: exact hy.symm
state_before: case mp.inr.inl.h
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
h' : r y (⋯.succ x)
this : ¬r x y
hy : x = y
⊢ y = x
state_after: no goals

tactic: exact _root_.trans hy (wo.wf.lt_succ h)
state_before: case mpr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wo : IsWellOrder α r
x : α
h : ∃ y, r x y
y : α
hy : r y x
⊢ r y (⋯.succ x)
state_after: no goals