Theorem: CategoryTheory.MorphismProperty.FunctorialFactorizationData.functorCategory.Z_obj_obj
File: Mathlib/CategoryTheory/MorphismProperty/Factorization.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
          map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ } }.map
      (𝟙 j) =
    𝟙
      ({ obj := fun j => (data.factorizationData (f.hom.app j)).Z,
            map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ } }.obj
        j)
state_after: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := f.left.map (𝟙 j), right := f.right.map (𝟙 j), w := ⋯ } =
    𝟙 (data.factorizationData (f.hom.app j)).Z
tactic: dsimp
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := f.left.map (𝟙 j), right := f.right.map (𝟙 j), w := ⋯ } =
    𝟙 (data.factorizationData (f.hom.app j)).Z
state_after: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := f.left.map (𝟙 j), right := f.right.map (𝟙 j), w := ⋯ } = data.mapZ (𝟙 (Arrow.mk (f.hom.app j)))
tactic: rw [← data.mapZ_id (f.hom.app j)]
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := f.left.map (𝟙 j), right := f.right.map (𝟙 j), w := ⋯ } = data.mapZ (𝟙 (Arrow.mk (f.hom.app j)))
state_after: no goals
tactic: congr <;> simp
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
X✝ Y✝ Z✝ : J
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
          map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ } }.map
      (x✝¹ ≫ x✝) =
    { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
            map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ } }.map
        x✝¹ ≫
      { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
            map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ } }.map
        x✝
state_after: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
X✝ Y✝ Z✝ : J
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ data.mapZ { left := f.left.map (x✝¹ ≫ x✝), right := f.right.map (x✝¹ ≫ x✝), w := ⋯ } =
    data.mapZ { left := f.left.map x✝¹, right := f.right.map x✝¹, w := ⋯ } ≫
      data.mapZ { left := f.left.map x✝, right := f.right.map x✝, w := ⋯ }
tactic: dsimp
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
X✝ Y✝ Z✝ : J
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ data.mapZ { left := f.left.map (x✝¹ ≫ x✝), right := f.right.map (x✝¹ ≫ x✝), w := ⋯ } =
    data.mapZ { left := f.left.map x✝¹, right := f.right.map x✝¹, w := ⋯ } ≫
      data.mapZ { left := f.left.map x✝, right := f.right.map x✝, w := ⋯ }
state_after: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
X✝ Y✝ Z✝ : J
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ data.mapZ { left := f.left.map (x✝¹ ≫ x✝), right := f.right.map (x✝¹ ≫ x✝), w := ⋯ } =
    data.mapZ
      ({ left := f.left.map x✝¹, right := f.right.map x✝¹, w := ⋯ } ≫
        { left := f.left.map x✝, right := f.right.map x✝, w := ⋯ })
tactic: rw [← data.mapZ_comp]
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
X✝ Y✝ Z✝ : J
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ data.mapZ { left := f.left.map (x✝¹ ≫ x✝), right := f.right.map (x✝¹ ≫ x✝), w := ⋯ } =
    data.mapZ
      ({ left := f.left.map x✝¹, right := f.right.map x✝¹, w := ⋯ } ≫
        { left := f.left.map x✝, right := f.right.map x✝, w := ⋯ })
state_after: no goals
tactic: congr <;> simp
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ ((fun f =>
              { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                map_comp := ⋯ })
            X✝).map
        α ≫
      (fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ }) x✝ =
    (fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ }) x✝¹ ≫
      ((fun f =>
              { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                map_comp := ⋯ })
            Y✝).map
        α
state_after: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ data.mapZ { left := X✝.left.map α, right := X✝.right.map α, w := ⋯ } ≫
      data.mapZ { left := τ.left.app x✝, right := τ.right.app x✝, w := ⋯ } =
    data.mapZ { left := τ.left.app x✝¹, right := τ.right.app x✝¹, w := ⋯ } ≫
      data.mapZ { left := Y✝.left.map α, right := Y✝.right.map α, w := ⋯ }
tactic: dsimp
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ data.mapZ { left := X✝.left.map α, right := X✝.right.map α, w := ⋯ } ≫
      data.mapZ { left := τ.left.app x✝, right := τ.right.app x✝, w := ⋯ } =
    data.mapZ { left := τ.left.app x✝¹, right := τ.right.app x✝¹, w := ⋯ } ≫
      data.mapZ { left := Y✝.left.map α, right := Y✝.right.map α, w := ⋯ }
state_after: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ data.mapZ
      ({ left := X✝.left.map α, right := X✝.right.map α, w := ⋯ } ≫
        { left := τ.left.app x✝, right := τ.right.app x✝, w := ⋯ }) =
    data.mapZ
      ({ left := τ.left.app x✝¹, right := τ.right.app x✝¹, w := ⋯ } ≫
        { left := Y✝.left.map α, right := Y✝.right.map α, w := ⋯ })
tactic: rw [← data.mapZ_comp, ← data.mapZ_comp]
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ data.mapZ
      ({ left := X✝.left.map α, right := X✝.right.map α, w := ⋯ } ≫
        { left := τ.left.app x✝, right := τ.right.app x✝, w := ⋯ }) =
    data.mapZ
      ({ left := τ.left.app x✝¹, right := τ.right.app x✝¹, w := ⋯ } ≫
        { left := Y✝.left.map α, right := Y✝.right.map α, w := ⋯ })
state_after: case e_φ
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ { left := X✝.left.map α, right := X✝.right.map α, w := ⋯ } ≫
      { left := τ.left.app x✝, right := τ.right.app x✝, w := ⋯ } =
    { left := τ.left.app x✝¹, right := τ.right.app x✝¹, w := ⋯ } ≫
      { left := Y✝.left.map α, right := Y✝.right.map α, w := ⋯ }
tactic: congr 1
state_before: case e_φ
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ : Arrow (J ⥤ C)
τ : X✝ ⟶ Y✝
x✝¹ x✝ : J
α : x✝¹ ⟶ x✝
⊢ { left := X✝.left.map α, right := X✝.right.map α, w := ⋯ } ≫
      { left := τ.left.app x✝, right := τ.right.app x✝, w := ⋯ } =
    { left := τ.left.app x✝¹, right := τ.right.app x✝¹, w := ⋯ } ≫
      { left := Y✝.left.map α, right := Y✝.right.map α, w := ⋯ }
state_after: no goals
tactic: ext <;> simp
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
⊢ {
          obj := fun f =>
            { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
              map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
              map_comp := ⋯ },
          map := fun {X Y} τ =>
            { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
              naturality := ⋯ } }.map
      (𝟙 f) =
    𝟙
      ({
            obj := fun f =>
              { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                map_comp := ⋯ },
            map := fun {X Y} τ =>
              { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                naturality := ⋯ } }.obj
        f)
state_after: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ ({
              obj := fun f =>
                { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                  map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                  map_comp := ⋯ },
              map := fun {X Y} τ =>
                { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                  naturality := ⋯ } }.map
          (𝟙 f)).app
      j =
    (𝟙
          ({
                obj := fun f =>
                  { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                    map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ },
                    map_id := ⋯, map_comp := ⋯ },
                map := fun {X Y} τ =>
                  { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                    naturality := ⋯ } }.obj
            f)).app
      j
tactic: ext j
state_before: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ ({
              obj := fun f =>
                { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                  map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                  map_comp := ⋯ },
              map := fun {X Y} τ =>
                { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                  naturality := ⋯ } }.map
          (𝟙 f)).app
      j =
    (𝟙
          ({
                obj := fun f =>
                  { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                    map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ },
                    map_id := ⋯, map_comp := ⋯ },
                map := fun {X Y} τ =>
                  { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                    naturality := ⋯ } }.obj
            f)).app
      j
state_after: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := 𝟙 (f.left.obj j), right := 𝟙 (f.right.obj j), w := ⋯ } =
    𝟙 (data.factorizationData (f.hom.app j)).Z
tactic: dsimp
state_before: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := 𝟙 (f.left.obj j), right := 𝟙 (f.right.obj j), w := ⋯ } =
    𝟙 (data.factorizationData (f.hom.app j)).Z
state_after: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := 𝟙 (f.left.obj j), right := 𝟙 (f.right.obj j), w := ⋯ } = data.mapZ (𝟙 (Arrow.mk (f.hom.app j)))
tactic: rw [← data.mapZ_id]
state_before: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
f : Arrow (J ⥤ C)
j : J
⊢ data.mapZ { left := 𝟙 (f.left.obj j), right := 𝟙 (f.right.obj j), w := ⋯ } = data.mapZ (𝟙 (Arrow.mk (f.hom.app j)))
state_after: no goals
tactic: congr 1
state_before: C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ {
          obj := fun f =>
            { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
              map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
              map_comp := ⋯ },
          map := fun {X Y} τ =>
            { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
              naturality := ⋯ } }.map
      (f ≫ g) =
    {
            obj := fun f =>
              { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                map_comp := ⋯ },
            map := fun {X Y} τ =>
              { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                naturality := ⋯ } }.map
        f ≫
      {
            obj := fun f =>
              { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                map_comp := ⋯ },
            map := fun {X Y} τ =>
              { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                naturality := ⋯ } }.map
        g
state_after: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
j : J
⊢ ({
              obj := fun f =>
                { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                  map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                  map_comp := ⋯ },
              map := fun {X Y} τ =>
                { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                  naturality := ⋯ } }.map
          (f ≫ g)).app
      j =
    ({
                obj := fun f =>
                  { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                    map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ },
                    map_id := ⋯, map_comp := ⋯ },
                map := fun {X Y} τ =>
                  { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                    naturality := ⋯ } }.map
            f ≫
          {
                obj := fun f =>
                  { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                    map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ },
                    map_id := ⋯, map_comp := ⋯ },
                map := fun {X Y} τ =>
                  { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                    naturality := ⋯ } }.map
            g).app
      j
tactic: ext j
state_before: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
j : J
⊢ ({
              obj := fun f =>
                { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                  map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ }, map_id := ⋯,
                  map_comp := ⋯ },
              map := fun {X Y} τ =>
                { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                  naturality := ⋯ } }.map
          (f ≫ g)).app
      j =
    ({
                obj := fun f =>
                  { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                    map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ },
                    map_id := ⋯, map_comp := ⋯ },
                map := fun {X Y} τ =>
                  { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                    naturality := ⋯ } }.map
            f ≫
          {
                obj := fun f =>
                  { obj := fun j => (data.factorizationData (f.hom.app j)).Z,
                    map := fun {X Y} φ => data.mapZ { left := f.left.map φ, right := f.right.map φ, w := ⋯ },
                    map_id := ⋯, map_comp := ⋯ },
                map := fun {X Y} τ =>
                  { app := fun j => data.mapZ { left := τ.left.app j, right := τ.right.app j, w := ⋯ },
                    naturality := ⋯ } }.map
            g).app
      j
state_after: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
j : J
⊢ data.mapZ { left := f.left.app j ≫ g.left.app j, right := f.right.app j ≫ g.right.app j, w := ⋯ } =
    data.mapZ { left := f.left.app j, right := f.right.app j, w := ⋯ } ≫
      data.mapZ { left := g.left.app j, right := g.right.app j, w := ⋯ }
tactic: dsimp
state_before: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
j : J
⊢ data.mapZ { left := f.left.app j ≫ g.left.app j, right := f.right.app j ≫ g.right.app j, w := ⋯ } =
    data.mapZ { left := f.left.app j, right := f.right.app j, w := ⋯ } ≫
      data.mapZ { left := g.left.app j, right := g.right.app j, w := ⋯ }
state_after: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
j : J
⊢ data.mapZ { left := f.left.app j ≫ g.left.app j, right := f.right.app j ≫ g.right.app j, w := ⋯ } =
    data.mapZ
      ({ left := f.left.app j, right := f.right.app j, w := ⋯ } ≫
        { left := g.left.app j, right := g.right.app j, w := ⋯ })
tactic: rw [← data.mapZ_comp]
state_before: case w.h
C : Type u_1
inst✝¹ : Category.{?u.13544, u_1} C
W₁ W₂ : MorphismProperty C
data : W₁.FunctorialFactorizationData W₂
J : Type u_2
inst✝ : Category.{?u.13627, u_2} J
X✝ Y✝ Z✝ : Arrow (J ⥤ C)
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
j : J
⊢ data.mapZ { left := f.left.app j ≫ g.left.app j, right := f.right.app j ≫ g.right.app j, w := ⋯ } =
    data.mapZ
      ({ left := f.left.app j, right := f.right.app j, w := ⋯ } ≫
        { left := g.left.app j, right := g.right.app j, w := ⋯ })
state_after: no goals
tactic: congr 1