Theorem: OmegaCompletePartialOrder.ContinuousHom.ωSup_bind
File: Mathlib/Order/OmegaCompletePartialOrder.lean

tactic: apply eq_of_forall_ge_iff
state_before: α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
⊢ ωSup (Chain.map c (OrderHom.bind f g)) = ωSup (Chain.map c f) >>= ωSup (Chain.map c g)

tactic: intro x
state_before: case H
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
⊢ ∀ (c_1 : Part γ), ωSup (Chain.map c (OrderHom.bind f g)) ≤ c_1 ↔ ωSup (Chain.map c f) >>= ωSup (Chain.map c g) ≤ c_1

tactic: simp only [ωSup_le_iff, Part.bind_le, Chain.mem_map_iff, and_imp, OrderHom.bind_coe, exists_imp]
state_before: case H
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
⊢ ωSup (Chain.map c (OrderHom.bind f g)) ≤ x ↔ ωSup (Chain.map c f) >>= ωSup (Chain.map c g) ≤ x

tactic: constructor <;> intro h'''
state_before: case H
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
⊢ (∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x) ↔
    ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x

tactic: intro b hb
state_before: case H.mp
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
⊢ ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x

tactic: apply ωSup_le _ _ _
state_before: case H.mp
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
hb : b ∈ ωSup (Chain.map c f)
⊢ ωSup (Chain.map c g) b ≤ x

tactic: rintro i y hy
state_before: α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
hb : b ∈ ωSup (Chain.map c f)
⊢ ∀ (i : ℕ), ↑(Chain.map (Chain.map c g) (Pi.evalOrderHom b)) i ≤ x

tactic: simp only [Part.mem_ωSup] at hb
state_before: α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
hb : b ∈ ωSup (Chain.map c f)
i : ℕ
y : γ
hy : y ∈ ↑(Chain.map (Chain.map c g) (Pi.evalOrderHom b)) i
⊢ y ∈ x

tactic: rcases hb with ⟨j, hb⟩
state_before: α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
hy : y ∈ ↑(Chain.map (Chain.map c g) (Pi.evalOrderHom b)) i
hb : Part.some b ∈ Chain.map c f
⊢ y ∈ x

tactic: replace hb := hb.symm
state_before: case intro
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
hy : y ∈ ↑(Chain.map (Chain.map c g) (Pi.evalOrderHom b)) i
j : ℕ
hb : Part.some b = ↑(Chain.map c f) j
⊢ y ∈ x

tactic: simp only [Part.eq_some_iff, Chain.map_coe, Function.comp_apply, OrderHom.apply_coe] at hy hb
state_before: case intro
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
hy : y ∈ ↑(Chain.map (Chain.map c g) (Pi.evalOrderHom b)) i
j : ℕ
hb : ↑(Chain.map c f) j = Part.some b
⊢ y ∈ x

tactic: replace hb : b ∈ f (c (max i j)) := f.mono (c.mono (le_max_right i j)) _ hb
state_before: case intro
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
hy : y ∈ ↑(Pi.evalOrderHom b) (↑g (↑c i))
j : ℕ
hb : b ∈ ↑f (↑c j)
⊢ y ∈ x

tactic: replace hy : y ∈ g (c (max i j)) b := g.mono (c.mono (le_max_left i j)) _ _ hy
state_before: case intro
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
hy : y ∈ ↑(Pi.evalOrderHom b) (↑g (↑c i))
j : ℕ
hb : b ∈ ↑f (↑c (max i j))
⊢ y ∈ x

tactic: apply h''' (max i j)
state_before: case intro
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
j : ℕ
hb : b ∈ ↑f (↑c (max i j))
hy : y ∈ ↑g (↑c (max i j)) b
⊢ y ∈ x

tactic: simp only [exists_prop, Part.bind_eq_bind, Part.mem_bind_iff, Chain.map_coe,
  Function.comp_apply, OrderHom.bind_coe]
state_before: case intro.a
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
j : ℕ
hb : b ∈ ↑f (↑c (max i j))
hy : y ∈ ↑g (↑c (max i j)) b
⊢ y ∈ ↑(Chain.map c (OrderHom.bind f g)) (max i j)

tactic: exact ⟨_, hb, hy⟩
state_before: case intro.a
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x
b : β
i : ℕ
y : γ
j : ℕ
hb : b ∈ ↑f (↑c (max i j))
hy : y ∈ ↑g (↑c (max i j)) b
⊢ ∃ a, a ∈ ↑f (↑c (max i j)) ∧ y ∈ ↑g (↑c (max i j)) a

tactic: intro i
state_before: case H.mpr
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
⊢ ∀ (i : ℕ), ↑(Chain.map c (OrderHom.bind f g)) i ≤ x

tactic: intro y hy
state_before: case H.mpr
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
i : ℕ
⊢ ↑(Chain.map c (OrderHom.bind f g)) i ≤ x

tactic: simp only [exists_prop, Part.bind_eq_bind, Part.mem_bind_iff, Chain.map_coe,
  Function.comp_apply, OrderHom.bind_coe] at hy
state_before: case H.mpr
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
i : ℕ
y : γ
hy : y ∈ ↑(Chain.map c (OrderHom.bind f g)) i
⊢ y ∈ x

tactic: rcases hy with ⟨b, hb₀, hb₁⟩
state_before: case H.mpr
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
i : ℕ
y : γ
hy : ∃ a, a ∈ ↑f (↑c i) ∧ y ∈ ↑g (↑c i) a
⊢ y ∈ x

tactic: apply h''' b _
state_before: case H.mpr.intro.intro
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
i : ℕ
y : γ
b : β
hb₀ : b ∈ ↑f (↑c i)
hb₁ : y ∈ ↑g (↑c i) b
⊢ y ∈ x

tactic: apply le_ωSup (c.map g) _ _ _ hb₁
state_before: case H.mpr.intro.intro.a
α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
i : ℕ
y : γ
b : β
hb₀ : b ∈ ↑f (↑c i)
hb₁ : y ∈ ↑g (↑c i) b
⊢ y ∈ ωSup (Chain.map c g) b

tactic: apply le_ωSup (c.map f) i _ hb₀
state_before: α : Type u
α' : Type ?u.55703
β✝ : Type v
β' : Type ?u.55708
γ✝ : Type ?u.55711
φ : Type ?u.55714
inst✝⁵ : OmegaCompletePartialOrder α
inst✝⁴ : OmegaCompletePartialOrder β✝
inst✝³ : OmegaCompletePartialOrder γ✝
inst✝² : OmegaCompletePartialOrder φ
inst✝¹ : OmegaCompletePartialOrder α'
inst✝ : OmegaCompletePartialOrder β'
β γ : Type v
c : Chain α
f : α →o Part β
g : α →o β → Part γ
x : Part γ
h''' : ∀ (a : β), a ∈ ωSup (Chain.map c f) → ωSup (Chain.map c g) a ≤ x
i : ℕ
y : γ
b : β
hb₀ : b ∈ ↑f (↑c i)
hb₁ : y ∈ ↑g (↑c i) b
⊢ b ∈ ωSup (Chain.map c f)