Theorem: MvPFunctor.w_map_wMk
File: Mathlib/Data/PFunctor/Multivariate/W.lean

tactic: show _ = P.wMk a (g ⊚ f') (MvFunctor.map g ∘ f)
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => g <$$> f i
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') (MvFunctor.map g ∘ f)

tactic: have : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩ := by
  ext i : 1
  dsimp [Function.comp_def]
  cases f i
  rfl
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') (MvFunctor.map g ∘ f)
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') (MvFunctor.map g ∘ f)

tactic: rw [this]
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') (MvFunctor.map g ∘ f)
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩

tactic: have : f = fun i => ⟨(f i).fst, (f i).snd⟩ := by
  ext1 x
  cases f x
  rfl
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩

tactic: rw [this]
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ (g <$$> P.wMk a f' fun i => ⟨(f i).fst, (f i).snd⟩) =
    P.wMk a (g ⊚ f') fun i => ⟨((fun i => ⟨(f i).fst, (f i).snd⟩) i).fst, g ⊚ ((fun i => ⟨(f i).fst, (f i).snd⟩) i).snd⟩

tactic: dsimp
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ (g <$$> P.wMk a f' fun i => ⟨(f i).fst, (f i).snd⟩) =
    P.wMk a (g ⊚ f') fun i => ⟨((fun i => ⟨(f i).fst, (f i).snd⟩) i).fst, g ⊚ ((fun i => ⟨(f i).fst, (f i).snd⟩) i).snd⟩
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ (g <$$> P.wMk a f' fun i => ⟨(f i).fst, (f i).snd⟩) = P.wMk a (g ⊚ f') fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩

tactic: rw [wMk_eq, wMk_eq]
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ (g <$$> P.wMk a f' fun i => ⟨(f i).fst, (f i).snd⟩) = P.wMk a (g ⊚ f') fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ g <$$> ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn f' fun i => (f i).snd⟩ =
    ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn (g ⊚ f') fun i => g ⊚ (f i).snd⟩

tactic: have h := MvPFunctor.map_eq P.wp g
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
⊢ g <$$> ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn f' fun i => (f i).snd⟩ =
    ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn (g ⊚ f') fun i => g ⊚ (f i).snd⟩
state_after: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
h : ∀ (a : P.wp.A) (f : P.wp.B a ⟹ α), g <$$> ⟨a, f⟩ = ⟨a, g ⊚ f⟩
⊢ g <$$> ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn f' fun i => (f i).snd⟩ =
    ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn (g ⊚ f') fun i => g ⊚ (f i).snd⟩

tactic: rw [h, comp_wPathCasesOn]
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this✝ : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
this : f = fun i => ⟨(f i).fst, (f i).snd⟩
h : ∀ (a : P.wp.A) (f : P.wp.B a ⟹ α), g <$$> ⟨a, f⟩ = ⟨a, g ⊚ f⟩
⊢ g <$$> ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn f' fun i => (f i).snd⟩ =
    ⟨WType.mk a fun i => (f i).fst, P.wPathCasesOn (g ⊚ f') fun i => g ⊚ (f i).snd⟩
state_after: no goals

tactic: ext i : 1
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
⊢ MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
state_after: case h
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
i : P.last.B a
⊢ (MvFunctor.map g ∘ f) i = ⟨(f i).fst, g ⊚ (f i).snd⟩

tactic: dsimp [Function.comp_def]
state_before: case h
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
i : P.last.B a
⊢ (MvFunctor.map g ∘ f) i = ⟨(f i).fst, g ⊚ (f i).snd⟩
state_after: case h
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
i : P.last.B a
⊢ g <$$> f i = ⟨(f i).fst, g ⊚ (f i).snd⟩

tactic: cases f i
state_before: case h
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
i : P.last.B a
⊢ g <$$> f i = ⟨(f i).fst, g ⊚ (f i).snd⟩
state_after: case h.mk
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
i : P.last.B a
fst✝ : P.wp.A
snd✝ : P.wp.B fst✝ ⟹ α
⊢ g <$$> ⟨fst✝, snd✝⟩ = ⟨⟨fst✝, snd✝⟩.fst, g ⊚ ⟨fst✝, snd✝⟩.snd⟩

tactic: rfl
state_before: case h.mk
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
i : P.last.B a
fst✝ : P.wp.A
snd✝ : P.wp.B fst✝ ⟹ α
⊢ g <$$> ⟨fst✝, snd✝⟩ = ⟨⟨fst✝, snd✝⟩.fst, g ⊚ ⟨fst✝, snd✝⟩.snd⟩
state_after: no goals

tactic: ext1 x
state_before: n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
⊢ f = fun i => ⟨(f i).fst, (f i).snd⟩
state_after: case h
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
x : P.last.B a
⊢ f x = ⟨(f x).fst, (f x).snd⟩

tactic: cases f x
state_before: case h
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
x : P.last.B a
⊢ f x = ⟨(f x).fst, (f x).snd⟩
state_after: case h.mk
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
x : P.last.B a
fst✝ : P.wp.A
snd✝ : P.wp.B fst✝ ⟹ α
⊢ ⟨fst✝, snd✝⟩ = ⟨⟨fst✝, snd✝⟩.fst, ⟨fst✝, snd✝⟩.snd⟩

tactic: rfl
state_before: case h.mk
n : ℕ
P : MvPFunctor.{u} (n + 1)
α β : TypeVec.{u} n
g : α ⟹ β
a : P.A
f' : P.drop.B a ⟹ α
f : P.last.B a → P.W α
this : MvFunctor.map g ∘ f = fun i => ⟨(f i).fst, g ⊚ (f i).snd⟩
x : P.last.B a
fst✝ : P.wp.A
snd✝ : P.wp.B fst✝ ⟹ α
⊢ ⟨fst✝, snd✝⟩ = ⟨⟨fst✝, snd✝⟩.fst, ⟨fst✝, snd✝⟩.snd⟩
state_after: no goals