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

tactic: by_cases h₀ : ∃ i : ℕ, (approx f i a).Dom
state_before: α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
⊢ b ∈ Part.fix (↑f) a ↔ ∃ i, b ∈ approx (↑f) i a

tactic: simp only [Part.fix_def f h₀]
state_before: case pos
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
⊢ b ∈ Part.fix (↑f) a ↔ ∃ i, b ∈ approx (↑f) i a

tactic: constructor <;> intro hh
state_before: case pos
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a ↔ ∃ i, b ∈ approx (↑f) i a

tactic: have h₁ := Nat.find_spec h₀
state_before: case pos.mpr
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: rw [dom_iff_mem] at h₁
state_before: case pos.mpr
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
h₁ : (approx (↑f) (Nat.find h₀) a).Dom
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: cases' h₁ with y h₁
state_before: case pos.mpr
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
h₁ : ∃ y, y ∈ approx (↑f) (Nat.find h₀) a
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: replace h₁ := approx_mono' f _ _ h₁
state_before: case pos.mpr.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
y : β a
h₁ : y ∈ approx (↑f) (Nat.find h₀) a
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: suffices : y = b
state_before: case pos.mpr.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
y : β a
h₁ : y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: cases' hh with i hh
state_before: case this
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
y : β a
h₁ : y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a
⊢ y = b

tactic: revert h₁
state_before: case this.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
h₁ : y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a
i : ℕ
hh : b ∈ approx (↑f) i a
⊢ y = b

tactic: generalize succ (Nat.find h₀) = j
state_before: case this.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
i : ℕ
hh : b ∈ approx (↑f) i a
⊢ y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a → y = b

tactic: intro h₁
state_before: case this.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
i : ℕ
hh : b ∈ approx (↑f) i a
j : ℕ
⊢ y ∈ approx (↑f) j a → y = b

tactic: wlog case : i ≤ j
state_before: case this.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
i : ℕ
hh : b ∈ approx (↑f) i a
j : ℕ
h₁ : y ∈ approx (↑f) j a
⊢ y = b

tactic: replace hh := approx_mono f case _ _ hh
state_before: α✝ : Type u_2
β✝ : α✝ → Type u_1
f✝ : ((a : α✝) → Part (β✝ a)) →o (a : α✝) → Part (β✝ a)
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
i : ℕ
hh : b ∈ approx (↑f) i a
j : ℕ
h₁ : y ∈ approx (↑f) j a
case : i ≤ j
⊢ y = b

tactic: apply Part.mem_unique h₁ hh
state_before: α✝ : Type u_2
β✝ : α✝ → Type u_1
f✝ : ((a : α✝) → Part (β✝ a)) →o (a : α✝) → Part (β✝ a)
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
i j : ℕ
h₁ : y ∈ approx (↑f) j a
case : i ≤ j
hh : b ∈ approx (↑f) j a
⊢ y = b

tactic: exact ⟨_, hh⟩
state_before: case pos.mp
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a
⊢ ∃ i, b ∈ approx (↑f) i a

tactic: subst this
state_before: case pos.mpr.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
hh : ∃ i, b ∈ approx (↑f) i a
y : β a
h₁ : y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a
this : y = b
⊢ b ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: exact h₁
state_before: case pos.mpr.intro
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
h₁ : y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a
hh : ∃ i, y ∈ approx (↑f) i a
⊢ y ∈ approx (↑f) (Nat.succ (Nat.find h₀)) a

tactic: cases' le_total i j with H H <;> [skip; symm] <;> apply_assumption <;> assumption
state_before: case this.intro.inr
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∃ i, (approx (↑f) i a).Dom
y : β a
i : ℕ
hh : b ∈ approx (↑f) i a
j : ℕ
h₁ : y ∈ approx (↑f) j a
this :
  ∀ {α : Type u_2} {β : α → Type u_1} (f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)) (a : α) (b : β a),
    (∃ i, (approx (↑f) i a).Dom) →
      ∀ (y : β a) (i : ℕ), b ∈ approx (↑f) i a → ∀ (j : ℕ), y ∈ approx (↑f) j a → i ≤ j → y = b
case : ¬i ≤ j
⊢ y = b

tactic: simp only [fix_def' (⇑f) h₀, not_exists, false_iff_iff, not_mem_none]
state_before: case neg
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ¬∃ i, (approx (↑f) i a).Dom
⊢ b ∈ Part.fix (↑f) a ↔ ∃ i, b ∈ approx (↑f) i a

tactic: simp only [dom_iff_mem, not_exists] at h₀
state_before: case neg
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ¬∃ i, (approx (↑f) i a).Dom
⊢ ∀ (x : ℕ), ¬b ∈ approx (↑f) x a

tactic: intro
state_before: case neg
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∀ (x : ℕ) (x_1 : β a), ¬x_1 ∈ approx (↑f) x a
⊢ ∀ (x : ℕ), ¬b ∈ approx (↑f) x a

tactic: apply h₀
state_before: case neg
α : Type u_2
β : α → Type u_1
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
a : α
b : β a
h₀ : ∀ (x : ℕ) (x_1 : β a), ¬x_1 ∈ approx (↑f) x a
x✝ : ℕ
⊢ ¬b ∈ approx (↑f) x✝ a