Theorem: QPF.liftr_iff
File: Mathlib/Data/QPF/Univariate/Basic.lean

Proof steps:
state_before: F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
⊢ Liftr r x y ↔ ∃ a f₀ f₁, x = abs ⟨a, f₀⟩ ∧ y = abs ⟨a, f₁⟩ ∧ ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
state_after: case mp
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
⊢ Liftr r x y → ∃ a f₀ f₁, x = abs ⟨a, f₀⟩ ∧ y = abs ⟨a, f₁⟩ ∧ ∀ (i : (P F).B a), r (f₀ i) (f₁ i)

case mpr
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
⊢ (∃ a f₀ f₁, x = abs ⟨a, f₀⟩ ∧ y = abs ⟨a, f₁⟩ ∧ ∀ (i : (P F).B a), r (f₀ i) (f₁ i)) → Liftr r x y
tactic: constructor
state_before: case mpr
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
⊢ (∃ a f₀ f₁, x = abs ⟨a, f₀⟩ ∧ y = abs ⟨a, f₁⟩ ∧ ∀ (i : (P F).B a), r (f₀ i) (f₁ i)) → Liftr r x y
state_after: case mpr.intro.intro.intro.intro.intro
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ Liftr r x y
tactic: rintro ⟨a, f₀, f₁, xeq, yeq, h⟩
state_before: case mpr.intro.intro.intro.intro.intro
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ Liftr r x y
state_after: case h
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ (fun t => (↑t).1) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = x ∧
    (fun t => (↑t).2) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = y
tactic: use abs ⟨a, fun i => ⟨(f₀ i, f₁ i), h i⟩⟩
state_before: case h
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ (fun t => (↑t).1) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = x ∧
    (fun t => (↑t).2) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = y
state_after: case h.left
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ (fun t => (↑t).1) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = x

case h.right
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ (fun t => (↑t).2) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = y
tactic: constructor
state_before: case h.right
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ (fun t => (↑t).2) <$> abs ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩ = y
state_after: case h.right
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ abs ((P F).map (fun t => (↑t).2) ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩) = abs ⟨a, f₁⟩
tactic: rw [yeq, ← abs_map]
state_before: case h.right
F : Type u → Type u
q : QPF F
α : Type u
r : α → α → Prop
x y : F α
a : (P F).A
f₀ f₁ : (P F).B a → α
xeq : x = abs ⟨a, f₀⟩
yeq : y = abs ⟨a, f₁⟩
h : ∀ (i : (P F).B a), r (f₀ i) (f₁ i)
⊢ abs ((P F).map (fun t => (↑t).2) ⟨a, fun i => ⟨(f₀ i, f₁ i), ⋯⟩⟩) = abs ⟨a, f₁⟩
state_after: no goals
tactic: rfl