Theorem: TensorAlgebra.lift_symm_apply
File: Mathlib/LinearAlgebra/TensorAlgebra/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
x y : FreeAlgebra R M
h : Rel R M x y
⊢ ((FreeAlgebra.lift R) ⇑f) x = ((FreeAlgebra.lift R) ⇑f) y
state_after: no goals
tactic: induction h <;>
            simp only [Algebra.smul_def, FreeAlgebra.lift_ι_apply, LinearMap.map_smulₛₗ,
              RingHom.id_apply, map_mul, AlgHom.commutes, map_add]
state_before: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
⊢ (fun F => F.toLinearMap ∘ₗ ι R) ((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩) f) = f
state_after: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
⊢ (fun F =>
        F.toLinearMap ∘ₗ
          { toFun := fun m => (RingQuot.mkAlgHom R (Rel R M)) (FreeAlgebra.ι R m), map_add' := ⋯, map_smul' := ⋯ })
      ((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩) f) =
    f
tactic: rw [ι]
state_before: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
⊢ (fun F =>
        F.toLinearMap ∘ₗ
          { toFun := fun m => (RingQuot.mkAlgHom R (Rel R M)) (FreeAlgebra.ι R m), map_add' := ⋯, map_smul' := ⋯ })
      ((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩) f) =
    f
state_after: case h
R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
x : M
⊢ ((fun F =>
          F.toLinearMap ∘ₗ
            { toFun := fun m => (RingQuot.mkAlgHom R (Rel R M)) (FreeAlgebra.ι R m), map_add' := ⋯, map_smul' := ⋯ })
        ((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩) f))
      x =
    f x
tactic: ext1 x
state_before: case h
R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
x : M
⊢ ((fun F =>
          F.toLinearMap ∘ₗ
            { toFun := fun m => (RingQuot.mkAlgHom R (Rel R M)) (FreeAlgebra.ι R m), map_add' := ⋯, map_smul' := ⋯ })
        ((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩) f))
      x =
    f x
state_after: no goals
tactic: exact (RingQuot.liftAlgHom_mkAlgHom_apply _ _ _ _).trans (FreeAlgebra.lift_ι_apply f x)
state_before: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
F : TensorAlgebra R M →ₐ[R] A
x : M
⊢ (⇑(((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩) ((fun F => F.toLinearMap ∘ₗ ι R) F)).comp
            (RingQuot.mkAlgHom R (Rel R M))) ∘
        FreeAlgebra.ι R)
      x =
    (⇑(F.comp (RingQuot.mkAlgHom R (Rel R M))) ∘ FreeAlgebra.ι R) x
state_after: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
F : TensorAlgebra R M →ₐ[R] A
x : M
⊢ (⇑(((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩)
                ((fun F =>
                    F.toLinearMap ∘ₗ
                      { toFun := fun m => (RingQuot.mkAlgHom R (Rel R M)) (FreeAlgebra.ι R m), map_add' := ⋯,
                        map_smul' := ⋯ })
                  F)).comp
            (RingQuot.mkAlgHom R (Rel R M))) ∘
        FreeAlgebra.ι R)
      x =
    (⇑(F.comp (RingQuot.mkAlgHom R (Rel R M))) ∘ FreeAlgebra.ι R) x
tactic: rw [ι]
state_before: R : Type u_1
inst✝⁴ : CommSemiring R
M : Type u_2
inst✝³ : AddCommMonoid M
inst✝² : Module R M
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
F : TensorAlgebra R M →ₐ[R] A
x : M
⊢ (⇑(((⇑(RingQuot.liftAlgHom R) ∘ fun f => ⟨(FreeAlgebra.lift R) ⇑f, ⋯⟩)
                ((fun F =>
                    F.toLinearMap ∘ₗ
                      { toFun := fun m => (RingQuot.mkAlgHom R (Rel R M)) (FreeAlgebra.ι R m), map_add' := ⋯,
                        map_smul' := ⋯ })
                  F)).comp
            (RingQuot.mkAlgHom R (Rel R M))) ∘
        FreeAlgebra.ι R)
      x =
    (⇑(F.comp (RingQuot.mkAlgHom R (Rel R M))) ∘ FreeAlgebra.ι R) x
state_after: no goals
tactic: exact
              (RingQuot.liftAlgHom_mkAlgHom_apply _ _ _ _).trans (FreeAlgebra.lift_ι_apply _ _)