Theorem: QuadraticForm.tmul_comp_tensorAssoc
File: Mathlib/LinearAlgebra/QuadraticForm/TensorProduct/Isometries.lean

Proof steps:
state_before: R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
⊢ comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃) = (Q₁.tmul Q₂).tmul Q₃
state_after: R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
⊢ (associatedHom R) (comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃)) =
    (associatedHom R) ((Q₁.tmul Q₂).tmul Q₃)
tactic: refine (QuadraticMap.associated_rightInverse R).injective ?_
state_before: R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
⊢ (associatedHom R) (comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃)) =
    (associatedHom R) ((Q₁.tmul Q₂).tmul Q₃)
state_after: case a.a.h.h.h.a.a.h.h.h
R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
m₁ : M₁
m₂ : M₂
m₁' : M₃
m₂' : M₁
m₁'' : M₂
m₂'' : M₃
⊢ (((TensorProduct.AlgebraTensorModule.curry
            (TensorProduct.AlgebraTensorModule.curry
              ((((TensorProduct.AlgebraTensorModule.curry
                      (TensorProduct.AlgebraTensorModule.curry
                        ((associatedHom R) (comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃)))))
                    m₁)
                  m₂)
                m₁')))
          m₂')
        m₁'')
      m₂'' =
    (((TensorProduct.AlgebraTensorModule.curry
            (TensorProduct.AlgebraTensorModule.curry
              ((((TensorProduct.AlgebraTensorModule.curry
                      (TensorProduct.AlgebraTensorModule.curry ((associatedHom R) ((Q₁.tmul Q₂).tmul Q₃))))
                    m₁)
                  m₂)
                m₁')))
          m₂')
        m₁'')
      m₂''
tactic: ext m₁ m₂ m₁' m₂' m₁'' m₂''
state_before: case a.a.h.h.h.a.a.h.h.h
R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
m₁ : M₁
m₂ : M₂
m₁' : M₃
m₂' : M₁
m₁'' : M₂
m₂'' : M₃
⊢ (((TensorProduct.AlgebraTensorModule.curry
            (TensorProduct.AlgebraTensorModule.curry
              ((((TensorProduct.AlgebraTensorModule.curry
                      (TensorProduct.AlgebraTensorModule.curry
                        ((associatedHom R) (comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃)))))
                    m₁)
                  m₂)
                m₁')))
          m₂')
        m₁'')
      m₂'' =
    (((TensorProduct.AlgebraTensorModule.curry
            (TensorProduct.AlgebraTensorModule.curry
              ((((TensorProduct.AlgebraTensorModule.curry
                      (TensorProduct.AlgebraTensorModule.curry ((associatedHom R) ((Q₁.tmul Q₂).tmul Q₃))))
                    m₁)
                  m₂)
                m₁')))
          m₂')
        m₁'')
      m₂''
state_after: case a.a.h.h.h.a.a.h.h.h
R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
m₁ : M₁
m₂ : M₂
m₁' : M₃
m₂' : M₁
m₁'' : M₂
m₂'' : M₃
⊢ (((associatedHom R) (comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃))) ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁'))
      ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'') =
    (((associatedHom R) ((Q₁.tmul Q₂).tmul Q₃)) ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁')) ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'')
tactic: dsimp [-associated_apply]
state_before: case a.a.h.h.h.a.a.h.h.h
R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
m₁ : M₁
m₂ : M₂
m₁' : M₃
m₂' : M₁
m₁'' : M₂
m₂'' : M₃
⊢ (((associatedHom R) (comp (Q₁.tmul (Q₂.tmul Q₃)) ↑(TensorProduct.assoc R M₁ M₂ M₃))) ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁'))
      ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'') =
    (((associatedHom R) ((Q₁.tmul Q₂).tmul Q₃)) ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁')) ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'')
state_after: case a.a.h.h.h.a.a.h.h.h
R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
m₁ : M₁
m₂ : M₂
m₁' : M₃
m₂' : M₁
m₁'' : M₂
m₂'' : M₃
⊢ ((LinearMap.compl₁₂ ((associated Q₁).tmul ((associated Q₂).tmul (associated Q₃))) ↑(TensorProduct.assoc R M₁ M₂ M₃)
          ↑(TensorProduct.assoc R M₁ M₂ M₃))
        ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁'))
      ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'') =
    ((((associated Q₁).tmul (associated Q₂)).tmul (associated Q₃)) ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁'))
      ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'')
tactic: simp only [associated_tmul, QuadraticMap.associated_comp]
state_before: case a.a.h.h.h.a.a.h.h.h
R : Type uR
M₁ : Type uM₁
M₂ : Type uM₂
M₃ : Type uM₃
M₄ : Type uM₄
inst✝⁹ : CommRing R
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : AddCommGroup M₄
inst✝⁴ : Module R M₁
inst✝³ : Module R M₂
inst✝² : Module R M₃
inst✝¹ : Module R M₄
inst✝ : Invertible 2
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Q₃ : QuadraticForm R M₃
m₁ : M₁
m₂ : M₂
m₁' : M₃
m₂' : M₁
m₁'' : M₂
m₂'' : M₃
⊢ ((LinearMap.compl₁₂ ((associated Q₁).tmul ((associated Q₂).tmul (associated Q₃))) ↑(TensorProduct.assoc R M₁ M₂ M₃)
          ↑(TensorProduct.assoc R M₁ M₂ M₃))
        ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁'))
      ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'') =
    ((((associated Q₁).tmul (associated Q₂)).tmul (associated Q₃)) ((m₁ ⊗ₜ[R] m₂) ⊗ₜ[R] m₁'))
      ((m₂' ⊗ₜ[R] m₁'') ⊗ₜ[R] m₂'')
state_after: no goals
tactic: exact mul_assoc _ _ _