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

tactic: rw [mem_fixedPoints_iff] at h
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h_init : x ≤ f x
h_ab : a ≤ b
h : lfpApprox f x a ∈ fixedPoints ⇑f
⊢ lfpApprox f x b = lfpApprox f x a
state_after: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a b : Ordinal.{u}
h_init : x ≤ f x
h_ab : a ≤ b
h : f (lfpApprox f x a) = lfpApprox f x a
⊢ lfpApprox f x b = lfpApprox f x a

tactic: apply le_antisymm
state_before: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ lfpApprox f x b = lfpApprox f x a
state_after: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ lfpApprox f x b ≤ lfpApprox f x a

case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ lfpApprox f x a ≤ lfpApprox f x b

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

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

tactic: simp only [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 h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ ∀ b_1 ∈ {x_1 | ∃ b_2, ∃ (_ : b_2 < b), f (lfpApprox f x b_2) = x_1} ∪ {x}, b_1 ≤ lfpApprox f x a
state_after: case h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ x ≤ lfpApprox f x a ∧ ∀ a_1 < b, f (lfpApprox f x a_1) ≤ lfpApprox f x a

tactic: apply And.intro (le_lfpApprox f x)
state_before: case h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ x ≤ lfpApprox f x a ∧ ∀ a_1 < b, f (lfpApprox f x a_1) ≤ lfpApprox f x a
state_after: case h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ ∀ a_1 < b, f (lfpApprox f x a_1) ≤ lfpApprox f x a

tactic: intro a' ha'b
state_before: case h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ ∀ a_1 < b, f (lfpApprox f x a_1) ≤ lfpApprox f x a
state_after: case h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
⊢ f (lfpApprox f x a') ≤ lfpApprox f x a

tactic: by_cases haa : a' < a
state_before: case h.a.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
⊢ f (lfpApprox f x a') ≤ lfpApprox f x a
state_after: case pos
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ f (lfpApprox f x a') ≤ lfpApprox f x a

case neg
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : ¬a' < a
⊢ f (lfpApprox f x a') ≤ lfpApprox f x a

tactic: rw [← lfpApprox_add_one f x h_init]
state_before: case pos
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ f (lfpApprox f x a') ≤ lfpApprox f x a
state_after: case pos
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ lfpApprox f x (a' + 1) ≤ lfpApprox f x a

tactic: apply lfpApprox_monotone
state_before: case pos
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ lfpApprox f x (a' + 1) ≤ lfpApprox f x a
state_after: case pos.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ a' + 1 ≤ a

tactic: simp only [Ordinal.add_one_eq_succ, succ_le_iff]
state_before: case pos.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ a' + 1 ≤ a
state_after: case pos.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ a' < a

tactic: exact haa
state_before: case pos.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : a' < a
⊢ a' < a
state_after: no goals

tactic: rw [IH a' ha'b (le_of_not_lt haa), h]
state_before: case neg
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
a' : Ordinal.{u}
ha'b : a' < b
haa : ¬a' < a
⊢ f (lfpApprox f x a') ≤ lfpApprox f x a
state_after: no goals

tactic: exact lfpApprox_monotone f x h_ab
state_before: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x : α
a : Ordinal.{u}
h_init : x ≤ f x
h : f (lfpApprox f x a) = lfpApprox f x a
b : Ordinal.{u}
IH : ∀ k < b, a ≤ k → lfpApprox f x k = lfpApprox f x a
h_ab : a ≤ b
⊢ lfpApprox f x a ≤ lfpApprox f x b
state_after: no goals