Theorem: OrdinalApprox.lfpApprox_monotone
File: Mathlib/SetTheory/Ordinal/FixedPointApproximants.lean

Proof steps:
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
⊢ Monotone (lfpApprox f x)
state_after: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
⊢ ∀ ⦃a b : Ordinal.{u}⦄, a ≤ b → lfpApprox f x a ≤ lfpApprox f x b
tactic: unfold Monotone
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
⊢ ∀ ⦃a b : Ordinal.{u}⦄, a ≤ b → lfpApprox f x a ≤ lfpApprox f x b
state_after: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ lfpApprox f x a ≤ lfpApprox f x b
tactic: intros a b h
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ lfpApprox f x a ≤ lfpApprox f x b
state_after: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ sSup ({x_1 | ∃ b, ∃ (_ : b < a), f (lfpApprox f x b) = x_1} ∪ {x}) ≤
    sSup ({x_1 | ∃ b_1, ∃ (_ : b_1 < b), f (lfpApprox f x b_1) = x_1} ∪ {x})
tactic: unfold lfpApprox
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ sSup ({x_1 | ∃ b, ∃ (_ : b < a), f (lfpApprox f x b) = x_1} ∪ {x}) ≤
    sSup ({x_1 | ∃ b_1, ∃ (_ : b_1 < b), f (lfpApprox f x b_1) = x_1} ∪ {x})
state_after: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ {x_1 | ∃ b, ∃ (_ : b < a), f (lfpApprox f x b) = x_1} ∪ {x} ⊆
    {x_1 | ∃ b_1, ∃ (_ : b_1 < b), f (lfpApprox f x b_1) = x_1} ∪ {x}
tactic: refine sSup_le_sSup ?h
state_before: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ {x_1 | ∃ b, ∃ (_ : b < a), f (lfpApprox f x b) = x_1} ∪ {x} ⊆
    {x_1 | ∃ b_1, ∃ (_ : b_1 < b), f (lfpApprox f x b_1) = x_1} ∪ {x}
state_after: case h.h₁
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ {x_1 | ∃ b, ∃ (_ : b < a), f (lfpApprox f x b) = x_1} ≤ {x_1 | ∃ b_1, ∃ (_ : b_1 < b), f (lfpApprox f x b_1) = x_1}
tactic: apply sup_le_sup_right
state_before: case h.h₁
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ {x_1 | ∃ b, ∃ (_ : b < a), f (lfpApprox f x b) = x_1} ≤ {x_1 | ∃ b_1, ∃ (_ : b_1 < b), f (lfpApprox f x b_1) = x_1}
state_after: case h.h₁
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ ∀ a_1 < a, ∃ b_1 < b, f (lfpApprox f x b_1) = f (lfpApprox f x a_1)
tactic: simp only [exists_prop, Set.le_eq_subset, Set.setOf_subset_setOf, forall_exists_index, and_imp,
    forall_apply_eq_imp_iff₂]
state_before: case h.h₁
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
⊢ ∀ a_1 < a, ∃ b_1 < b, f (lfpApprox f x b_1) = f (lfpApprox f x a_1)
state_after: case h.h₁
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
a' : Ordinal.{u}
h' : a' < a
⊢ ∃ b_1 < b, f (lfpApprox f x b_1) = f (lfpApprox f x a')
tactic: intros a' h'
state_before: case h.h₁
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
a' : Ordinal.{u}
h' : a' < a
⊢ ∃ b_1 < b, f (lfpApprox f x b_1) = f (lfpApprox f x a')
state_after: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
a' : Ordinal.{u}
h' : a' < a
⊢ a' < b ∧ f (lfpApprox f x a') = f (lfpApprox f x a')
tactic: use a'
state_before: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h : a ≤ b
a' : Ordinal.{u}
h' : a' < a
⊢ a' < b ∧ f (lfpApprox f x a') = f (lfpApprox f x a')
state_after: no goals
tactic: exact ⟨lt_of_lt_of_le h' h, rfl⟩