Theorem: AlgebraCat.free_map
File: Mathlib/Algebra/Category/AlgebraCat/Basic.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
⊢ ∀ (X : Type u),
    { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
        (𝟙 X) =
      𝟙
        ({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.obj
          X)
state_after: R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X : Type u
⊢ { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map (𝟙 X) =
    𝟙 ({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.obj X)
tactic: intro X
state_before: R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X : Type u
⊢ { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map (𝟙 X) =
    𝟙 ({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.obj X)
state_after: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X : Type u
⊢ ⇑({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
          (𝟙 X)) ∘
      FreeAlgebra.ι R =
    ⇑(𝟙
          ({ obj := fun S => mk (FreeAlgebra R S),
                map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.obj
            X)) ∘
      FreeAlgebra.ι R
tactic: apply FreeAlgebra.hom_ext
state_before: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X : Type u
⊢ ⇑({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
          (𝟙 X)) ∘
      FreeAlgebra.ι R =
    ⇑(𝟙
          ({ obj := fun S => mk (FreeAlgebra R S),
                map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.obj
            X)) ∘
      FreeAlgebra.ι R
state_after: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X : Type u
⊢ FreeAlgebra.ι R ∘ 𝟙 X = ⇑(𝟙 (mk (FreeAlgebra R X))) ∘ FreeAlgebra.ι R
tactic: simp only [FreeAlgebra.ι_comp_lift]
state_before: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X : Type u
⊢ FreeAlgebra.ι R ∘ 𝟙 X = ⇑(𝟙 (mk (FreeAlgebra R X))) ∘ FreeAlgebra.ι R
state_after: no goals
tactic: rfl
state_before: R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
⊢ ∀ {X Y Z : Type u} (f : X ⟶ Y) (g : Y ⟶ Z),
    { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
        (f ≫ g) =
      { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map f ≫
        { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map g
state_after: R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
      (f✝ ≫ g✝) =
    { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map f✝ ≫
      { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map g✝
tactic: intros
state_before: R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
      (f✝ ≫ g✝) =
    { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map f✝ ≫
      { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map g✝
state_after: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ ⇑({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
          (f✝ ≫ g✝)) ∘
      FreeAlgebra.ι R =
    ⇑({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
            f✝ ≫
          { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
            g✝) ∘
      FreeAlgebra.ι R
tactic: apply FreeAlgebra.hom_ext
state_before: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ ⇑({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
          (f✝ ≫ g✝)) ∘
      FreeAlgebra.ι R =
    ⇑({ obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
            f✝ ≫
          { obj := fun S => mk (FreeAlgebra R S), map := fun {X Y} f => (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f) }.map
            g✝) ∘
      FreeAlgebra.ι R
state_after: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ FreeAlgebra.ι R ∘ (f✝ ≫ g✝) =
    ⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝) ≫ (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) ∘ FreeAlgebra.ι R
tactic: simp only [FreeAlgebra.ι_comp_lift]
state_before: case w
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ FreeAlgebra.ι R ∘ (f✝ ≫ g✝) =
    ⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝) ≫ (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) ∘ FreeAlgebra.ι R
state_after: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ (FreeAlgebra.ι R ∘ (f✝ ≫ g✝)) x✝ =
    (⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝) ≫ (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) ∘ FreeAlgebra.ι R) x✝
tactic: ext1
state_before: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ (FreeAlgebra.ι R ∘ (f✝ ≫ g✝)) x✝ =
    (⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝) ≫ (FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) ∘ FreeAlgebra.ι R) x✝
state_after: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ (FreeAlgebra.ι R ∘ (f✝ ≫ g✝)) x✝ =
    ((⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) ∘ ⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝))) ∘
        FreeAlgebra.ι R)
      x✝
tactic: erw [CategoryTheory.coe_comp]
state_before: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ (FreeAlgebra.ι R ∘ (f✝ ≫ g✝)) x✝ =
    ((⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) ∘ ⇑((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝))) ∘
        FreeAlgebra.ι R)
      x✝
state_after: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ FreeAlgebra.ι R (g✝ (f✝ x✝)) =
    ((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) (((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝)) (FreeAlgebra.ι R x✝))
tactic: simp only [CategoryTheory.coe_comp, Function.comp_apply, types_comp_apply]
state_before: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ FreeAlgebra.ι R (g✝ (f✝ x✝)) =
    ((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ g✝)) (((FreeAlgebra.lift R) (FreeAlgebra.ι R ∘ f✝)) (FreeAlgebra.ι R x✝))
state_after: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ FreeAlgebra.ι R (g✝ (f✝ x✝)) = (FreeAlgebra.ι R ∘ g✝) (f✝ x✝)
tactic: erw [FreeAlgebra.lift_ι_apply, FreeAlgebra.lift_ι_apply]
state_before: case w.h
R : Type u
inst✝ : CommRing R
M N U : ModuleCat R
X✝ Y✝ Z✝ : Type u
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
x✝ : X✝
⊢ FreeAlgebra.ι R (g✝ (f✝ x✝)) = (FreeAlgebra.ι R ∘ g✝) (f✝ x✝)
state_after: no goals
tactic: rfl