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

tactic: induction i using Ordinal.induction with
| h i IH =>
  unfold lfpApprox
  apply sSup_le
  simp only [exists_prop]
  intro y h_y
  simp only [Set.mem_union, Set.mem_setOf_eq, Set.mem_singleton_iff] at h_y
  cases h_y with
  | inl h_y =>
    let ⟨j, h_j_lt, h_j⟩ := h_y
    rw [← h_j, ← h_a]
    apply f.monotone'
    exact IH j h_j_lt
  | inr h_y =>
    rw [h_y]
    exact h_le_init
state_before: α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
⊢ lfpApprox f x i ≤ a
state_after: no goals

tactic: unfold lfpApprox
state_before: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
⊢ lfpApprox f x i ≤ a
state_after: case h
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
⊢ sSup ({x_1 | ∃ b, ∃ (_ : b < i), f (lfpApprox f x b) = x_1} ∪ {x}) ≤ a

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

tactic: simp only [exists_prop]
state_before: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
⊢ ∀ b ∈ {x_1 | ∃ b, ∃ (_ : b < i), f (lfpApprox f x b) = x_1} ∪ {x}, b ≤ a
state_after: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
⊢ ∀ b ∈ {x_1 | ∃ b < i, f (lfpApprox f x b) = x_1} ∪ {x}, b ≤ a

tactic: intro y h_y
state_before: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
⊢ ∀ b ∈ {x_1 | ∃ b < i, f (lfpApprox f x b) = x_1} ∪ {x}, b ≤ a
state_after: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : y ∈ {x_1 | ∃ b < i, f (lfpApprox f x b) = x_1} ∪ {x}
⊢ y ≤ a

tactic: simp only [Set.mem_union, Set.mem_setOf_eq, Set.mem_singleton_iff] at h_y
state_before: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : y ∈ {x_1 | ∃ b < i, f (lfpApprox f x b) = x_1} ∪ {x}
⊢ y ≤ a
state_after: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : (∃ b < i, f (lfpApprox f x b) = y) ∨ y = x
⊢ y ≤ a

tactic: cases h_y with
| inl h_y =>
  let ⟨j, h_j_lt, h_j⟩ := h_y
  rw [← h_j, ← h_a]
  apply f.monotone'
  exact IH j h_j_lt
| inr h_y =>
  rw [h_y]
  exact h_le_init
state_before: case h.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : (∃ b < i, f (lfpApprox f x b) = y) ∨ y = x
⊢ y ≤ a
state_after: no goals

tactic: let ⟨j, h_j_lt, h_j⟩ := h_y
state_before: case h.a.inl
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
⊢ y ≤ a
state_after: case h.a.inl
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
j : Ordinal.{u}
h_j_lt : j < i
h_j : f (lfpApprox f x j) = y
⊢ y ≤ a

tactic: rw [← h_j, ← h_a]
state_before: case h.a.inl
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
j : Ordinal.{u}
h_j_lt : j < i
h_j : f (lfpApprox f x j) = y
⊢ y ≤ a
state_after: case h.a.inl
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
j : Ordinal.{u}
h_j_lt : j < i
h_j : f (lfpApprox f x j) = y
⊢ f (lfpApprox f x j) ≤ f a

tactic: apply f.monotone'
state_before: case h.a.inl
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
j : Ordinal.{u}
h_j_lt : j < i
h_j : f (lfpApprox f x j) = y
⊢ f (lfpApprox f x j) ≤ f a
state_after: case h.a.inl.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
j : Ordinal.{u}
h_j_lt : j < i
h_j : f (lfpApprox f x j) = y
⊢ lfpApprox f x j ≤ a

tactic: exact IH j h_j_lt
state_before: case h.a.inl.a
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : ∃ b < i, f (lfpApprox f x b) = y
j : Ordinal.{u}
h_j_lt : j < i
h_j : f (lfpApprox f x j) = y
⊢ lfpApprox f x j ≤ a
state_after: no goals

tactic: rw [h_y]
state_before: case h.a.inr
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : y = x
⊢ y ≤ a
state_after: case h.a.inr
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : y = x
⊢ x ≤ a

tactic: exact h_le_init
state_before: case h.a.inr
α : Type u
inst✝ : CompleteLattice α
f : α →o α
x a : α
h_a : a ∈ fixedPoints ⇑f
h_le_init : x ≤ a
i : Ordinal.{u}
IH : ∀ k < i, lfpApprox f x k ≤ a
y : α
h_y : y = x
⊢ x ≤ a
state_after: no goals