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

tactic: apply le_antisymm
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ lfpApprox f x (a + 1) = f (lfpApprox f x a)
state_after: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ lfpApprox f x (a + 1) ≤ f (lfpApprox f x a)

case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ≤ lfpApprox f x (a + 1)

tactic: conv => left; unfold lfpApprox
state_before: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ lfpApprox f x (a + 1) ≤ f (lfpApprox f x a)
state_after: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ sSup ({x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x}) ≤ f (lfpApprox f x a)

tactic: apply sSup_le
state_before: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ sSup ({x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x}) ≤ f (lfpApprox f x a)
state_after: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ ∀ b ∈ {x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x}, b ≤ f (lfpApprox f x a)

tactic: simp only [Ordinal.add_one_eq_succ, lt_succ_iff, exists_prop, Set.union_singleton,
  Set.mem_insert_iff, Set.mem_setOf_eq, forall_eq_or_imp, forall_exists_index, and_imp,
  forall_apply_eq_imp_iff₂]
state_before: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ ∀ b ∈ {x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x}, b ≤ f (lfpApprox f x a)
state_after: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ x ≤ f (lfpApprox f x a) ∧ ∀ a_1 ≤ a, f (lfpApprox f x a_1) ≤ f (lfpApprox f x a)

tactic: apply And.intro
state_before: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ x ≤ f (lfpApprox f x a) ∧ ∀ a_1 ≤ a, f (lfpApprox f x a_1) ≤ f (lfpApprox f x a)
state_after: case a.a.left
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ x ≤ f (lfpApprox f x a)

case a.a.right
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ ∀ a_1 ≤ a, f (lfpApprox f x a_1) ≤ f (lfpApprox f x a)

tactic: apply le_trans h
state_before: case a.a.left
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ x ≤ f (lfpApprox f x a)
state_after: case a.a.left
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f x ≤ f (lfpApprox f x a)

tactic: apply Monotone.imp f.monotone
state_before: case a.a.left
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f x ≤ f (lfpApprox f x a)
state_after: case a.a.left
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ x ≤ lfpApprox f x a

tactic: exact le_lfpApprox f x
state_before: case a.a.left
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ x ≤ lfpApprox f x a
state_after: no goals

tactic: intros a' h
state_before: case a.a.right
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ ∀ a_1 ≤ a, f (lfpApprox f x a_1) ≤ f (lfpApprox f x a)
state_after: case a.a.right
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h✝ : x ≤ f x
a a' : Ordinal.{u}
h : a' ≤ a
⊢ f (lfpApprox f x a') ≤ f (lfpApprox f x a)

tactic: apply f.2
state_before: case a.a.right
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h✝ : x ≤ f x
a a' : Ordinal.{u}
h : a' ≤ a
⊢ f (lfpApprox f x a') ≤ f (lfpApprox f x a)
state_after: case a.a.right.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h✝ : x ≤ f x
a a' : Ordinal.{u}
h : a' ≤ a
⊢ lfpApprox f x a' ≤ lfpApprox f x a

tactic: apply lfpApprox_monotone
state_before: case a.a.right.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h✝ : x ≤ f x
a a' : Ordinal.{u}
h : a' ≤ a
⊢ lfpApprox f x a' ≤ lfpApprox f x a
state_after: case a.a.right.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h✝ : x ≤ f x
a a' : Ordinal.{u}
h : a' ≤ a
⊢ a' ≤ a

tactic: exact h
state_before: case a.a.right.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h✝ : x ≤ f x
a a' : Ordinal.{u}
h : a' ≤ a
⊢ a' ≤ a
state_after: no goals

tactic: conv => right; unfold lfpApprox
state_before: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ≤ lfpApprox f x (a + 1)
state_after: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ≤ sSup ({x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x})

tactic: apply le_sSup
state_before: case a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ≤ sSup ({x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x})
state_after: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x}

tactic: simp only [Ordinal.add_one_eq_succ, lt_succ_iff, exists_prop]
state_before: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b, ∃ (_ : b < a + 1), f (lfpApprox f x b) = x_1} ∪ {x}
state_after: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b ≤ a, f (lfpApprox f x b) = x_1} ∪ {x}

tactic: rw [Set.mem_union]
state_before: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b ≤ a, f (lfpApprox f x b) = x_1} ∪ {x}
state_after: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b ≤ a, f (lfpApprox f x b) = x_1} ∨ f (lfpApprox f x a) ∈ {x}

tactic: apply Or.inl
state_before: case a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b ≤ a, f (lfpApprox f x b) = x_1} ∨ f (lfpApprox f x a) ∈ {x}
state_after: case a.a.h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b ≤ a, f (lfpApprox f x b) = x_1}

tactic: simp only [Set.mem_setOf_eq]
state_before: case a.a.h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ f (lfpApprox f x a) ∈ {x_1 | ∃ b ≤ a, f (lfpApprox f x b) = x_1}
state_after: case a.a.h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ ∃ b ≤ a, f (lfpApprox f x b) = f (lfpApprox f x a)

tactic: use a
state_before: case a.a.h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
h : x ≤ f x
a : Ordinal.{u}
⊢ ∃ b ≤ a, f (lfpApprox f x b) = f (lfpApprox f x a)
state_after: no goals