Theorem: QPF.Fix.ind
File: Mathlib/Data/QPF/Univariate/Basic.lean

tactic: apply Quot.ind
state_before: F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
⊢ ∀ (x : Fix F), p x
state_after: case mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
⊢ ∀ (a : (P F).W), p (Quot.mk Setoid.r a)

tactic: intro x
state_before: case mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
⊢ ∀ (a : (P F).W), p (Quot.mk Setoid.r a)
state_after: case mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
x : (P F).W
⊢ p (Quot.mk Setoid.r x)

tactic: induction' x with a f ih
state_before: case mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
x : (P F).W
⊢ p (Quot.mk Setoid.r x)
state_after: case mk.mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ p (Quot.mk Setoid.r (WType.mk a f))

tactic: change p ⟦⟨a, f⟩⟧
state_before: case mk.mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ p (Quot.mk Setoid.r (WType.mk a f))
state_after: case mk.mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ p ⟦WType.mk a f⟧

tactic: rw [← Fix.ind_aux a f]
state_before: case mk.mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ p ⟦WType.mk a f⟧
state_after: case mk.mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ p (mk (abs ⟨a, fun x => ⟦f x⟧⟩))

tactic: apply h
state_before: case mk.mk
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ p (mk (abs ⟨a, fun x => ⟦f x⟧⟩))
state_after: case mk.mk.a
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ Liftp p (abs ⟨a, fun x => ⟦f x⟧⟩)

tactic: rw [liftp_iff]
state_before: case mk.mk.a
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ Liftp p (abs ⟨a, fun x => ⟦f x⟧⟩)
state_after: case mk.mk.a
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ ∃ a_1 f_1, abs ⟨a, fun x => ⟦f x⟧⟩ = abs ⟨a_1, f_1⟩ ∧ ∀ (i : (P F).B a_1), p (f_1 i)

tactic: refine ⟨_, _, rfl, ?_⟩
state_before: case mk.mk.a
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ ∃ a_1 f_1, abs ⟨a, fun x => ⟦f x⟧⟩ = abs ⟨a_1, f_1⟩ ∧ ∀ (i : (P F).B a_1), p (f_1 i)
state_after: case mk.mk.a
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ ∀ (i : (P F).B a), p ⟦f i⟧

tactic: convert ih
state_before: case mk.mk.a
F : Type u → Type u
q : QPF F
p : Fix F → Prop
h : ∀ (x : F (Fix F)), Liftp p x → p (mk x)
a : (P F).A
f : (P F).B a → WType (P F).B
ih : ∀ (a : (P F).B a), p (Quot.mk Setoid.r (f a))
⊢ ∀ (i : (P F).B a), p ⟦f i⟧
state_after: no goals