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

Proof steps:
state_before: I : Type u
inst✝⁵ : DecidableEq I
i : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps✝ maps : {i : I} → A i →ₐ[R] B
x y : FreeTensorAlgebra R A
r : rel R A x y
⊢ ((TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap)) x =
    ((TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap)) y
state_after: no goals
tactic: cases r with
          | id => simp
          | prod => simp
state_before: I : Type u
inst✝⁵ : DecidableEq I
i : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps π : {i : I} → A i →ₐ[R] B
⊢ (fun π i => π ∘ₐ ι R A i)
      ((fun maps => (liftAlgHom R) ⟨(TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap), ⋯⟩) π) =
    π
state_after: case h.H
I : Type u
inst✝⁵ : DecidableEq I
i✝ : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps π : {i : I} → A i →ₐ[R] B
i : I
aᵢ : A i
⊢ ((fun π i => π ∘ₐ ι R A i)
        ((fun maps => (liftAlgHom R) ⟨(TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap), ⋯⟩) π) i)
      aᵢ =
    π aᵢ
tactic: ext i aᵢ
state_before: case h.H
I : Type u
inst✝⁵ : DecidableEq I
i✝ : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps π : {i : I} → A i →ₐ[R] B
i : I
aᵢ : A i
⊢ ((fun π i => π ∘ₐ ι R A i)
        ((fun maps => (liftAlgHom R) ⟨(TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap), ⋯⟩) π) i)
      aᵢ =
    π aᵢ
state_after: no goals
tactic: aesop (add simp [ι, ι'])
state_before: I : Type u
inst✝⁵ : DecidableEq I
i : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps✝ : {i : I} → A i →ₐ[R] B
maps : FreeProduct R A →ₐ[R] B
⊢ (fun maps => (liftAlgHom R) ⟨(TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap), ⋯⟩)
      ((fun π i => π ∘ₐ ι R A i) maps) =
    maps
state_after: case w.w.H.h
I : Type u
inst✝⁵ : DecidableEq I
i✝ : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps✝ : {i : I} → A i →ₐ[R] B
maps : FreeProduct R A →ₐ[R] B
i : I
a : A i
⊢ ((((fun maps => (liftAlgHom R) ⟨(TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap), ⋯⟩)
                ((fun π i => π ∘ₐ ι R A i) maps) ∘ₐ
              RingQuot.mkAlgHom R (rel R A)).toLinearMap ∘ₗ
          TensorAlgebra.ι R) ∘ₗ
        DirectSum.lof R I A i)
      a =
    (((maps ∘ₐ RingQuot.mkAlgHom R (rel R A)).toLinearMap ∘ₗ TensorAlgebra.ι R) ∘ₗ DirectSum.lof R I A i) a
tactic: ext i a
state_before: case w.w.H.h
I : Type u
inst✝⁵ : DecidableEq I
i✝ : I
R : Type v
inst✝⁴ : CommSemiring R
A : I → Type w
inst✝³ : (i : I) → Semiring (A i)
inst✝² : (i : I) → Algebra R (A i)
B : Type w'
inst✝¹ : Semiring B
inst✝ : Algebra R B
maps✝ : {i : I} → A i →ₐ[R] B
maps : FreeProduct R A →ₐ[R] B
i : I
a : A i
⊢ ((((fun maps => (liftAlgHom R) ⟨(TensorAlgebra.lift R) (toModule R I B fun x => maps.toLinearMap), ⋯⟩)
                ((fun π i => π ∘ₐ ι R A i) maps) ∘ₐ
              RingQuot.mkAlgHom R (rel R A)).toLinearMap ∘ₗ
          TensorAlgebra.ι R) ∘ₗ
        DirectSum.lof R I A i)
      a =
    (((maps ∘ₐ RingQuot.mkAlgHom R (rel R A)).toLinearMap ∘ₗ TensorAlgebra.ι R) ∘ₗ DirectSum.lof R I A i) a
state_after: no goals
tactic: aesop (add simp [ι, ι'])