[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
motive : M ⊗[R] N → Prop
z : M ⊗[R] N
zero : motive 0
tmul : ∀ (x : M) (y : N), motive (x ⊗ₜ[R] y)
add : ∀ (x y : M ⊗[R] N), motive x → motive y → motive (x + y)
x : FreeAddMonoid (M × N)
x✝ : M × N
y : FreeAddMonoid (M × N)
ih : motive ↑y
m : M
n : N
⊢ motive ↑(FreeAddMonoid.of (m, n) + y)
[PROOFSTEP]
rw [AddCon.coe_add]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
motive : M ⊗[R] N → Prop
z : M ⊗[R] N
zero : motive 0
tmul : ∀ (x : M) (y : N), motive (x ⊗ₜ[R] y)
add : ∀ (x y : M ⊗[R] N), motive x → motive y → motive (x + y)
x : FreeAddMonoid (M × N)
x✝ : M × N
y : FreeAddMonoid (M × N)
ih : motive ↑y
m : M
n : N
⊢ motive (↑(FreeAddMonoid.of (m, n)) + ↑y)
[PROOFSTEP]
exact add _ _ (tmul ..) ih
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
⊢ (r • m) ⊗ₜ[R] n = m ⊗ₜ[R] (r • n)
[PROOFSTEP]
conv_lhs => rw [← one_smul R m]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
| (r • m) ⊗ₜ[R] n
[PROOFSTEP]
rw [← one_smul R m]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
| (r • m) ⊗ₜ[R] n
[PROOFSTEP]
rw [← one_smul R m]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
| (r • m) ⊗ₜ[R] n
[PROOFSTEP]
rw [← one_smul R m]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
⊢ (r • 1 • m) ⊗ₜ[R] n = m ⊗ₜ[R] (r • n)
[PROOFSTEP]
conv_rhs => rw [← one_smul R n]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
| m ⊗ₜ[R] (r • n)
[PROOFSTEP]
rw [← one_smul R n]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
| m ⊗ₜ[R] (r • n)
[PROOFSTEP]
rw [← one_smul R n]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
| m ⊗ₜ[R] (r • n)
[PROOFSTEP]
rw [← one_smul R n]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
⊢ (r • 1 • m) ⊗ₜ[R] n = m ⊗ₜ[R] (r • 1 • n)
[PROOFSTEP]
rw [← smul_assoc, ← smul_assoc]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMul R' R
inst✝² : IsScalarTower R' R M
inst✝¹ : DistribMulAction R' N
inst✝ : IsScalarTower R' R N
r : R'
m : M
n : N
⊢ ((r • 1) • m) ⊗ₜ[R] n = m ⊗ₜ[R] ((r • 1) • n)
[PROOFSTEP]
exact Quotient.sound' <| AddConGen.Rel.of _ _ <| Eqv.of_smul _ _ _
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r : R'
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
n : N
⊢ ↑(SMul.aux r) (FreeAddMonoid.of (0, n)) = ↑(SMul.aux r) 0
[PROOFSTEP]
simp_rw [map_zero, SMul.aux_of, smul_zero, zero_tmul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r : R'
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m : M
⊢ ↑(SMul.aux r) (FreeAddMonoid.of (m, 0)) = ↑(SMul.aux r) 0
[PROOFSTEP]
simp_rw [map_zero, SMul.aux_of, tmul_zero]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r : R'
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m₁ m₂ : M
n : N
⊢ ↑(SMul.aux r) (FreeAddMonoid.of (m₁, n) + FreeAddMonoid.of (m₂, n)) = ↑(SMul.aux r) (FreeAddMonoid.of (m₁ + m₂, n))
[PROOFSTEP]
simp_rw [map_add, SMul.aux_of, smul_add, add_tmul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r : R'
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m : M
n₁ n₂ : N
⊢ ↑(SMul.aux r) (FreeAddMonoid.of (m, n₁) + FreeAddMonoid.of (m, n₂)) = ↑(SMul.aux r) (FreeAddMonoid.of (m, n₁ + n₂))
[PROOFSTEP]
simp_rw [map_add, SMul.aux_of, tmul_add]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r : R'
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
s : R
m : M
n : N
⊢ ↑(SMul.aux r) (FreeAddMonoid.of (s • m, n)) = ↑(SMul.aux r) (FreeAddMonoid.of (m, s • n))
[PROOFSTEP]
rw [SMul.aux_of, SMul.aux_of, ← smul_comm, smul_tmul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r : R'
x✝ y✝ : FreeAddMonoid (M × N)
hxy : Eqv R M N x✝ y✝
x y : FreeAddMonoid (M × N)
⊢ ↑(SMul.aux r) (x + y) = ↑(SMul.aux r) (y + x)
[PROOFSTEP]
simp_rw [map_add, add_comm]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
⊢ 0 • 0 = 0
[PROOFSTEP]
rw [TensorProduct.smul_zero]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
m : M
n : N
⊢ 0 • m ⊗ₜ[R] n = 0
[PROOFSTEP]
rw [this, zero_smul, zero_tmul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x✝ : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
x y : M ⊗[R] N
ihx : 0 • x = 0
ihy : 0 • y = 0
⊢ 0 • (x + y) = 0
[PROOFSTEP]
rw [TensorProduct.smul_add, ihx, ihy, add_zero]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x : M ⊗[R] N
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
⊢ 1 • 0 = 0
[PROOFSTEP]
rw [TensorProduct.smul_zero]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x : M ⊗[R] N
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
m : M
n : N
⊢ 1 • m ⊗ₜ[R] n = m ⊗ₜ[R] n
[PROOFSTEP]
rw [this, one_smul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x✝ : M ⊗[R] N
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
x y : M ⊗[R] N
ihx : 1 • x = x
ihy : 1 • y = y
⊢ 1 • (x + y) = x + y
[PROOFSTEP]
rw [TensorProduct.smul_add, ihx, ihy]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r s : R''
x : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
⊢ (r + s) • 0 = r • 0 + s • 0
[PROOFSTEP]
simp_rw [TensorProduct.smul_zero, add_zero]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r s : R''
x : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
m : M
n : N
⊢ (r + s) • m ⊗ₜ[R] n = r • m ⊗ₜ[R] n + s • m ⊗ₜ[R] n
[PROOFSTEP]
simp_rw [this, add_smul, add_tmul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r s : R''
x✝ : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
x y : M ⊗[R] N
ihx : (r + s) • x = r • x + s • x
ihy : (r + s) • y = r • y + s • y
⊢ (r + s) • (x + y) = r • (x + y) + s • (x + y)
[PROOFSTEP]
simp_rw [TensorProduct.smul_add]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r s : R''
x✝ : M ⊗[R] N
this : ∀ (r : R'') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
x y : M ⊗[R] N
ihx : (r + s) • x = r • x + s • x
ihy : (r + s) • y = r • y + s • y
⊢ (r + s) • x + (r + s) • y = r • x + r • y + (s • x + s • y)
[PROOFSTEP]
rw [ihx, ihy, add_add_add_comm]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
src✝¹ : AddCommSemigroup (M ⊗[R] N) := addCommSemigroup M N
src✝ : AddZeroClass (M ⊗[R] N) := addZeroClass M N
⊢ ∀ (x : M ⊗[R] N), (fun n v => n • v) 0 x = 0
[PROOFSTEP]
simp [TensorProduct.zero_smul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
src✝¹ : AddCommSemigroup (M ⊗[R] N) := addCommSemigroup M N
src✝ : AddZeroClass (M ⊗[R] N) := addZeroClass M N
⊢ ∀ (n : ℕ) (x : M ⊗[R] N), (fun n v => n • v) (n + 1) x = x + (fun n v => n • v) n x
[PROOFSTEP]
simp only [TensorProduct.one_smul, TensorProduct.add_smul, add_comm, forall_const]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
r s : R'
x : M ⊗[R] N
⊢ (r * s) • 0 = r • s • 0
[PROOFSTEP]
simp_rw [TensorProduct.smul_zero]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
r s : R'
x : M ⊗[R] N
m : M
n : N
⊢ (r * s) • m ⊗ₜ[R] n = r • s • m ⊗ₜ[R] n
[PROOFSTEP]
simp_rw [this, mul_smul]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
r s : R'
x✝ x y : M ⊗[R] N
ihx : (r * s) • x = r • s • x
ihy : (r * s) • y = r • s • y
⊢ (r * s) • (x + y) = r • s • (x + y)
[PROOFSTEP]
simp_rw [TensorProduct.smul_add]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
this : ∀ (r : R') (m : M) (n : N), r • m ⊗ₜ[R] n = (r • m) ⊗ₜ[R] n
r s : R'
x✝ x y : M ⊗[R] N
ihx : (r * s) • x = r • s • x
ihy : (r * s) • y = r • s • y
⊢ (r * s) • x + (r * s) • y = r • s • x + r • s • y
[PROOFSTEP]
rw [ihx, ihy]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
r s : R
m : M
n : N
⊢ (r • m) ⊗ₜ[R] (s • n) = (r * s) • m ⊗ₜ[R] n
[PROOFSTEP]
simp_rw [smul_tmul, tmul_smul, mul_smul]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMulCommClass R R' M
inst✝² : SMulCommClass R R'' M
inst✝¹ : Module R''ᵐᵒᵖ M
inst✝ : IsCentralScalar R'' M
r : R''
x : M ⊗[R] N
⊢ MulOpposite.op r • 0 = r • 0
[PROOFSTEP]
rw [smul_zero, smul_zero]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMulCommClass R R' M
inst✝² : SMulCommClass R R'' M
inst✝¹ : Module R''ᵐᵒᵖ M
inst✝ : IsCentralScalar R'' M
r : R''
x✝ : M ⊗[R] N
x : M
y : N
⊢ MulOpposite.op r • x ⊗ₜ[R] y = r • x ⊗ₜ[R] y
[PROOFSTEP]
rw [smul_tmul', smul_tmul', op_smul_eq_smul]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
inst✝³ : SMulCommClass R R' M
inst✝² : SMulCommClass R R'' M
inst✝¹ : Module R''ᵐᵒᵖ M
inst✝ : IsCentralScalar R'' M
r : R''
x✝ x y : M ⊗[R] N
hx : MulOpposite.op r • x = r • x
hy : MulOpposite.op r • y = r • y
⊢ MulOpposite.op r • (x + y) = r • (x + y)
[PROOFSTEP]
rw [smul_add, smul_add, hx, hy]
[GOAL]
R : Type u_1
inst✝²⁰ : CommSemiring R
R' : Type u_2
inst✝¹⁹ : Monoid R'
R'' : Type u_3
inst✝¹⁸ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : AddCommMonoid Q
inst✝¹³ : AddCommMonoid S
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
inst✝⁹ : Module R Q
inst✝⁸ : Module R S
inst✝⁷ : DistribMulAction R' M
inst✝⁶ : Module R'' M
inst✝⁵ : SMulCommClass R R' M
inst✝⁴ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝³ : Monoid R'₂
inst✝² : DistribMulAction R'₂ M
inst✝¹ : SMulCommClass R R'₂ M
inst✝ : SMulCommClass R' R'₂ M
r' : R'
r'₂ : R'₂
x : M ⊗[R] N
⊢ r' • r'₂ • 0 = r'₂ • r' • 0
[PROOFSTEP]
simp_rw [TensorProduct.smul_zero]
[GOAL]
R : Type u_1
inst✝²⁰ : CommSemiring R
R' : Type u_2
inst✝¹⁹ : Monoid R'
R'' : Type u_3
inst✝¹⁸ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : AddCommMonoid Q
inst✝¹³ : AddCommMonoid S
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
inst✝⁹ : Module R Q
inst✝⁸ : Module R S
inst✝⁷ : DistribMulAction R' M
inst✝⁶ : Module R'' M
inst✝⁵ : SMulCommClass R R' M
inst✝⁴ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝³ : Monoid R'₂
inst✝² : DistribMulAction R'₂ M
inst✝¹ : SMulCommClass R R'₂ M
inst✝ : SMulCommClass R' R'₂ M
r' : R'
r'₂ : R'₂
x : M ⊗[R] N
m : M
n : N
⊢ r' • r'₂ • m ⊗ₜ[R] n = r'₂ • r' • m ⊗ₜ[R] n
[PROOFSTEP]
simp_rw [smul_tmul', smul_comm]
[GOAL]
R : Type u_1
inst✝²⁰ : CommSemiring R
R' : Type u_2
inst✝¹⁹ : Monoid R'
R'' : Type u_3
inst✝¹⁸ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : AddCommMonoid Q
inst✝¹³ : AddCommMonoid S
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
inst✝⁹ : Module R Q
inst✝⁸ : Module R S
inst✝⁷ : DistribMulAction R' M
inst✝⁶ : Module R'' M
inst✝⁵ : SMulCommClass R R' M
inst✝⁴ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝³ : Monoid R'₂
inst✝² : DistribMulAction R'₂ M
inst✝¹ : SMulCommClass R R'₂ M
inst✝ : SMulCommClass R' R'₂ M
r' : R'
r'₂ : R'₂
x✝ x y : M ⊗[R] N
ihx : r' • r'₂ • x = r'₂ • r' • x
ihy : r' • r'₂ • y = r'₂ • r' • y
⊢ r' • r'₂ • (x + y) = r'₂ • r' • (x + y)
[PROOFSTEP]
simp_rw [TensorProduct.smul_add]
[GOAL]
R : Type u_1
inst✝²⁰ : CommSemiring R
R' : Type u_2
inst✝¹⁹ : Monoid R'
R'' : Type u_3
inst✝¹⁸ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : AddCommMonoid Q
inst✝¹³ : AddCommMonoid S
inst✝¹² : Module R M
inst✝¹¹ : Module R N
inst✝¹⁰ : Module R P
inst✝⁹ : Module R Q
inst✝⁸ : Module R S
inst✝⁷ : DistribMulAction R' M
inst✝⁶ : Module R'' M
inst✝⁵ : SMulCommClass R R' M
inst✝⁴ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝³ : Monoid R'₂
inst✝² : DistribMulAction R'₂ M
inst✝¹ : SMulCommClass R R'₂ M
inst✝ : SMulCommClass R' R'₂ M
r' : R'
r'₂ : R'₂
x✝ x y : M ⊗[R] N
ihx : r' • r'₂ • x = r'₂ • r' • x
ihy : r' • r'₂ • y = r'₂ • r' • y
⊢ r' • r'₂ • x + r' • r'₂ • y = r'₂ • r' • x + r'₂ • r' • y
[PROOFSTEP]
rw [ihx, ihy]
[GOAL]
R : Type u_1
inst✝²¹ : CommSemiring R
R' : Type u_2
inst✝²⁰ : Monoid R'
R'' : Type u_3
inst✝¹⁹ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : AddCommMonoid N
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : AddCommMonoid Q
inst✝¹⁴ : AddCommMonoid S
inst✝¹³ : Module R M
inst✝¹² : Module R N
inst✝¹¹ : Module R P
inst✝¹⁰ : Module R Q
inst✝⁹ : Module R S
inst✝⁸ : DistribMulAction R' M
inst✝⁷ : Module R'' M
inst✝⁶ : SMulCommClass R R' M
inst✝⁵ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝⁴ : Monoid R'₂
inst✝³ : DistribMulAction R'₂ M
inst✝² : SMulCommClass R R'₂ M
inst✝¹ : SMul R'₂ R'
inst✝ : IsScalarTower R'₂ R' M
s : R'₂
r : R'
x : M ⊗[R] N
⊢ (s • r) • 0 = s • r • 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝²¹ : CommSemiring R
R' : Type u_2
inst✝²⁰ : Monoid R'
R'' : Type u_3
inst✝¹⁹ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : AddCommMonoid N
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : AddCommMonoid Q
inst✝¹⁴ : AddCommMonoid S
inst✝¹³ : Module R M
inst✝¹² : Module R N
inst✝¹¹ : Module R P
inst✝¹⁰ : Module R Q
inst✝⁹ : Module R S
inst✝⁸ : DistribMulAction R' M
inst✝⁷ : Module R'' M
inst✝⁶ : SMulCommClass R R' M
inst✝⁵ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝⁴ : Monoid R'₂
inst✝³ : DistribMulAction R'₂ M
inst✝² : SMulCommClass R R'₂ M
inst✝¹ : SMul R'₂ R'
inst✝ : IsScalarTower R'₂ R' M
s : R'₂
r : R'
x : M ⊗[R] N
m : M
n : N
⊢ (s • r) • m ⊗ₜ[R] n = s • r • m ⊗ₜ[R] n
[PROOFSTEP]
rw [smul_tmul', smul_tmul', smul_tmul', smul_assoc]
[GOAL]
R : Type u_1
inst✝²¹ : CommSemiring R
R' : Type u_2
inst✝²⁰ : Monoid R'
R'' : Type u_3
inst✝¹⁹ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : AddCommMonoid N
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : AddCommMonoid Q
inst✝¹⁴ : AddCommMonoid S
inst✝¹³ : Module R M
inst✝¹² : Module R N
inst✝¹¹ : Module R P
inst✝¹⁰ : Module R Q
inst✝⁹ : Module R S
inst✝⁸ : DistribMulAction R' M
inst✝⁷ : Module R'' M
inst✝⁶ : SMulCommClass R R' M
inst✝⁵ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝⁴ : Monoid R'₂
inst✝³ : DistribMulAction R'₂ M
inst✝² : SMulCommClass R R'₂ M
inst✝¹ : SMul R'₂ R'
inst✝ : IsScalarTower R'₂ R' M
s : R'₂
r : R'
x✝ x y : M ⊗[R] N
ihx : (s • r) • x = s • r • x
ihy : (s • r) • y = s • r • y
⊢ (s • r) • (x + y) = s • r • (x + y)
[PROOFSTEP]
rw [smul_add, smul_add, smul_add, ihx, ihy]
[GOAL]
R : Type u_1
inst✝²⁵ : CommSemiring R
R' : Type u_2
inst✝²⁴ : Monoid R'
R'' : Type u_3
inst✝²³ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝²² : AddCommMonoid M
inst✝²¹ : AddCommMonoid N
inst✝²⁰ : AddCommMonoid P
inst✝¹⁹ : AddCommMonoid Q
inst✝¹⁸ : AddCommMonoid S
inst✝¹⁷ : Module R M
inst✝¹⁶ : Module R N
inst✝¹⁵ : Module R P
inst✝¹⁴ : Module R Q
inst✝¹³ : Module R S
inst✝¹² : DistribMulAction R' M
inst✝¹¹ : Module R'' M
inst✝¹⁰ : SMulCommClass R R' M
inst✝⁹ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝⁸ : Monoid R'₂
inst✝⁷ : DistribMulAction R'₂ M
inst✝⁶ : SMulCommClass R R'₂ M
inst✝⁵ : SMul R'₂ R'
inst✝⁴ : DistribMulAction R'₂ N
inst✝³ : DistribMulAction R' N
inst✝² : CompatibleSMul R R'₂ M N
inst✝¹ : CompatibleSMul R R' M N
inst✝ : IsScalarTower R'₂ R' N
s : R'₂
r : R'
x : M ⊗[R] N
⊢ (s • r) • 0 = s • r • 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝²⁵ : CommSemiring R
R' : Type u_2
inst✝²⁴ : Monoid R'
R'' : Type u_3
inst✝²³ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝²² : AddCommMonoid M
inst✝²¹ : AddCommMonoid N
inst✝²⁰ : AddCommMonoid P
inst✝¹⁹ : AddCommMonoid Q
inst✝¹⁸ : AddCommMonoid S
inst✝¹⁷ : Module R M
inst✝¹⁶ : Module R N
inst✝¹⁵ : Module R P
inst✝¹⁴ : Module R Q
inst✝¹³ : Module R S
inst✝¹² : DistribMulAction R' M
inst✝¹¹ : Module R'' M
inst✝¹⁰ : SMulCommClass R R' M
inst✝⁹ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝⁸ : Monoid R'₂
inst✝⁷ : DistribMulAction R'₂ M
inst✝⁶ : SMulCommClass R R'₂ M
inst✝⁵ : SMul R'₂ R'
inst✝⁴ : DistribMulAction R'₂ N
inst✝³ : DistribMulAction R' N
inst✝² : CompatibleSMul R R'₂ M N
inst✝¹ : CompatibleSMul R R' M N
inst✝ : IsScalarTower R'₂ R' N
s : R'₂
r : R'
x : M ⊗[R] N
m : M
n : N
⊢ (s • r) • m ⊗ₜ[R] n = s • r • m ⊗ₜ[R] n
[PROOFSTEP]
rw [← tmul_smul, ← tmul_smul, ← tmul_smul, smul_assoc]
[GOAL]
R : Type u_1
inst✝²⁵ : CommSemiring R
R' : Type u_2
inst✝²⁴ : Monoid R'
R'' : Type u_3
inst✝²³ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝²² : AddCommMonoid M
inst✝²¹ : AddCommMonoid N
inst✝²⁰ : AddCommMonoid P
inst✝¹⁹ : AddCommMonoid Q
inst✝¹⁸ : AddCommMonoid S
inst✝¹⁷ : Module R M
inst✝¹⁶ : Module R N
inst✝¹⁵ : Module R P
inst✝¹⁴ : Module R Q
inst✝¹³ : Module R S
inst✝¹² : DistribMulAction R' M
inst✝¹¹ : Module R'' M
inst✝¹⁰ : SMulCommClass R R' M
inst✝⁹ : SMulCommClass R R'' M
R'₂ : Type u_9
inst✝⁸ : Monoid R'₂
inst✝⁷ : DistribMulAction R'₂ M
inst✝⁶ : SMulCommClass R R'₂ M
inst✝⁵ : SMul R'₂ R'
inst✝⁴ : DistribMulAction R'₂ N
inst✝³ : DistribMulAction R' N
inst✝² : CompatibleSMul R R'₂ M N
inst✝¹ : CompatibleSMul R R' M N
inst✝ : IsScalarTower R'₂ R' N
s : R'₂
r : R'
x✝ x y : M ⊗[R] N
ihx : (s • r) • x = s • r • x
ihy : (s • r) • y = s • r • y
⊢ (s • r) • (x + y) = s • r • (x + y)
[PROOFSTEP]
rw [smul_add, smul_add, smul_add, ihx, ihy]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
c : R
m : M
n : N
⊢ (fun x x_1 => x ⊗ₜ[R] x_1) (c • m) n = c • (fun x x_1 => x ⊗ₜ[R] x_1) m n
[PROOFSTEP]
simp_rw [smul_tmul, tmul_smul]
[GOAL]
R : Type u_1
inst✝¹⁷ : CommSemiring R
R' : Type u_2
inst✝¹⁶ : Monoid R'
R'' : Type u_3
inst✝¹⁵ : Semiring R''
M : Type u_4
N : Type u_5
P✝ : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid N
inst✝¹² : AddCommMonoid P✝
inst✝¹¹ : AddCommMonoid Q
inst✝¹⁰ : AddCommMonoid S
inst✝⁹ : Module R M
inst✝⁸ : Module R N
inst✝⁷ : Module R P✝
inst✝⁶ : Module R Q
inst✝⁵ : Module R S
inst✝⁴ : DistribMulAction R' M
inst✝³ : Module R'' M
inst✝² : SMulCommClass R R' M
inst✝¹ : SMulCommClass R R'' M
x₁ : M
x₂ : N
P : Prop
inst✝ : Decidable P
⊢ (if P then x₁ else 0) ⊗ₜ[R] x₂ = if P then x₁ ⊗ₜ[R] x₂ else 0
[PROOFSTEP]
split_ifs
[GOAL]
case pos
R : Type u_1
inst✝¹⁷ : CommSemiring R
R' : Type u_2
inst✝¹⁶ : Monoid R'
R'' : Type u_3
inst✝¹⁵ : Semiring R''
M : Type u_4
N : Type u_5
P✝ : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid N
inst✝¹² : AddCommMonoid P✝
inst✝¹¹ : AddCommMonoid Q
inst✝¹⁰ : AddCommMonoid S
inst✝⁹ : Module R M
inst✝⁸ : Module R N
inst✝⁷ : Module R P✝
inst✝⁶ : Module R Q
inst✝⁵ : Module R S
inst✝⁴ : DistribMulAction R' M
inst✝³ : Module R'' M
inst✝² : SMulCommClass R R' M
inst✝¹ : SMulCommClass R R'' M
x₁ : M
x₂ : N
P : Prop
inst✝ : Decidable P
h✝ : P
⊢ x₁ ⊗ₜ[R] x₂ = x₁ ⊗ₜ[R] x₂
[PROOFSTEP]
simp
[GOAL]
case neg
R : Type u_1
inst✝¹⁷ : CommSemiring R
R' : Type u_2
inst✝¹⁶ : Monoid R'
R'' : Type u_3
inst✝¹⁵ : Semiring R''
M : Type u_4
N : Type u_5
P✝ : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid N
inst✝¹² : AddCommMonoid P✝
inst✝¹¹ : AddCommMonoid Q
inst✝¹⁰ : AddCommMonoid S
inst✝⁹ : Module R M
inst✝⁸ : Module R N
inst✝⁷ : Module R P✝
inst✝⁶ : Module R Q
inst✝⁵ : Module R S
inst✝⁴ : DistribMulAction R' M
inst✝³ : Module R'' M
inst✝² : SMulCommClass R R' M
inst✝¹ : SMulCommClass R R'' M
x₁ : M
x₂ : N
P : Prop
inst✝ : Decidable P
h✝ : ¬P
⊢ 0 ⊗ₜ[R] x₂ = 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁷ : CommSemiring R
R' : Type u_2
inst✝¹⁶ : Monoid R'
R'' : Type u_3
inst✝¹⁵ : Semiring R''
M : Type u_4
N : Type u_5
P✝ : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid N
inst✝¹² : AddCommMonoid P✝
inst✝¹¹ : AddCommMonoid Q
inst✝¹⁰ : AddCommMonoid S
inst✝⁹ : Module R M
inst✝⁸ : Module R N
inst✝⁷ : Module R P✝
inst✝⁶ : Module R Q
inst✝⁵ : Module R S
inst✝⁴ : DistribMulAction R' M
inst✝³ : Module R'' M
inst✝² : SMulCommClass R R' M
inst✝¹ : SMulCommClass R R'' M
x₁ : M
x₂ : N
P : Prop
inst✝ : Decidable P
⊢ (x₁ ⊗ₜ[R] if P then x₂ else 0) = if P then x₁ ⊗ₜ[R] x₂ else 0
[PROOFSTEP]
split_ifs
[GOAL]
case pos
R : Type u_1
inst✝¹⁷ : CommSemiring R
R' : Type u_2
inst✝¹⁶ : Monoid R'
R'' : Type u_3
inst✝¹⁵ : Semiring R''
M : Type u_4
N : Type u_5
P✝ : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid N
inst✝¹² : AddCommMonoid P✝
inst✝¹¹ : AddCommMonoid Q
inst✝¹⁰ : AddCommMonoid S
inst✝⁹ : Module R M
inst✝⁸ : Module R N
inst✝⁷ : Module R P✝
inst✝⁶ : Module R Q
inst✝⁵ : Module R S
inst✝⁴ : DistribMulAction R' M
inst✝³ : Module R'' M
inst✝² : SMulCommClass R R' M
inst✝¹ : SMulCommClass R R'' M
x₁ : M
x₂ : N
P : Prop
inst✝ : Decidable P
h✝ : P
⊢ x₁ ⊗ₜ[R] x₂ = x₁ ⊗ₜ[R] x₂
[PROOFSTEP]
simp
[GOAL]
case neg
R : Type u_1
inst✝¹⁷ : CommSemiring R
R' : Type u_2
inst✝¹⁶ : Monoid R'
R'' : Type u_3
inst✝¹⁵ : Semiring R''
M : Type u_4
N : Type u_5
P✝ : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : AddCommMonoid N
inst✝¹² : AddCommMonoid P✝
inst✝¹¹ : AddCommMonoid Q
inst✝¹⁰ : AddCommMonoid S
inst✝⁹ : Module R M
inst✝⁸ : Module R N
inst✝⁷ : Module R P✝
inst✝⁶ : Module R Q
inst✝⁵ : Module R S
inst✝⁴ : DistribMulAction R' M
inst✝³ : Module R'' M
inst✝² : SMulCommClass R R' M
inst✝¹ : SMulCommClass R R'' M
x₁ : M
x₂ : N
P : Prop
inst✝ : Decidable P
h✝ : ¬P
⊢ x₁ ⊗ₜ[R] 0 = 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
α : Type u_9
s : Finset α
m : α → M
n : N
⊢ (∑ a in s, m a) ⊗ₜ[R] n = ∑ a in s, m a ⊗ₜ[R] n
[PROOFSTEP]
classical
induction' s using Finset.induction with a s has ih h
· simp
· simp [Finset.sum_insert has, add_tmul, ih]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
α : Type u_9
s : Finset α
m : α → M
n : N
⊢ (∑ a in s, m a) ⊗ₜ[R] n = ∑ a in s, m a ⊗ₜ[R] n
[PROOFSTEP]
induction' s using Finset.induction with a s has ih h
[GOAL]
case empty
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
α : Type u_9
m : α → M
n : N
⊢ (∑ a in ∅, m a) ⊗ₜ[R] n = ∑ a in ∅, m a ⊗ₜ[R] n
[PROOFSTEP]
simp
[GOAL]
case insert
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
α : Type u_9
m : α → M
n : N
a : α
s : Finset α
has : ¬a ∈ s
ih : (∑ a in s, m a) ⊗ₜ[R] n = ∑ a in s, m a ⊗ₜ[R] n
⊢ (∑ a in insert a s, m a) ⊗ₜ[R] n = ∑ a in insert a s, m a ⊗ₜ[R] n
[PROOFSTEP]
simp [Finset.sum_insert has, add_tmul, ih]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
m : M
α : Type u_9
s : Finset α
n : α → N
⊢ m ⊗ₜ[R] ∑ a in s, n a = ∑ a in s, m ⊗ₜ[R] n a
[PROOFSTEP]
classical
induction' s using Finset.induction with a s has ih h
· simp
· simp [Finset.sum_insert has, tmul_add, ih]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
m : M
α : Type u_9
s : Finset α
n : α → N
⊢ m ⊗ₜ[R] ∑ a in s, n a = ∑ a in s, m ⊗ₜ[R] n a
[PROOFSTEP]
induction' s using Finset.induction with a s has ih h
[GOAL]
case empty
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
m : M
α : Type u_9
n : α → N
⊢ m ⊗ₜ[R] ∑ a in ∅, n a = ∑ a in ∅, m ⊗ₜ[R] n a
[PROOFSTEP]
simp
[GOAL]
case insert
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
m : M
α : Type u_9
n : α → N
a : α
s : Finset α
has : ¬a ∈ s
ih : m ⊗ₜ[R] ∑ a in s, n a = ∑ a in s, m ⊗ₜ[R] n a
⊢ m ⊗ₜ[R] ∑ a in insert a s, n a = ∑ a in insert a s, m ⊗ₜ[R] n a
[PROOFSTEP]
simp [Finset.sum_insert has, tmul_add, ih]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
⊢ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} = ⊤
[PROOFSTEP]
ext t
[GOAL]
case h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ t ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} ↔ t ∈ ⊤
[PROOFSTEP]
simp only [Submodule.mem_top, iff_true_iff]
[GOAL]
case h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ t ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
refine t.induction_on ?_ ?_ ?_
[GOAL]
case h.refine_1
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ 0 ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
exact Submodule.zero_mem _
[GOAL]
case h.refine_2
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ ∀ (x : M) (y : N), x ⊗ₜ[R] y ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
intro m n
[GOAL]
case h.refine_2
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
m : M
n : N
⊢ m ⊗ₜ[R] n ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
apply Submodule.subset_span
[GOAL]
case h.refine_2.a
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
m : M
n : N
⊢ m ⊗ₜ[R] n ∈ {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
use m, n
[GOAL]
case h.refine_3
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t : M ⊗[R] N
⊢ ∀ (x y : M ⊗[R] N),
    x ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} →
      y ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} → x + y ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
intro t₁ t₂ ht₁ ht₂
[GOAL]
case h.refine_3
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
t t₁ t₂ : M ⊗[R] N
ht₁ : t₁ ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
ht₂ : t₂ ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
⊢ t₁ + t₂ ∈ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
exact Submodule.add_mem _ ht₁ ht₂
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
⊢ Submodule.map₂ (mk R M N) ⊤ ⊤ = ⊤
[PROOFSTEP]
rw [← top_le_iff, ← span_tmul_eq_top, Submodule.map₂_eq_span_image2]
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
⊢ Submodule.span R {t | ∃ m n, m ⊗ₜ[R] n = t} ≤ Submodule.span R (Set.image2 (fun m n => ↑(↑(mk R M N) m) n) ↑⊤ ↑⊤)
[PROOFSTEP]
exact Submodule.span_mono fun _ ⟨m, n, h⟩ => ⟨m, n, trivial, trivial, h⟩
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x : M ⊗[R] N
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
⊢ ∃ m n, x = m ⊗ₜ[R] n
[PROOFSTEP]
induction x using TensorProduct.induction_on with
| zero =>
  use 0, 0
  rw [TensorProduct.zero_tmul]
| tmul m n => use m, n
| add x y h₁ h₂ =>
  obtain ⟨m₁, n₁, rfl⟩ := h₁
  obtain ⟨m₂, n₂, rfl⟩ := h₂
  apply h
[GOAL]
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
x : M ⊗[R] N
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
⊢ ∃ m n, x = m ⊗ₜ[R] n
[PROOFSTEP]
induction x using TensorProduct.induction_on with
| zero =>
  use 0, 0
  rw [TensorProduct.zero_tmul]
| tmul m n => use m, n
| add x y h₁ h₂ =>
  obtain ⟨m₁, n₁, rfl⟩ := h₁
  obtain ⟨m₂, n₂, rfl⟩ := h₂
  apply h
[GOAL]
case zero
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
⊢ ∃ m n, 0 = m ⊗ₜ[R] n
[PROOFSTEP]

| zero =>
  use 0, 0
  rw [TensorProduct.zero_tmul]
[GOAL]
case zero
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
⊢ ∃ m n, 0 = m ⊗ₜ[R] n
[PROOFSTEP]
use 0, 0
[GOAL]
case h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
⊢ 0 = 0 ⊗ₜ[R] 0
[PROOFSTEP]
rw [TensorProduct.zero_tmul]
[GOAL]
case tmul
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
m : M
n : N
⊢ ∃ m_1 n_1, m ⊗ₜ[R] n = m_1 ⊗ₜ[R] n_1
[PROOFSTEP]

| tmul m n => use m, n
[GOAL]
case tmul
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
m : M
n : N
⊢ ∃ m_1 n_1, m ⊗ₜ[R] n = m_1 ⊗ₜ[R] n_1
[PROOFSTEP]
use m, n
[GOAL]
case add
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
x y : M ⊗[R] N
h₁ : ∃ m n, x = m ⊗ₜ[R] n
h₂ : ∃ m n, y = m ⊗ₜ[R] n
⊢ ∃ m n, x + y = m ⊗ₜ[R] n
[PROOFSTEP]

| add x y h₁ h₂ =>
  obtain ⟨m₁, n₁, rfl⟩ := h₁
  obtain ⟨m₂, n₂, rfl⟩ := h₂
  apply h
[GOAL]
case add
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
x y : M ⊗[R] N
h₁ : ∃ m n, x = m ⊗ₜ[R] n
h₂ : ∃ m n, y = m ⊗ₜ[R] n
⊢ ∃ m n, x + y = m ⊗ₜ[R] n
[PROOFSTEP]
obtain ⟨m₁, n₁, rfl⟩ := h₁
[GOAL]
case add.intro.intro
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
y : M ⊗[R] N
h₂ : ∃ m n, y = m ⊗ₜ[R] n
m₁ : M
n₁ : N
⊢ ∃ m n, m₁ ⊗ₜ[R] n₁ + y = m ⊗ₜ[R] n
[PROOFSTEP]
obtain ⟨m₂, n₂, rfl⟩ := h₂
[GOAL]
case add.intro.intro.intro.intro
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Module R S
inst✝³ : DistribMulAction R' M
inst✝² : Module R'' M
inst✝¹ : SMulCommClass R R' M
inst✝ : SMulCommClass R R'' M
h : ∀ (m₁ m₂ : M) (n₁ n₂ : N), ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
m₁ : M
n₁ : N
m₂ : M
n₂ : N
⊢ ∃ m n, m₁ ⊗ₜ[R] n₁ + m₂ ⊗ₜ[R] n₂ = m ⊗ₜ[R] n
[PROOFSTEP]
apply h
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
n : N
⊢ ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (0, n)) =
    ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) 0
[PROOFSTEP]
simp_rw [map_zero, FreeAddMonoid.lift_eval_of, f.map_zero₂]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m : M
⊢ ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (m, 0)) =
    ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) 0
[PROOFSTEP]
simp_rw [map_zero, FreeAddMonoid.lift_eval_of, (f m).map_zero]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m₁ m₂ : M
n : N
⊢ ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (m₁, n) + FreeAddMonoid.of (m₂, n)) =
    ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (m₁ + m₂, n))
[PROOFSTEP]
simp_rw [map_add, FreeAddMonoid.lift_eval_of, f.map_add₂]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m : M
n₁ n₂ : N
⊢ ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (m, n₁) + FreeAddMonoid.of (m, n₂)) =
    ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (m, n₁ + n₂))
[PROOFSTEP]
simp_rw [map_add, FreeAddMonoid.lift_eval_of, (f m).map_add]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
r : R
m : M
n : N
⊢ ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (r • m, n)) =
    ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (FreeAddMonoid.of (m, r • n))
[PROOFSTEP]
simp_rw [FreeAddMonoid.lift_eval_of, f.map_smul₂, (f m).map_smul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
x✝ y✝ : FreeAddMonoid (M × N)
hxy : Eqv R M N x✝ y✝
x y : FreeAddMonoid (M × N)
⊢ ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (x + y) = ↑(↑FreeAddMonoid.lift fun p => ↑(↑f p.fst) p.snd) (y + x)
[PROOFSTEP]
simp_rw [map_add, add_comm]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
r : R
x : M ⊗[R] N
p : M
q : N
⊢ ↑(liftAux f) (r • p ⊗ₜ[R] q) = r • ↑(liftAux f) (p ⊗ₜ[R] q)
[PROOFSTEP]
simp_rw [← tmul_smul, liftAux_tmul, (f p).map_smul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
r : R
x p q : M ⊗[R] N
ih1 : ↑(liftAux f) (r • p) = r • ↑(liftAux f) p
ih2 : ↑(liftAux f) (r • q) = r • ↑(liftAux f) q
⊢ ↑(liftAux f) (r • (p + q)) = r • ↑(liftAux f) (p + q)
[PROOFSTEP]
simp_rw [smul_add, (liftAux f).map_add, ih1, ih2, smul_add]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : M ⊗[R] N →ₗ[R] P
H : ∀ (x : M) (y : N), ↑g (x ⊗ₜ[R] y) = ↑h (x ⊗ₜ[R] y)
z : M ⊗[R] N
⊢ ↑g 0 = ↑h 0
[PROOFSTEP]
simp_rw [LinearMap.map_zero]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : M ⊗[R] N →ₗ[R] P
H : ∀ (x : M) (y : N), ↑g (x ⊗ₜ[R] y) = ↑h (x ⊗ₜ[R] y)
z x y : M ⊗[R] N
ihx : ↑g x = ↑h x
ihy : ↑g y = ↑h y
⊢ ↑g (x + y) = ↑h (x + y)
[PROOFSTEP]
rw [g.map_add, h.map_add, ihx, ihy]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g : M ⊗[R] N →ₗ[R] P
H : ∀ (x : M) (y : N), ↑g (x ⊗ₜ[R] y) = ↑(↑f x) y
m : M
n : N
⊢ ↑g (m ⊗ₜ[R] n) = ↑(lift f) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [H, lift.tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g : P →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ ↑(LinearMap.comp g (lift f)) (x✝¹ ⊗ₜ[R] x✝) = ↑(↑(LinearMap.compr₂ f g) x✝¹) x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f✝ : M →ₗ[R] N →ₗ[R] P
f : M ⊗[R] N →ₗ[R] P
⊢ lift (LinearMap.compr₂ (mk R M N) f) = f
[PROOFSTEP]
rw [lift_compr₂ f, lift_mk, LinearMap.comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : M ⊗[R] N →ₗ[R] P
H : LinearMap.compr₂ (mk R M N) g = LinearMap.compr₂ (mk R M N) h
⊢ g = h
[PROOFSTEP]
rw [← lift_mk_compr₂ g, H, lift_mk_compr₂]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f✝ f : M →ₗ[R] N →ₗ[R] P
m : M
n : N
⊢ ↑(↑(uncurry R M N P) f) (m ⊗ₜ[R] n) = ↑(↑f m) n
[PROOFSTEP]
rw [uncurry, LinearMap.flip_apply, lift.tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f✝ f : M →ₗ[R] N →ₗ[R] P
m : M
n : N
⊢ ↑(↑(↑(LinearMap.comp LinearMap.lflip (LinearMap.flip LinearMap.id)) m) n) f = ↑(↑f m) n
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : (M ⊗[R] N) ⊗[R] P →ₗ[R] Q
H : ∀ (x : M) (y : N) (z : P), ↑g ((x ⊗ₜ[R] y) ⊗ₜ[R] z) = ↑h ((x ⊗ₜ[R] y) ⊗ₜ[R] z)
⊢ g = h
[PROOFSTEP]
ext x y z
[GOAL]
case H.H.h.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : (M ⊗[R] N) ⊗[R] P →ₗ[R] Q
H : ∀ (x : M) (y : N) (z : P), ↑g ((x ⊗ₜ[R] y) ⊗ₜ[R] z) = ↑h ((x ⊗ₜ[R] y) ⊗ₜ[R] z)
x : M
y : N
z : P
⊢ ↑(↑(↑(LinearMap.compr₂ (mk R M N) (LinearMap.compr₂ (mk R (M ⊗[R] N) P) g)) x) y) z =
    ↑(↑(↑(LinearMap.compr₂ (mk R M N) (LinearMap.compr₂ (mk R (M ⊗[R] N) P) h)) x) y) z
[PROOFSTEP]
exact H x y z
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : ((M ⊗[R] N) ⊗[R] P) ⊗[R] Q →ₗ[R] S
H : ∀ (w : M) (x : N) (y : P) (z : Q), ↑g (((w ⊗ₜ[R] x) ⊗ₜ[R] y) ⊗ₜ[R] z) = ↑h (((w ⊗ₜ[R] x) ⊗ₜ[R] y) ⊗ₜ[R] z)
⊢ g = h
[PROOFSTEP]
ext w x y z
[GOAL]
case H.H.H.h.h.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
g h : ((M ⊗[R] N) ⊗[R] P) ⊗[R] Q →ₗ[R] S
H : ∀ (w : M) (x : N) (y : P) (z : Q), ↑g (((w ⊗ₜ[R] x) ⊗ₜ[R] y) ⊗ₜ[R] z) = ↑h (((w ⊗ₜ[R] x) ⊗ₜ[R] y) ⊗ₜ[R] z)
w : M
x : N
y : P
z : Q
⊢ ↑(↑(↑(↑(LinearMap.compr₂ (mk R M N)
                      (LinearMap.compr₂ (mk R (M ⊗[R] N) P) (LinearMap.compr₂ (mk R ((M ⊗[R] N) ⊗[R] P) Q) g)))
                  w)
              x)
          y)
      z =
    ↑(↑(↑(↑(LinearMap.compr₂ (mk R M N)
                      (LinearMap.compr₂ (mk R (M ⊗[R] N) P) (LinearMap.compr₂ (mk R ((M ⊗[R] N) ⊗[R] P) Q) h)))
                  w)
              x)
          y)
      z
[PROOFSTEP]
exact H w x y z
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
φ ψ : (M ⊗[R] N) ⊗[R] P ⊗[R] Q →ₗ[R] S
H : ∀ (w : M) (x : N) (y : P) (z : Q), ↑φ ((w ⊗ₜ[R] x) ⊗ₜ[R] y ⊗ₜ[R] z) = ↑ψ ((w ⊗ₜ[R] x) ⊗ₜ[R] y ⊗ₜ[R] z)
⊢ φ = ψ
[PROOFSTEP]
ext m n p q
[GOAL]
case H.H.h.h.H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] N →ₗ[R] P
φ ψ : (M ⊗[R] N) ⊗[R] P ⊗[R] Q →ₗ[R] S
H : ∀ (w : M) (x : N) (y : P) (z : Q), ↑φ ((w ⊗ₜ[R] x) ⊗ₜ[R] y ⊗ₜ[R] z) = ↑ψ ((w ⊗ₜ[R] x) ⊗ₜ[R] y ⊗ₜ[R] z)
m : M
n : N
p : P
q : Q
⊢ ↑(↑(LinearMap.compr₂ (mk R P Q)
              (↑(↑(LinearMap.compr₂ (mk R M N) (LinearMap.compr₂ (mk R (M ⊗[R] N) (P ⊗[R] Q)) φ)) m) n))
          p)
      q =
    ↑(↑(LinearMap.compr₂ (mk R P Q)
              (↑(↑(LinearMap.compr₂ (mk R M N) (LinearMap.compr₂ (mk R (M ⊗[R] N) (P ⊗[R] Q)) ψ)) m) n))
          p)
      q
[PROOFSTEP]
exact H m n p q
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
x✝ : M
⊢ ↑(LinearMap.comp (lift (LinearMap.lsmul R M)) (↑(mk R R M) 1)) x✝ = ↑LinearMap.id x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
r : R
m : M
⊢ ↑(LinearMap.comp (↑(mk R R M) 1) (lift (LinearMap.lsmul R M))) (r ⊗ₜ[R] m) = ↑LinearMap.id (r ⊗ₜ[R] m)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
r : R
m : M
⊢ r • 1 ⊗ₜ[R] m = r ⊗ₜ[R] m
[PROOFSTEP]
rw [← tmul_smul, ← smul_tmul, smul_eq_mul, mul_one]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
⊢ (M ⊗[R] N) ⊗[R] P ≃ₗ[R] M ⊗[R] N ⊗[R] P
[PROOFSTEP]
refine
  LinearEquiv.ofLinear (lift <| lift <| comp (lcurry R _ _ _) <| mk _ _ _)
    (lift <| comp (uncurry R _ _ _) <| curry <| mk _ _ _) (ext <| LinearMap.ext fun m => ext' fun n p => ?_)
    (ext <| flip_inj <| LinearMap.ext fun p => ext' fun m n => ?_)
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(compr₂ (mk R M (N ⊗[R] P))
              (comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
                (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))))
          m)
      (n ⊗ₜ[R] p) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
repeat'
  first
  | rw [lift.tmul]
  | rw [compr₂_apply]
  | rw [comp_apply]
  | rw [mk_apply]
  | rw [flip_apply]
  | rw [lcurry_apply]
  | rw [uncurry_apply]
  | rw [curry_apply]
  | rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(compr₂ (mk R M (N ⊗[R] P))
              (comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
                (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))))
          m)
      (n ⊗ₜ[R] p) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(compr₂ (mk R M (N ⊗[R] P))
              (comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
                (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))))
          m)
      (n ⊗ₜ[R] p) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(compr₂ (mk R M (N ⊗[R] P))
              (comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
                (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))))
          m)
      (n ⊗ₜ[R] p) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑(↑(compr₂ (mk R M (N ⊗[R] P)) LinearMap.id) m) (n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(comp (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
          (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
        (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
        (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
        (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
        (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
        (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))) =
    ↑LinearMap.id (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p))
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))) (m ⊗ₜ[R] n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))) (m ⊗ₜ[R] n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [uncurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [uncurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
      (↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [curry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) ((m ⊗ₜ[R] n) ⊗ₜ[R] p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) ((m ⊗ₜ[R] n) ⊗ₜ[R] p) =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))) (m ⊗ₜ[R] n)) p =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))) (m ⊗ₜ[R] n)) p =
    ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p) = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p) = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p) = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p) = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ ↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p) = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [uncurry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [curry_apply]
[GOAL]
case refine_1
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
m : M
n : N
p : P
⊢ m ⊗ₜ[R] n ⊗ₜ[R] p = ↑LinearMap.id (m ⊗ₜ[R] n ⊗ₜ[R] p)
[PROOFSTEP]
rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
repeat'
  first
  | rw [lift.tmul]
  | rw [compr₂_apply]
  | rw [comp_apply]
  | rw [mk_apply]
  | rw [flip_apply]
  | rw [lcurry_apply]
  | rw [uncurry_apply]
  | rw [curry_apply]
  | rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(LinearMap.flip
              (compr₂ (mk R (M ⊗[R] N) P)
                (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                  (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))))
          p)
      (m ⊗ₜ[R] n) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(compr₂ (mk R (M ⊗[R] N) P)
              (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))))
          (m ⊗ₜ[R] n))
      p =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(compr₂ (mk R (M ⊗[R] N) P)
              (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))))
          (m ⊗ₜ[R] n))
      p =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(compr₂ (mk R (M ⊗[R] N) P)
              (comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
                (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))))
          (m ⊗ₜ[R] n))
      p =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
          (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))
      (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
          (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))
      (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
          (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))
      (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(comp (lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
          (lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))))
      (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
        (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
        (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
        (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
        (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))))
        (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) ((m ⊗ₜ[R] n) ⊗ₜ[R] p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(lift (lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))))) ((m ⊗ₜ[R] n) ⊗ₜ[R] p)) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))) (m ⊗ₜ[R] n)) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(lift (comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P)))) (m ⊗ₜ[R] n)) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(comp (lcurry R N P (M ⊗[R] N ⊗[R] P)) (mk R M (N ⊗[R] P))) m) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(LinearMap.flip (compr₂ (mk R (M ⊗[R] N) P) LinearMap.id)) p) (m ⊗ₜ[R] n)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(compr₂ (mk R (M ⊗[R] N) P) LinearMap.id) (m ⊗ₜ[R] n)) p
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(compr₂ (mk R (M ⊗[R] N) P) LinearMap.id) (m ⊗ₜ[R] n)) p
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑(↑(compr₂ (mk R (M ⊗[R] N) P) LinearMap.id) (m ⊗ₜ[R] n)) p
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id (↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(↑(lcurry R N P (M ⊗[R] N ⊗[R] P)) (↑(mk R M (N ⊗[R] P)) m)) n) p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))))
      (↑(↑(mk R M (N ⊗[R] P)) m) (n ⊗ₜ[R] p)) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))) (m ⊗ₜ[R] n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(lift (comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P)))) (m ⊗ₜ[R] n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(comp (uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (curry (mk R (M ⊗[R] N) P))) m) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(uncurry R N P ((M ⊗[R] N) ⊗[R] P)) (↑(curry (mk R (M ⊗[R] N) P)) m)) (n ⊗ₜ[R] p) =
    ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [uncurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [uncurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(↑(curry (mk R (M ⊗[R] N) P)) m) n) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [curry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ ↑(↑(mk R (M ⊗[R] N) P) (m ⊗ₜ[R] n)) p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
first
| rw [lift.tmul]
| rw [compr₂_apply]
| rw [comp_apply]
| rw [mk_apply]
| rw [flip_apply]
| rw [lcurry_apply]
| rw [uncurry_apply]
| rw [curry_apply]
| rw [id_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lift.tmul]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [compr₂_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [comp_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [mk_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [flip_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [lcurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [uncurry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [curry_apply]
[GOAL]
case refine_2
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
p : P
m : M
n : N
⊢ (m ⊗ₜ[R] n) ⊗ₜ[R] p = ↑LinearMap.id ((m ⊗ₜ[R] n) ⊗ₜ[R] p)
[PROOFSTEP]
rw [id_apply]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ range (map f g) = Submodule.span R {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t}
[PROOFSTEP]
simp only [← Submodule.map_top, ← span_tmul_eq_top, Submodule.map_span, Set.mem_image, Set.mem_setOf_eq]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ Submodule.span R ((fun a => ↑(map f g) a) '' {t | ∃ m n, m ⊗ₜ[R] n = t}) =
    Submodule.span R {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t}
[PROOFSTEP]
congr
[GOAL]
case e_s
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ (fun a => ↑(map f g) a) '' {t | ∃ m n, m ⊗ₜ[R] n = t} = {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t}
[PROOFSTEP]
ext t
[GOAL]
case e_s.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
t : P ⊗[R] Q
⊢ t ∈ (fun a => ↑(map f g) a) '' {t | ∃ m n, m ⊗ₜ[R] n = t} ↔ t ∈ {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t}
[PROOFSTEP]
constructor
[GOAL]
case e_s.h.mp
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
t : P ⊗[R] Q
⊢ t ∈ (fun a => ↑(map f g) a) '' {t | ∃ m n, m ⊗ₜ[R] n = t} → t ∈ {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t}
[PROOFSTEP]
rintro ⟨_, ⟨⟨m, n, rfl⟩, rfl⟩⟩
[GOAL]
case e_s.h.mp.intro.intro.intro.intro
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
m : M
n : N
⊢ (fun a => ↑(map f g) a) (m ⊗ₜ[R] n) ∈ {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t}
[PROOFSTEP]
use m, n
[GOAL]
case h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
m : M
n : N
⊢ ↑f m ⊗ₜ[R] ↑g n = (fun a => ↑(map f g) a) (m ⊗ₜ[R] n)
[PROOFSTEP]
simp only [map_tmul]
[GOAL]
case e_s.h.mpr
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
t : P ⊗[R] Q
⊢ t ∈ {t | ∃ m n, ↑f m ⊗ₜ[R] ↑g n = t} → t ∈ (fun a => ↑(map f g) a) '' {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
rintro ⟨m, n, rfl⟩
[GOAL]
case e_s.h.mpr.intro.intro
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
m : M
n : N
⊢ ↑f m ⊗ₜ[R] ↑g n ∈ (fun a => ↑(map f g) a) '' {t | ∃ m n, m ⊗ₜ[R] n = t}
[PROOFSTEP]
refine ⟨_, ⟨⟨m, n, rfl⟩, ?_⟩⟩
[GOAL]
case e_s.h.mpr.intro.intro
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M →ₗ[R] P
g : N →ₗ[R] Q
m : M
n : N
⊢ (fun a => ↑(map f g) a) (m ⊗ₜ[R] n) = ↑f m ⊗ₜ[R] ↑g n
[PROOFSTEP]
simp only [map_tmul]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
⊢ map LinearMap.id LinearMap.id = LinearMap.id
[PROOFSTEP]
ext
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
x✝¹ : M
x✝ : N
⊢ ↑(↑(compr₂ (mk R M N) (map LinearMap.id LinearMap.id)) x✝¹) x✝ = ↑(↑(compr₂ (mk R M N) LinearMap.id) x✝¹) x✝
[PROOFSTEP]
simp only [mk_apply, id_coe, compr₂_apply, id.def, map_tmul]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f : M →ₗ[R] M
g : N →ₗ[R] N
n : ℕ
⊢ map f g ^ n = map (f ^ n) (g ^ n)
[PROOFSTEP]
induction' n with n ih
[GOAL]
case zero
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f : M →ₗ[R] M
g : N →ₗ[R] N
⊢ map f g ^ Nat.zero = map (f ^ Nat.zero) (g ^ Nat.zero)
[PROOFSTEP]
simp only [Nat.zero_eq, pow_zero, map_one]
[GOAL]
case succ
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f : M →ₗ[R] M
g : N →ₗ[R] N
n : ℕ
ih : map f g ^ n = map (f ^ n) (g ^ n)
⊢ map f g ^ Nat.succ n = map (f ^ Nat.succ n) (g ^ Nat.succ n)
[PROOFSTEP]
simp only [pow_succ', ih, map_mul]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f₁ f₂ : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ map (f₁ + f₂) g = map f₁ g + map f₂ g
[PROOFSTEP]
ext
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f₁ f₂ : M →ₗ[R] P
g : N →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ ↑(↑(compr₂ (mk R M N) (map (f₁ + f₂) g)) x✝¹) x✝ = ↑(↑(compr₂ (mk R M N) (map f₁ g + map f₂ g)) x✝¹) x✝
[PROOFSTEP]
simp only [add_tmul, compr₂_apply, mk_apply, map_tmul, add_apply]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f : M →ₗ[R] P
g₁ g₂ : N →ₗ[R] Q
⊢ map f (g₁ + g₂) = map f g₁ + map f g₂
[PROOFSTEP]
ext
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
f : M →ₗ[R] P
g₁ g₂ : N →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ ↑(↑(compr₂ (mk R M N) (map f (g₁ + g₂))) x✝¹) x✝ = ↑(↑(compr₂ (mk R M N) (map f g₁ + map f g₂)) x✝¹) x✝
[PROOFSTEP]
simp only [tmul_add, compr₂_apply, mk_apply, map_tmul, add_apply]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
r : R
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ map (r • f) g = r • map f g
[PROOFSTEP]
ext
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
r : R
f : M →ₗ[R] P
g : N →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ ↑(↑(compr₂ (mk R M N) (map (r • f) g)) x✝¹) x✝ = ↑(↑(compr₂ (mk R M N) (r • map f g)) x✝¹) x✝
[PROOFSTEP]
simp only [smul_tmul, compr₂_apply, mk_apply, map_tmul, smul_apply, tmul_smul]
[GOAL]
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
r : R
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ map f (r • g) = r • map f g
[PROOFSTEP]
ext
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁸ : CommSemiring R
R' : Type u_2
inst✝¹⁷ : Monoid R'
R'' : Type u_3
inst✝¹⁶ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : AddCommMonoid N
inst✝¹³ : AddCommMonoid P
inst✝¹² : AddCommMonoid Q
inst✝¹¹ : AddCommMonoid S
inst✝¹⁰ : Module R M
inst✝⁹ : Module R N
inst✝⁸ : Module R P
inst✝⁷ : Module R Q
inst✝⁶ : Module R S
inst✝⁵ : DistribMulAction R' M
inst✝⁴ : Module R'' M
P' : Type u_9
Q' : Type u_10
inst✝³ : AddCommMonoid P'
inst✝² : Module R P'
inst✝¹ : AddCommMonoid Q'
inst✝ : Module R Q'
r : R
f : M →ₗ[R] P
g : N →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ ↑(↑(compr₂ (mk R M N) (map f (r • g))) x✝¹) x✝ = ↑(↑(compr₂ (mk R M N) (r • map f g)) x✝¹) x✝
[PROOFSTEP]
simp only [smul_tmul, compr₂_apply, mk_apply, map_tmul, smul_apply, tmul_smul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M ≃ₗ[R] P
g : N ≃ₗ[R] Q
m : P
n : Q
⊢ ↑(comp (map ↑f ↑g) (map ↑(LinearEquiv.symm f) ↑(LinearEquiv.symm g))) (m ⊗ₜ[R] n) = ↑LinearMap.id (m ⊗ₜ[R] n)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M ≃ₗ[R] P
g : N ≃ₗ[R] Q
m : M
n : N
⊢ ↑(comp (map ↑(LinearEquiv.symm f) ↑(LinearEquiv.symm g)) (map ↑f ↑g)) (m ⊗ₜ[R] n) = ↑LinearMap.id (m ⊗ₜ[R] n)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
⊢ LinearEquiv.symm (tensorTensorTensorComm R M N P Q) = tensorTensorTensorComm R M P N Q
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
x✝ : (M ⊗[R] P) ⊗[R] N ⊗[R] Q
⊢ ↑(LinearEquiv.symm (tensorTensorTensorComm R M N P Q)) x✝ = ↑(tensorTensorTensorComm R M P N Q) x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ f g : N →ₗ[R] P
⊢ lTensor M (f + g) = lTensor M f + lTensor M g
[PROOFSTEP]
ext x y
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ f g : N →ₗ[R] P
x : M
y : N
⊢ ↑(↑(compr₂ (TensorProduct.mk R M N) (lTensor M (f + g))) x) y =
    ↑(↑(compr₂ (TensorProduct.mk R M N) (lTensor M f + lTensor M g)) x) y
[PROOFSTEP]
simp only [compr₂_apply, mk_apply, add_apply, lTensor_tmul, tmul_add]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
r : R
f : N →ₗ[R] P
⊢ AddHom.toFun
      { toFun := lTensor M, map_add' := (_ : ∀ (f g : N →ₗ[R] P), lTensor M (f + g) = lTensor M f + lTensor M g) }
      (r • f) =
    ↑(RingHom.id R) r •
      AddHom.toFun
        { toFun := lTensor M, map_add' := (_ : ∀ (f g : N →ₗ[R] P), lTensor M (f + g) = lTensor M f + lTensor M g) } f
[PROOFSTEP]
dsimp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
r : R
f : N →ₗ[R] P
⊢ lTensor M (r • f) = r • lTensor M f
[PROOFSTEP]
ext x y
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
r : R
f : N →ₗ[R] P
x : M
y : N
⊢ ↑(↑(compr₂ (TensorProduct.mk R M N) (lTensor M (r • f))) x) y =
    ↑(↑(compr₂ (TensorProduct.mk R M N) (r • lTensor M f)) x) y
[PROOFSTEP]
simp only [compr₂_apply, mk_apply, tmul_smul, smul_apply, lTensor_tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ f g : N →ₗ[R] P
⊢ (fun f => rTensor M f) (f + g) = (fun f => rTensor M f) f + (fun f => rTensor M f) g
[PROOFSTEP]
ext x y
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ f g : N →ₗ[R] P
x : N
y : M
⊢ ↑(↑(compr₂ (TensorProduct.mk R N M) ((fun f => rTensor M f) (f + g))) x) y =
    ↑(↑(compr₂ (TensorProduct.mk R N M) ((fun f => rTensor M f) f + (fun f => rTensor M f) g)) x) y
[PROOFSTEP]
simp only [compr₂_apply, mk_apply, add_apply, rTensor_tmul, add_tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
r : R
f : N →ₗ[R] P
⊢ AddHom.toFun
      { toFun := fun f => rTensor M f,
        map_add' :=
          (_ :
            ∀ (f g : N →ₗ[R] P), (fun f => rTensor M f) (f + g) = (fun f => rTensor M f) f + (fun f => rTensor M f) g) }
      (r • f) =
    ↑(RingHom.id R) r •
      AddHom.toFun
        { toFun := fun f => rTensor M f,
          map_add' :=
            (_ :
              ∀ (f g : N →ₗ[R] P),
                (fun f => rTensor M f) (f + g) = (fun f => rTensor M f) f + (fun f => rTensor M f) g) }
        f
[PROOFSTEP]
dsimp
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
r : R
f : N →ₗ[R] P
⊢ rTensor M (r • f) = r • rTensor M f
[PROOFSTEP]
ext x y
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
r : R
f : N →ₗ[R] P
x : N
y : M
⊢ ↑(↑(compr₂ (TensorProduct.mk R N M) (rTensor M (r • f))) x) y =
    ↑(↑(compr₂ (TensorProduct.mk R N M) (r • rTensor M f)) x) y
[PROOFSTEP]
simp only [compr₂_apply, mk_apply, smul_tmul, tmul_smul, smul_apply, rTensor_tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
⊢ lTensor M (comp g f) = comp (lTensor M g) (lTensor M f)
[PROOFSTEP]
ext m n
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
m : M
n : N
⊢ ↑(↑(compr₂ (TensorProduct.mk R M N) (lTensor M (comp g f))) m) n =
    ↑(↑(compr₂ (TensorProduct.mk R M N) (comp (lTensor M g) (lTensor M f))) m) n
[PROOFSTEP]
simp only [compr₂_apply, mk_apply, comp_apply, lTensor_tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : M ⊗[R] N
⊢ ↑(lTensor M (comp g f)) x = ↑(lTensor M g) (↑(lTensor M f) x)
[PROOFSTEP]
rw [lTensor_comp, coe_comp]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : M ⊗[R] N
⊢ (↑(lTensor M g) ∘ ↑(lTensor M f)) x = ↑(lTensor M g) (↑(lTensor M f) x)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
⊢ rTensor M (comp g f) = comp (rTensor M g) (rTensor M f)
[PROOFSTEP]
ext m n
[GOAL]
case H.h.h
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
m : N
n : M
⊢ ↑(↑(compr₂ (TensorProduct.mk R N M) (rTensor M (comp g f))) m) n =
    ↑(↑(compr₂ (TensorProduct.mk R N M) (comp (rTensor M g) (rTensor M f))) m) n
[PROOFSTEP]
simp only [compr₂_apply, mk_apply, comp_apply, rTensor_tmul]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : N ⊗[R] M
⊢ ↑(rTensor M (comp g f)) x = ↑(rTensor M g) (↑(rTensor M f) x)
[PROOFSTEP]
rw [rTensor_comp, coe_comp]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : N ⊗[R] M
⊢ (↑(rTensor M g) ∘ ↑(rTensor M f)) x = ↑(rTensor M g) (↑(rTensor M f) x)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : M ⊗[R] N
⊢ ↑(lTensor M id) x = x
[PROOFSTEP]
rw [lTensor_id, id_coe, id.def]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : N ⊗[R] M
⊢ ↑(rTensor M id) x = x
[PROOFSTEP]
rw [rTensor_id, id_coe, id.def]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ comp (lTensor P g) (rTensor N f) = map f g
[PROOFSTEP]
simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ comp (rTensor Q f) (lTensor M g) = map f g
[PROOFSTEP]
simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] P
g : N →ₗ[R] Q
f' : S →ₗ[R] M
⊢ comp (map f g) (rTensor N f') = map (comp f f') g
[PROOFSTEP]
simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] P
g : N →ₗ[R] Q
g' : S →ₗ[R] N
⊢ comp (map f g) (lTensor M g') = map f (comp g g')
[PROOFSTEP]
simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f' : P →ₗ[R] S
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ comp (rTensor Q f') (map f g) = map (comp f' f) g
[PROOFSTEP]
simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
g' : Q →ₗ[R] S
f : M →ₗ[R] P
g : N →ₗ[R] Q
⊢ comp (lTensor P g') (map f g) = map f (comp g' g)
[PROOFSTEP]
simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] M
n : ℕ
⊢ rTensor N f ^ n = rTensor N (f ^ n)
[PROOFSTEP]
have h := TensorProduct.map_pow f (id : N →ₗ[R] N) n
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] M
n : ℕ
h : map f id ^ n = map (f ^ n) (id ^ n)
⊢ rTensor N f ^ n = rTensor N (f ^ n)
[PROOFSTEP]
rwa [id_pow] at h
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : N →ₗ[R] N
n : ℕ
⊢ lTensor M f ^ n = lTensor M (f ^ n)
[PROOFSTEP]
have h := TensorProduct.map_pow (id : M →ₗ[R] M) f n
[GOAL]
R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type u_2
inst✝¹³ : Monoid R'
R'' : Type u_3
inst✝¹² : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : N →ₗ[R] N
n : ℕ
h : map id f ^ n = map (id ^ n) (f ^ n)
⊢ lTensor M f ^ n = lTensor M (f ^ n)
[PROOFSTEP]
rwa [id_pow] at h
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
n : N
⊢ ↑(Neg.aux R) (FreeAddMonoid.of (0, n)) = ↑(Neg.aux R) 0
[PROOFSTEP]
simp_rw [map_zero, Neg.aux_of, neg_zero, zero_tmul]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m : M
⊢ ↑(Neg.aux R) (FreeAddMonoid.of (m, 0)) = ↑(Neg.aux R) 0
[PROOFSTEP]
simp_rw [map_zero, Neg.aux_of, tmul_zero]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m₁ m₂ : M
n : N
⊢ ↑(Neg.aux R) (FreeAddMonoid.of (m₁, n) + FreeAddMonoid.of (m₂, n)) = ↑(Neg.aux R) (FreeAddMonoid.of (m₁ + m₂, n))
[PROOFSTEP]
simp_rw [map_add, Neg.aux_of, neg_add, add_tmul]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
m : M
n₁ n₂ : N
⊢ ↑(Neg.aux R) (FreeAddMonoid.of (m, n₁) + FreeAddMonoid.of (m, n₂)) = ↑(Neg.aux R) (FreeAddMonoid.of (m, n₁ + n₂))
[PROOFSTEP]
simp_rw [map_add, Neg.aux_of, tmul_add]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x y : FreeAddMonoid (M × N)
hxy : Eqv R M N x y
s : R
m : M
n : N
⊢ ↑(Neg.aux R) (FreeAddMonoid.of (s • m, n)) = ↑(Neg.aux R) (FreeAddMonoid.of (m, s • n))
[PROOFSTEP]
simp_rw [Neg.aux_of, ← smul_neg, ← smul_tmul]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ y✝ : FreeAddMonoid (M × N)
hxy : Eqv R M N x✝ y✝
x y : FreeAddMonoid (M × N)
⊢ ↑(Neg.aux R) (x + y) = ↑(Neg.aux R) (y + x)
[PROOFSTEP]
simp_rw [map_add, add_comm]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x : M ⊗[R] N
⊢ -0 + 0 = 0
[PROOFSTEP]
rw [add_zero]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x : M ⊗[R] N
⊢ -0 = 0
[PROOFSTEP]
apply (Neg.aux R).map_zero
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ : M ⊗[R] N
x : M
y : N
⊢ -x ⊗ₜ[R] y + x ⊗ₜ[R] y = 0
[PROOFSTEP]
convert (add_tmul (R := R) (-x) x y).symm
[GOAL]
case h.e'_3
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ : M ⊗[R] N
x : M
y : N
⊢ 0 = (-x + x) ⊗ₜ[R] y
[PROOFSTEP]
rw [add_left_neg, zero_tmul]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
⊢ -(x + y) + (x + y) = 0
[PROOFSTEP]
suffices : -x + x + (-y + y) = 0
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ -(x + y) + (x + y) = 0
[PROOFSTEP]
rw [← this]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ -(x + y) + (x + y) = -x + x + (-y + y)
[PROOFSTEP]
unfold Neg.neg neg
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ { neg := ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) }.1
        (x + y) +
      (x + y) =
    { neg := ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) }.1
          x +
        x +
      ({
              neg :=
                ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R)
                    (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) }.1
          y +
        y)
[PROOFSTEP]
simp only
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) (x + y) +
      (x + y) =
    ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x + x +
      (↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y + y)
[PROOFSTEP]
rw [AddMonoidHom.map_add]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x +
        ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y +
      (x + y) =
    ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x + x +
      (↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y + y)
[PROOFSTEP]
abel
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x +
        ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y +
      (x + y) =
    ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x + x +
      (↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y + y)
[PROOFSTEP]
abel
[GOAL]
case this
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
⊢ -x + x + (-y + y) = 0
[PROOFSTEP]
rw [hx, hy, add_zero]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
src✝ : AddCommMonoid (M ⊗[R] N) := addCommMonoid
⊢ ∀ (a : M ⊗[R] N), (fun n v => n • v) 0 a = 0
[PROOFSTEP]
simp [TensorProduct.zero_smul]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
src✝ : AddCommMonoid (M ⊗[R] N) := addCommMonoid
⊢ ∀ (n : ℕ) (a : M ⊗[R] N), (fun n v => n • v) (Int.ofNat (Nat.succ n)) a = a + (fun n v => n • v) (Int.ofNat n) a
[PROOFSTEP]
simp [Nat.succ_eq_one_add, TensorProduct.one_smul, TensorProduct.add_smul]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
src✝ : AddCommMonoid (M ⊗[R] N) := addCommMonoid
n : ℕ
x : M ⊗[R] N
⊢ (fun n v => n • v) (Int.negSucc n) x = -(fun n v => n • v) (↑(Nat.succ n)) x
[PROOFSTEP]
change (-n.succ : ℤ) • x = -(((n : ℤ) + 1) • x)
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
src✝ : AddCommMonoid (M ⊗[R] N) := addCommMonoid
n : ℕ
x : M ⊗[R] N
⊢ -↑(Nat.succ n) • x = -((↑n + 1) • x)
[PROOFSTEP]
rw [← zero_add (_ • x), ← TensorProduct.add_left_neg ((n.succ : ℤ) • x), add_assoc, ← add_smul, ← sub_eq_add_neg,
  sub_self, zero_smul, add_zero]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
src✝ : AddCommMonoid (M ⊗[R] N) := addCommMonoid
n : ℕ
x : M ⊗[R] N
⊢ -(↑(Nat.succ n) • x) = -((↑n + 1) • x)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
r : ℤ
m : M
n : N
⊢ (0 • m) ⊗ₜ[R] n = m ⊗ₜ[R] (0 • n)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
r✝ : ℤ
m : M
n : N
r : ℕ
ih : (↑r • m) ⊗ₜ[R] n = m ⊗ₜ[R] (↑r • n)
⊢ ((↑r + 1) • m) ⊗ₜ[R] n = m ⊗ₜ[R] ((↑r + 1) • n)
[PROOFSTEP]
simpa [add_smul, tmul_add, add_tmul] using ih
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
r✝ : ℤ
m : M
n : N
r : ℕ
ih : (-↑r • m) ⊗ₜ[R] n = m ⊗ₜ[R] (-↑r • n)
⊢ ((-↑r - 1) • m) ⊗ₜ[R] n = m ⊗ₜ[R] ((-↑r - 1) • n)
[PROOFSTEP]
simpa [sub_smul, tmul_sub, sub_tmul] using ih
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f g : N →ₗ[R] P
⊢ lTensor M (f - g) = lTensor M f - lTensor M g
[PROOFSTEP]
simp_rw [← coe_lTensorHom]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f g : N →ₗ[R] P
⊢ ↑(lTensorHom M) (f - g) = ↑(lTensorHom M) f - ↑(lTensorHom M) g
[PROOFSTEP]
exact (lTensorHom (R := R) (N := N) (P := P) M).map_sub f g
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f g : N →ₗ[R] P
⊢ rTensor M (f - g) = rTensor M f - rTensor M g
[PROOFSTEP]
simp only [← coe_rTensorHom]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f g : N →ₗ[R] P
⊢ ↑(rTensorHom M) (f - g) = ↑(rTensorHom M) f - ↑(rTensorHom M) g
[PROOFSTEP]
exact (rTensorHom (R := R) (N := N) (P := P) M).map_sub f g
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f : N →ₗ[R] P
⊢ lTensor M (-f) = -lTensor M f
[PROOFSTEP]
simp only [← coe_lTensorHom]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f : N →ₗ[R] P
⊢ ↑(lTensorHom M) (-f) = -↑(lTensorHom M) f
[PROOFSTEP]
exact (lTensorHom (R := R) (N := N) (P := P) M).map_neg f
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f : N →ₗ[R] P
⊢ rTensor M (-f) = -rTensor M f
[PROOFSTEP]
simp only [← coe_rTensorHom]
[GOAL]
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type u_4
Q : Type u_5
S : Type u_6
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
f : N →ₗ[R] P
⊢ ↑(rTensorHom M) (-f) = -↑(rTensorHom M) f
[PROOFSTEP]
exact (rTensorHom (R := R) (N := N) (P := P) M).map_neg f