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

tactic: let f' : β → range f := fun c => ⟨f c, c, rfl⟩
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
⊢ (range f).WellFoundedOn r ↔ WellFounded (r on f)
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
⊢ (range f).WellFoundedOn r ↔ WellFounded (r on f)

tactic: refine ⟨fun h => (InvImage.wf f' h).mono fun c c' => id, fun h => ⟨?_⟩⟩
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
⊢ (range f).WellFoundedOn r ↔ WellFounded (r on f)
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
⊢ ∀ (a : ↑(range f)), Acc (fun a b => r ↑a ↑b) a

tactic: rintro ⟨_, c, rfl⟩
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
⊢ ∀ (a : ↑(range f)), Acc (fun a b => r ↑a ↑b) a
state_after: case mk.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c : β
⊢ Acc (fun a b => r ↑a ↑b) ⟨f c, ⋯⟩

tactic: refine Acc.of_downward_closed f' ?_ _ ?_
state_before: case mk.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c : β
⊢ Acc (fun a b => r ↑a ↑b) ⟨f c, ⋯⟩
state_after: case mk.intro.refine_1
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c : β
⊢ ∀ {a : β} {b : ↑(range f)}, r ↑b ↑(f' a) → ∃ c, f' c = b

case mk.intro.refine_2
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c : β
⊢ Acc (InvImage (fun a b => r ↑a ↑b) f') c

tactic: rintro _ ⟨_, c', rfl⟩ -
state_before: case mk.intro.refine_1
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c : β
⊢ ∀ {a : β} {b : ↑(range f)}, r ↑b ↑(f' a) → ∃ c, f' c = b
state_after: case mk.intro.refine_1.mk.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c a✝ c' : β
⊢ ∃ c, f' c = ⟨f c', ⋯⟩

tactic: exact ⟨c', rfl⟩
state_before: case mk.intro.refine_1.mk.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c a✝ c' : β
⊢ ∃ c, f' c = ⟨f c', ⋯⟩
state_after: no goals

tactic: exact h.apply _
state_before: case mk.intro.refine_2
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r r' : α → α → Prop
f : β → α
s t : Set α
x y : α
f' : β → ↑(range f) := fun c => ⟨f c, ⋯⟩
h : WellFounded (r on f)
c : β
⊢ Acc (InvImage (fun a b => r ↑a ↑b) f') c
state_after: no goals