Theorem: Set.PartiallyWellOrderedOn.fiberProdLex
File: Mathlib/Order/WellFoundedSet.lean

tactic: let f : α ×ₗ β → β := fun x => (ofLex x).2
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
⊢ {y | toLex (a, y) ∈ s}.IsPWO
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
⊢ {y | toLex (a, y) ∈ s}.IsPWO

tactic: have h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x ↦ (ofLex x).1) ⁻¹' {a}) := by
  ext x
  simp [f]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
⊢ {y | toLex (a, y) ∈ s}.IsPWO
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
⊢ {y | toLex (a, y) ∈ s}.IsPWO

tactic: rw [h]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
⊢ {y | toLex (a, y) ∈ s}.IsPWO
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
⊢ (f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})).IsPWO

tactic: apply IsPWO.image_of_monotoneOn (hαβ.mono inter_subset_left)
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
⊢ (f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})).IsPWO
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
⊢ MonotoneOn f (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})

tactic: rintro b ⟨-, hb⟩ c ⟨-, hc⟩ hbc
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
⊢ MonotoneOn f (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
b : Lex (α × β)
hb : b ∈ (fun x => (ofLex x).1) ⁻¹' {a}
c : Lex (α × β)
hc : c ∈ (fun x => (ofLex x).1) ⁻¹' {a}
hbc : b ≤ c
⊢ f b ≤ f c

tactic: simp only [mem_preimage, mem_singleton_iff] at hb hc
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
b : Lex (α × β)
hb : b ∈ (fun x => (ofLex x).1) ⁻¹' {a}
c : Lex (α × β)
hc : c ∈ (fun x => (ofLex x).1) ⁻¹' {a}
hbc : b ≤ c
⊢ f b ≤ f c
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
b c : Lex (α × β)
hbc : b ≤ c
hb : (ofLex b).1 = a
hc : (ofLex c).1 = a
⊢ f b ≤ f c

tactic: have : (ofLex b).1 < (ofLex c).1 ∨ (ofLex b).1 = (ofLex c).1 ∧ f b ≤ f c :=
  (Prod.Lex.le_iff b c).mp hbc
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
b c : Lex (α × β)
hbc : b ≤ c
hb : (ofLex b).1 = a
hc : (ofLex c).1 = a
⊢ f b ≤ f c
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
b c : Lex (α × β)
hbc : b ≤ c
hb : (ofLex b).1 = a
hc : (ofLex c).1 = a
this : (ofLex b).1 < (ofLex c).1 ∨ (ofLex b).1 = (ofLex c).1 ∧ f b ≤ f c
⊢ f b ≤ f c

tactic: simp_all only [lt_self_iff_false, true_and, false_or]
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
h : {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
b c : Lex (α × β)
hbc : b ≤ c
hb : (ofLex b).1 = a
hc : (ofLex c).1 = a
this : (ofLex b).1 < (ofLex c).1 ∨ (ofLex b).1 = (ofLex c).1 ∧ f b ≤ f c
⊢ f b ≤ f c
state_after: no goals

tactic: ext x
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
⊢ {y | toLex (a, y) ∈ s} = f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
state_after: case h
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
x : β
⊢ x ∈ {y | toLex (a, y) ∈ s} ↔ x ∈ f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})

tactic: simp [f]
state_before: case h
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
π : ι → Type u_5
r : α → α → Prop
inst✝¹ : PartialOrder α
inst✝ : Preorder β
s : Set (Lex (α × β))
hαβ : s.IsPWO
a : α
f : Lex (α × β) → β := fun x => (ofLex x).2
x : β
⊢ x ∈ {y | toLex (a, y) ∈ s} ↔ x ∈ f '' (s ∩ (fun x => (ofLex x).1) ⁻¹' {a})
state_after: no goals