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

tactic: have : recF g ∘ fixToW = Fix.rec g := by
  apply funext
  apply Quotient.ind
  intro x
  apply recF_eq_of_Wequiv
  rw [fixToW]
  apply Wrepr_equiv
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
⊢ rec g (mk x) = g (rec g <$> x)
state_after: F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
this : recF g ∘ fixToW = rec g
⊢ rec g (mk x) = g (rec g <$> x)

tactic: conv =>
  lhs
  rw [Fix.rec, Fix.mk]
  dsimp
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
this : recF g ∘ fixToW = rec g
⊢ rec g (mk x) = g (rec g <$> x)
state_after: F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
this : recF g ∘ fixToW = rec g
⊢ recF g (PFunctor.W.mk ((P F).map fixToW (repr x))) = g (rec g <$> x)

tactic: cases' h : repr x with a f
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
this : recF g ∘ fixToW = rec g
⊢ recF g (PFunctor.W.mk ((P F).map fixToW (repr x))) = g (rec g <$> x)
state_after: case mk
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
this : recF g ∘ fixToW = rec g
a : (P F).A
f : (P F).B a → Fix F
h : repr x = ⟨a, f⟩
⊢ recF g (PFunctor.W.mk ((P F).map fixToW ⟨a, f⟩)) = g (rec g <$> x)

tactic: rw [PFunctor.map_eq, recF_eq, ← PFunctor.map_eq, PFunctor.W.dest_mk, PFunctor.map_map, abs_map,
  ← h, abs_repr, this]
state_before: case mk
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
this : recF g ∘ fixToW = rec g
a : (P F).A
f : (P F).B a → Fix F
h : repr x = ⟨a, f⟩
⊢ recF g (PFunctor.W.mk ((P F).map fixToW ⟨a, f⟩)) = g (rec g <$> x)
state_after: no goals

tactic: apply funext
state_before: F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
⊢ recF g ∘ fixToW = rec g
state_after: case h
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
⊢ ∀ (x : Fix F), (recF g ∘ fixToW) x = rec g x

tactic: apply Quotient.ind
state_before: case h
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
⊢ ∀ (x : Fix F), (recF g ∘ fixToW) x = rec g x
state_after: case h.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
⊢ ∀ (a : (P F).W), (recF g ∘ fixToW) ⟦a⟧ = rec g ⟦a⟧

tactic: intro x
state_before: case h.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x : F (Fix F)
⊢ ∀ (a : (P F).W), (recF g ∘ fixToW) ⟦a⟧ = rec g ⟦a⟧
state_after: case h.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x✝ : F (Fix F)
x : (P F).W
⊢ (recF g ∘ fixToW) ⟦x⟧ = rec g ⟦x⟧

tactic: apply recF_eq_of_Wequiv
state_before: case h.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x✝ : F (Fix F)
x : (P F).W
⊢ (recF g ∘ fixToW) ⟦x⟧ = rec g ⟦x⟧
state_after: case h.a.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x✝ : F (Fix F)
x : (P F).W
⊢ Wequiv (fixToW ⟦x⟧) x

tactic: rw [fixToW]
state_before: case h.a.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x✝ : F (Fix F)
x : (P F).W
⊢ Wequiv (fixToW ⟦x⟧) x
state_after: case h.a.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x✝ : F (Fix F)
x : (P F).W
⊢ Wequiv (Quotient.lift Wrepr ⋯ ⟦x⟧) x

tactic: apply Wrepr_equiv
state_before: case h.a.a
F : Type u → Type u
q : QPF F
α : Type u
g : F α → α
x✝ : F (Fix F)
x : (P F).W
⊢ Wequiv (Quotient.lift Wrepr ⋯ ⟦x⟧) x
state_after: no goals