Theorem: acc_lift₂_iff
File: Mathlib/Order/RelIso/Basic.lean

tactic: constructor
state_before: α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a : α
⊢ Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ a) ↔ Acc r a

tactic: exact RelHomClass.acc (Quotient.mkRelHom H) a
state_before: case mp
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a : α
⊢ Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ a) → Acc r a

tactic: intro ac
state_before: case mpr
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a : α
⊢ Acc r a → Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ a)

tactic: induction' ac with _ _ IH
state_before: case mpr
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a : α
ac : Acc r a
⊢ Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ a)

tactic: dsimp at IH
state_before: case mpr.intro
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a x✝ : α
h✝ : ∀ (y : α), r y x✝ → Acc r y
IH : ∀ (y : α), r y x✝ → Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ y)
⊢ Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ x✝)

tactic: refine' ⟨_, fun q h => _⟩
state_before: case mpr.intro
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a x✝ : α
h✝ : ∀ (y : α), r y x✝ → Acc r y
IH : ∀ (y : α), r y x✝ → Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ y)
⊢ Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ x✝)

tactic: obtain ⟨a', rfl⟩ := q.exists_rep
state_before: case mpr.intro
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a x✝ : α
h✝ : ∀ (y : α), r y x✝ → Acc r y
IH : ∀ (y : α), r y x✝ → Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ y)
q : Quotient inst✝
h : Quotient.lift₂ r H q (Quotient.mk inst✝ x✝)
⊢ Acc (Quotient.lift₂ r H) q

tactic: exact IH a' h
state_before: case mpr.intro.intro
α : Type u_1
β : Type ?u.44894
γ : Type ?u.44897
δ : Type ?u.44900
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
inst✝ : Setoid α
r : α → α → Prop
H : ∀ (a₁ b₁ a₂ b₂ : α), a₁ ≈ a₂ → b₁ ≈ b₂ → r a₁ b₁ = r a₂ b₂
a x✝ : α
h✝ : ∀ (y : α), r y x✝ → Acc r y
IH : ∀ (y : α), r y x✝ → Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ y)
a' : α
h : Quotient.lift₂ r H (Quotient.mk inst✝ a') (Quotient.mk inst✝ x✝)
⊢ Acc (Quotient.lift₂ r H) (Quotient.mk inst✝ a')