Theorem: Part.Fix.exists_fix_le_approx
File: Mathlib/Control/LawfulFix.lean

tactic: by_cases hh : ∃ i b, b ∈ approx f i x
state_before: α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x
state_after: case pos
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∃ i b, b ∈ approx (⇑f) i x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x

case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ¬∃ i b, b ∈ approx (⇑f) i x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x

tactic: rcases hh with ⟨i, b, hb⟩
state_before: case pos
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∃ i b, b ∈ approx (⇑f) i x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x
state_after: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x

tactic: exists i
state_before: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x
state_after: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
⊢ Part.fix (⇑f) x ≤ approx (⇑f) i x

tactic: intro b' h'
state_before: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
⊢ Part.fix (⇑f) x ≤ approx (⇑f) i x
state_after: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
b' : β x
h' : b' ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) i x

tactic: have hb' := approx_le_fix f i _ _ hb
state_before: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
b' : β x
h' : b' ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) i x
state_after: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
b' : β x
h' : b' ∈ Part.fix (⇑f) x
hb' : b ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) i x

tactic: obtain rfl := Part.mem_unique h' hb'
state_before: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b : β x
hb : b ∈ approx (⇑f) i x
b' : β x
h' : b' ∈ Part.fix (⇑f) x
hb' : b ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) i x
state_after: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b' : β x
h' : b' ∈ Part.fix (⇑f) x
hb : b' ∈ approx (⇑f) i x
hb' : b' ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) i x

tactic: exact hb
state_before: case pos.intro.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
i : ℕ
b' : β x
h' : b' ∈ Part.fix (⇑f) x
hb : b' ∈ approx (⇑f) i x
hb' : b' ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) i x
state_after: no goals

tactic: simp only [not_exists] at hh
state_before: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ¬∃ i b, b ∈ approx (⇑f) i x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x
state_after: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x

tactic: exists 0
state_before: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
⊢ ∃ i, Part.fix (⇑f) x ≤ approx (⇑f) i x
state_after: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
⊢ Part.fix (⇑f) x ≤ approx (⇑f) 0 x

tactic: intro b' h'
state_before: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
⊢ Part.fix (⇑f) x ≤ approx (⇑f) 0 x
state_after: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
b' : β x
h' : b' ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) 0 x

tactic: simp only [mem_iff f] at h'
state_before: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
b' : β x
h' : b' ∈ Part.fix (⇑f) x
⊢ b' ∈ approx (⇑f) 0 x
state_after: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
b' : β x
h' : ∃ i, b' ∈ approx (⇑f) i x
⊢ b' ∈ approx (⇑f) 0 x

tactic: cases' h' with i h'
state_before: case neg
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
b' : β x
h' : ∃ i, b' ∈ approx (⇑f) i x
⊢ b' ∈ approx (⇑f) 0 x
state_after: case neg.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
b' : β x
i : ℕ
h' : b' ∈ approx (⇑f) i x
⊢ b' ∈ approx (⇑f) 0 x

tactic: cases hh _ _ h'
state_before: case neg.intro
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
x : α
hh : ∀ (x_1 : ℕ) (x_2 : β x), x_2 ∉ approx (⇑f) x_1 x
b' : β x
i : ℕ
h' : b' ∈ approx (⇑f) i x
⊢ b' ∈ approx (⇑f) 0 x
state_after: no goals