[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
r : R
f g : M →ₗ[R] N
⊢ baseChange A (f + g) = baseChange A f + baseChange A g
[PROOFSTEP]
ext
  -- porting note: added `-baseChange_tmul`
[GOAL]
case a.h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
r : R
f g : M →ₗ[R] N
x✝ : M
⊢ ↑(↑(AlgebraTensorModule.curry (baseChange A (f + g))) 1) x✝ =
    ↑(↑(AlgebraTensorModule.curry (baseChange A f + baseChange A g)) 1) x✝
[PROOFSTEP]
simp [baseChange_eq_ltensor, -baseChange_tmul]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
r : R
f g : M →ₗ[R] N
⊢ baseChange A 0 = 0
[PROOFSTEP]
ext
[GOAL]
case a.h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
r : R
f g : M →ₗ[R] N
x✝ : M
⊢ ↑(↑(AlgebraTensorModule.curry (baseChange A 0)) 1) x✝ = ↑(↑(AlgebraTensorModule.curry 0) 1) x✝
[PROOFSTEP]
simp [baseChange_eq_ltensor]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
r : R
f g : M →ₗ[R] N
⊢ baseChange A (r • f) = r • baseChange A f
[PROOFSTEP]
ext
[GOAL]
case a.h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
r : R
f g : M →ₗ[R] N
x✝ : M
⊢ ↑(↑(AlgebraTensorModule.curry (baseChange A (r • f))) 1) x✝ =
    ↑(↑(AlgebraTensorModule.curry (r • baseChange A f)) 1) x✝
[PROOFSTEP]
simp [baseChange_tmul]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : Ring A
inst✝⁶ : Algebra R A
inst✝⁵ : Ring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f g : M →ₗ[R] N
⊢ baseChange A (f - g) = baseChange A f - baseChange A g
[PROOFSTEP]
ext
  -- porting note: `tmul_sub` wasn't needed in mathlib3
[GOAL]
case a.h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : Ring A
inst✝⁶ : Algebra R A
inst✝⁵ : Ring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f g : M →ₗ[R] N
x✝ : M
⊢ ↑(↑(AlgebraTensorModule.curry (baseChange A (f - g))) 1) x✝ =
    ↑(↑(AlgebraTensorModule.curry (baseChange A f - baseChange A g)) 1) x✝
[PROOFSTEP]
simp [baseChange_eq_ltensor, tmul_sub]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : Ring A
inst✝⁶ : Algebra R A
inst✝⁵ : Ring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f g : M →ₗ[R] N
⊢ baseChange A (-f) = -baseChange A f
[PROOFSTEP]
ext
  -- porting note: `tmul_neg` wasn't needed in mathlib3
[GOAL]
case a.h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
N : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : Ring A
inst✝⁶ : Algebra R A
inst✝⁵ : Ring B
inst✝⁴ : Algebra R B
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f g : M →ₗ[R] N
x✝ : M
⊢ ↑(↑(AlgebraTensorModule.curry (baseChange A (-f))) 1) x✝ = ↑(↑(AlgebraTensorModule.curry (-baseChange A f)) 1) x✝
[PROOFSTEP]
simp [baseChange_eq_ltensor, tmul_neg]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x₁ x₂ : A
y : B
x' : A
y' : B
⊢ ↑(mulAux (x₁ + x₂) y) (x' ⊗ₜ[R] y') = ↑(mulAux x₁ y + mulAux x₂ y) (x' ⊗ₜ[R] y')
[PROOFSTEP]
simp only [mulAux_apply, LinearMap.add_apply, add_mul, add_tmul]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
c : R
x : A
y : B
x' : A
y' : B
⊢ ↑(mulAux (c • x) y) (x' ⊗ₜ[R] y') = ↑(c • mulAux x y) (x' ⊗ₜ[R] y')
[PROOFSTEP]
simp only [mulAux_apply, LinearMap.smul_apply, smul_tmul', smul_mul_assoc]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A
y₁ y₂ : B
x' : A
y' : B
⊢ ↑(mulAux x (y₁ + y₂)) (x' ⊗ₜ[R] y') = ↑(mulAux x y₁ + mulAux x y₂) (x' ⊗ₜ[R] y')
[PROOFSTEP]
simp only [mulAux_apply, LinearMap.add_apply, add_mul, tmul_add]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
c : R
x : A
y : B
x' : A
y' : B
⊢ ↑(mulAux x (c • y)) (x' ⊗ₜ[R] y') = ↑(c • mulAux x y) (x' ⊗ₜ[R] y')
[PROOFSTEP]
simp only [mulAux_apply, LinearMap.smul_apply, smul_tmul, smul_tmul', smul_mul_assoc]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x y z : A ⊗[R] B
⊢ ↑(↑mul (↑(↑mul x) y)) z = ↑(↑mul x) (↑(↑mul y) z)
[PROOFSTEP]
suffices
  LinearMap.llcomp R _ _ _ mul ∘ₗ mul =
    (LinearMap.llcomp R _ _ _ LinearMap.lflip <| LinearMap.llcomp R _ _ _ mul.flip ∘ₗ mul).flip
  by exact FunLike.congr_fun (FunLike.congr_fun (FunLike.congr_fun this x) y) z
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x y z : A ⊗[R] B
this :
  LinearMap.comp
      (↑(LinearMap.llcomp R (?m.168282 ⊗[R] ?m.168285) (?m.168282 ⊗[R] ?m.168285)
            (?m.168282 ⊗[R] ?m.168285 →ₗ[R] ?m.168282 ⊗[R] ?m.168285))
        mul)
      mul =
    LinearMap.flip
      (↑(↑(LinearMap.llcomp R (?m.168282 ⊗[R] ?m.168285)
                (?m.168282 ⊗[R] ?m.168285 →ₗ[R] ?m.168282 ⊗[R] ?m.168285 →ₗ[R] ?m.168282 ⊗[R] ?m.168285)
                (?m.168282 ⊗[R] ?m.168285 →ₗ[R] ?m.168282 ⊗[R] ?m.168285 →ₗ[R] ?m.168282 ⊗[R] ?m.168285))
            LinearMap.lflip)
        (LinearMap.comp
          (↑(LinearMap.llcomp R (?m.168282 ⊗[R] ?m.168285) (?m.168282 ⊗[R] ?m.168285)
                (?m.168282 ⊗[R] ?m.168285 →ₗ[R] ?m.168282 ⊗[R] ?m.168285))
            (LinearMap.flip mul))
          mul))
⊢ ↑(↑mul (↑(↑mul x) y)) z = ↑(↑mul x) (↑(↑mul y) z)
[PROOFSTEP]
exact FunLike.congr_fun (FunLike.congr_fun (FunLike.congr_fun this x) y) z
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x y z : A ⊗[R] B
⊢ LinearMap.comp (↑(LinearMap.llcomp R (A ⊗[R] B) (A ⊗[R] B) (A ⊗[R] B →ₗ[R] A ⊗[R] B)) mul) mul =
    LinearMap.flip
      (↑(↑(LinearMap.llcomp R (A ⊗[R] B) (A ⊗[R] B →ₗ[R] A ⊗[R] B →ₗ[R] A ⊗[R] B)
                (A ⊗[R] B →ₗ[R] A ⊗[R] B →ₗ[R] A ⊗[R] B))
            LinearMap.lflip)
        (LinearMap.comp (↑(LinearMap.llcomp R (A ⊗[R] B) (A ⊗[R] B) (A ⊗[R] B →ₗ[R] A ⊗[R] B)) (LinearMap.flip mul))
          mul))
[PROOFSTEP]
ext xa xb ya yb za zb
[GOAL]
case a.h.h.a.h.h.a.h.h
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x y z : A ⊗[R] B
xa : A
xb : B
ya : A
yb : B
za : A
zb : B
⊢ ↑(↑(AlgebraTensorModule.curry
              (↑(↑(AlgebraTensorModule.curry
                        (↑(↑(AlgebraTensorModule.curry
                                  (LinearMap.comp
                                    (↑(LinearMap.llcomp R (A ⊗[R] B) (A ⊗[R] B) (A ⊗[R] B →ₗ[R] A ⊗[R] B)) mul) mul))
                              xa)
                          xb))
                    ya)
                yb))
          za)
      zb =
    ↑(↑(AlgebraTensorModule.curry
              (↑(↑(AlgebraTensorModule.curry
                        (↑(↑(AlgebraTensorModule.curry
                                  (LinearMap.flip
                                    (↑(↑(LinearMap.llcomp R (A ⊗[R] B) (A ⊗[R] B →ₗ[R] A ⊗[R] B →ₗ[R] A ⊗[R] B)
                                              (A ⊗[R] B →ₗ[R] A ⊗[R] B →ₗ[R] A ⊗[R] B))
                                          LinearMap.lflip)
                                      (LinearMap.comp
                                        (↑(LinearMap.llcomp R (A ⊗[R] B) (A ⊗[R] B) (A ⊗[R] B →ₗ[R] A ⊗[R] B))
                                          (LinearMap.flip mul))
                                        mul))))
                              xa)
                          xb))
                    ya)
                yb))
          za)
      zb
[PROOFSTEP]
exact congr_arg₂ (· ⊗ₜ ·) (mul_assoc xa ya za) (mul_assoc xb yb zb)
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ↑(↑mul (1 ⊗ₜ[R] 1)) x = x
[PROOFSTEP]
refine TensorProduct.induction_on x ?_ ?_ ?_
[GOAL]
case refine_1
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ↑(↑mul (1 ⊗ₜ[R] 1)) 0 = 0
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case refine_2
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ∀ (x : A) (y : B), ↑(↑mul (1 ⊗ₜ[R] 1)) (x ⊗ₜ[R] y) = x ⊗ₜ[R] y
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case refine_3
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ∀ (x y : A ⊗[R] B), ↑(↑mul (1 ⊗ₜ[R] 1)) x = x → ↑(↑mul (1 ⊗ₜ[R] 1)) y = y → ↑(↑mul (1 ⊗ₜ[R] 1)) (x + y) = x + y
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ↑(↑mul x) (1 ⊗ₜ[R] 1) = x
[PROOFSTEP]
refine TensorProduct.induction_on x ?_ ?_ ?_
[GOAL]
case refine_1
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ↑(↑mul 0) (1 ⊗ₜ[R] 1) = 0
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case refine_2
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ∀ (x : A) (y : B), ↑(↑mul (x ⊗ₜ[R] y)) (1 ⊗ₜ[R] 1) = x ⊗ₜ[R] y
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case refine_3
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
x : A ⊗[R] B
⊢ ∀ (x y : A ⊗[R] B), ↑(↑mul x) (1 ⊗ₜ[R] 1) = x → ↑(↑mul y) (1 ⊗ₜ[R] 1) = y → ↑(↑mul (x + y)) (1 ⊗ₜ[R] 1) = x + y
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
⊢ NatCast.natCast 0 = 0
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
n : ℕ
⊢ NatCast.natCast (n + 1) = NatCast.natCast n + 1
[PROOFSTEP]
simp [add_tmul, one_def]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
⊢ AddCommMonoid (A ⊗[R] B)
[PROOFSTEP]
infer_instance
  -- providing this instance separately makes some downstream code substantially faster
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a b c : A ⊗[R] B
⊢ a * (b + c) = a * b + a * c
[PROOFSTEP]
simp [HMul.hMul, Mul.mul]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a b c : A ⊗[R] B
⊢ (a + b) * c = a * c + b * c
[PROOFSTEP]
simp [HMul.hMul, Mul.mul]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a : A ⊗[R] B
⊢ 0 * a = 0
[PROOFSTEP]
simp [HMul.hMul, Mul.mul]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a : A ⊗[R] B
⊢ a * 0 = 0
[PROOFSTEP]
simp [HMul.hMul, Mul.mul]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a : A
b : B
k : ℕ
⊢ a ⊗ₜ[R] b ^ k = (a ^ k) ⊗ₜ[R] (b ^ k)
[PROOFSTEP]
induction' k with k ih
[GOAL]
case zero
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a : A
b : B
⊢ a ⊗ₜ[R] b ^ Nat.zero = (a ^ Nat.zero) ⊗ₜ[R] (b ^ Nat.zero)
[PROOFSTEP]
simp [one_def]
[GOAL]
case succ
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
a : A
b : B
k : ℕ
ih : a ⊗ₜ[R] b ^ k = (a ^ k) ⊗ₜ[R] (b ^ k)
⊢ a ⊗ₜ[R] b ^ Nat.succ k = (a ^ Nat.succ k) ⊗ₜ[R] (b ^ Nat.succ k)
[PROOFSTEP]
simp [pow_succ, ih]
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
⊢ ∀ (x y : A),
    OneHom.toFun { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) }
        (x * y) =
      OneHom.toFun { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) }
          x *
        OneHom.toFun { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) }
          y
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
⊢ OneHom.toFun
      (↑{
          toOneHom :=
            { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) },
          map_mul' := (_ : ∀ (a a_1 : A), (a * a_1) ⊗ₜ[R] 1 = (a * a_1) ⊗ₜ[R] (1 * 1)) })
      0 =
    0
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁴ : CommSemiring R
A : Type v₁
inst✝³ : Semiring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Semiring B
inst✝ : Algebra R B
⊢ ∀ (x y : A),
    OneHom.toFun
        (↑{
            toOneHom :=
              { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) },
            map_mul' := (_ : ∀ (a a_1 : A), (a * a_1) ⊗ₜ[R] 1 = (a * a_1) ⊗ₜ[R] (1 * 1)) })
        (x + y) =
      OneHom.toFun
          (↑{
              toOneHom :=
                { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) },
              map_mul' := (_ : ∀ (a a_1 : A), (a * a_1) ⊗ₜ[R] 1 = (a * a_1) ⊗ₜ[R] (1 * 1)) })
          x +
        OneHom.toFun
          (↑{
              toOneHom :=
                { toFun := fun a => a ⊗ₜ[R] 1, map_one' := (_ : (fun a => a ⊗ₜ[R] 1) 1 = (fun a => a ⊗ₜ[R] 1) 1) },
              map_mul' := (_ : ∀ (a a_1 : A), (a * a_1) ⊗ₜ[R] 1 = (a * a_1) ⊗ₜ[R] (1 * 1)) })
          y
[PROOFSTEP]
simp [add_tmul]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x y : A ⊗[R] B
⊢ (r • x) • y = r • x • y
[PROOFSTEP]
change r • x * y = r • (x * y)
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x y : A ⊗[R] B
⊢ r • x * y = r • (x * y)
[PROOFSTEP]
induction y using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a b =>
  induction x using TensorProduct.induction_on with
  | zero => simp [smul_zero]
  | tmul a' b' =>
    dsimp
    rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
  | add x y hx hy => simp [smul_add, add_mul _, *]
| add x y hx hy => simp [smul_add, mul_add _, *]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x y : A ⊗[R] B
⊢ r • x * y = r • (x * y)
[PROOFSTEP]
induction y using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a b =>
  induction x using TensorProduct.induction_on with
  | zero => simp [smul_zero]
  | tmul a' b' =>
    dsimp
    rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
  | add x y hx hy => simp [smul_add, add_mul _, *]
| add x y hx hy => simp [smul_add, mul_add _, *]
[GOAL]
case zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
⊢ r • x * 0 = r • (x * 0)
[PROOFSTEP]

| zero => simp [smul_zero]
[GOAL]
case zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
⊢ r • x * 0 = r • (x * 0)
[PROOFSTEP]
simp [smul_zero]
[GOAL]
case tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
a : A
b : B
⊢ r • x * a ⊗ₜ[R] b = r • (x * a ⊗ₜ[R] b)
[PROOFSTEP]

| tmul a b =>
  induction x using TensorProduct.induction_on with
  | zero => simp [smul_zero]
  | tmul a' b' =>
    dsimp
    rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
  | add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
a : A
b : B
⊢ r • x * a ⊗ₜ[R] b = r • (x * a ⊗ₜ[R] b)
[PROOFSTEP]
induction x using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a' b' =>
  dsimp
  rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
| add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
a : A
b : B
⊢ r • x * a ⊗ₜ[R] b = r • (x * a ⊗ₜ[R] b)
[PROOFSTEP]
induction x using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a' b' =>
  dsimp
  rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
| add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul.zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
⊢ r • 0 * a ⊗ₜ[R] b = r • (0 * a ⊗ₜ[R] b)
[PROOFSTEP]

| zero => simp [smul_zero]
[GOAL]
case tmul.zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
⊢ r • 0 * a ⊗ₜ[R] b = r • (0 * a ⊗ₜ[R] b)
[PROOFSTEP]
simp [smul_zero]
[GOAL]
case tmul.tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
a' : A
b' : B
⊢ r • a' ⊗ₜ[R] b' * a ⊗ₜ[R] b = r • (a' ⊗ₜ[R] b' * a ⊗ₜ[R] b)
[PROOFSTEP]

| tmul a' b' =>
  dsimp
  rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
[GOAL]
case tmul.tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
a' : A
b' : B
⊢ r • a' ⊗ₜ[R] b' * a ⊗ₜ[R] b = r • (a' ⊗ₜ[R] b' * a ⊗ₜ[R] b)
[PROOFSTEP]
dsimp
[GOAL]
case tmul.tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
a' : A
b' : B
⊢ r • a' ⊗ₜ[R] b' * a ⊗ₜ[R] b = r • (a' * a) ⊗ₜ[R] (b' * b)
[PROOFSTEP]
rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, smul_mul_assoc]
[GOAL]
case tmul.add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
x y : A ⊗[R] B
hx : r • x * a ⊗ₜ[R] b = r • (x * a ⊗ₜ[R] b)
hy : r • y * a ⊗ₜ[R] b = r • (y * a ⊗ₜ[R] b)
⊢ r • (x + y) * a ⊗ₜ[R] b = r • ((x + y) * a ⊗ₜ[R] b)
[PROOFSTEP]

| add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul.add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
x y : A ⊗[R] B
hx : r • x * a ⊗ₜ[R] b = r • (x * a ⊗ₜ[R] b)
hy : r • y * a ⊗ₜ[R] b = r • (y * a ⊗ₜ[R] b)
⊢ r • (x + y) * a ⊗ₜ[R] b = r • ((x + y) * a ⊗ₜ[R] b)
[PROOFSTEP]
simp [smul_add, add_mul _, *]
[GOAL]
case add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x✝ x y : A ⊗[R] B
hx : r • x✝ * x = r • (x✝ * x)
hy : r • x✝ * y = r • (x✝ * y)
⊢ r • x✝ * (x + y) = r • (x✝ * (x + y))
[PROOFSTEP]

| add x y hx hy => simp [smul_add, mul_add _, *]
[GOAL]
case add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : IsScalarTower S A A
inst✝ : SMulCommClass R S A
r : S
x✝ x y : A ⊗[R] B
hx : r • x✝ * x = r • (x✝ * x)
hy : r • x✝ * y = r • (x✝ * y)
⊢ r • x✝ * (x + y) = r • (x✝ * (x + y))
[PROOFSTEP]
simp [smul_add, mul_add _, *]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x y : A ⊗[R] B
⊢ r • x • y = x • r • y
[PROOFSTEP]
change r • (x * y) = x * r • y
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x y : A ⊗[R] B
⊢ r • (x * y) = x * r • y
[PROOFSTEP]
induction y using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a b =>
  induction x using TensorProduct.induction_on with
  | zero => simp [smul_zero]
  | tmul a' b' =>
    dsimp
    rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
  | add x y hx hy => simp [smul_add, add_mul _, *]
| add x y hx hy => simp [smul_add, mul_add _, *]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x y : A ⊗[R] B
⊢ r • (x * y) = x * r • y
[PROOFSTEP]
induction y using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a b =>
  induction x using TensorProduct.induction_on with
  | zero => simp [smul_zero]
  | tmul a' b' =>
    dsimp
    rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
  | add x y hx hy => simp [smul_add, add_mul _, *]
| add x y hx hy => simp [smul_add, mul_add _, *]
[GOAL]
case zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
⊢ r • (x * 0) = x * r • 0
[PROOFSTEP]

| zero => simp [smul_zero]
[GOAL]
case zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
⊢ r • (x * 0) = x * r • 0
[PROOFSTEP]
simp [smul_zero]
[GOAL]
case tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
a : A
b : B
⊢ r • (x * a ⊗ₜ[R] b) = x * r • a ⊗ₜ[R] b
[PROOFSTEP]

| tmul a b =>
  induction x using TensorProduct.induction_on with
  | zero => simp [smul_zero]
  | tmul a' b' =>
    dsimp
    rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
  | add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
a : A
b : B
⊢ r • (x * a ⊗ₜ[R] b) = x * r • a ⊗ₜ[R] b
[PROOFSTEP]
induction x using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a' b' =>
  dsimp
  rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
| add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x : A ⊗[R] B
a : A
b : B
⊢ r • (x * a ⊗ₜ[R] b) = x * r • a ⊗ₜ[R] b
[PROOFSTEP]
induction x using TensorProduct.induction_on with
| zero => simp [smul_zero]
| tmul a' b' =>
  dsimp
  rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
| add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul.zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
⊢ r • (0 * a ⊗ₜ[R] b) = 0 * r • a ⊗ₜ[R] b
[PROOFSTEP]

| zero => simp [smul_zero]
[GOAL]
case tmul.zero
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
⊢ r • (0 * a ⊗ₜ[R] b) = 0 * r • a ⊗ₜ[R] b
[PROOFSTEP]
simp [smul_zero]
[GOAL]
case tmul.tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
a' : A
b' : B
⊢ r • (a' ⊗ₜ[R] b' * a ⊗ₜ[R] b) = a' ⊗ₜ[R] b' * r • a ⊗ₜ[R] b
[PROOFSTEP]

| tmul a' b' =>
  dsimp
  rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
[GOAL]
case tmul.tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
a' : A
b' : B
⊢ r • (a' ⊗ₜ[R] b' * a ⊗ₜ[R] b) = a' ⊗ₜ[R] b' * r • a ⊗ₜ[R] b
[PROOFSTEP]
dsimp
[GOAL]
case tmul.tmul
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
a' : A
b' : B
⊢ r • (a' * a) ⊗ₜ[R] (b' * b) = a' ⊗ₜ[R] b' * r • a ⊗ₜ[R] b
[PROOFSTEP]
rw [TensorProduct.smul_tmul', TensorProduct.smul_tmul', tmul_mul_tmul, mul_smul_comm]
[GOAL]
case tmul.add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
x y : A ⊗[R] B
hx : r • (x * a ⊗ₜ[R] b) = x * r • a ⊗ₜ[R] b
hy : r • (y * a ⊗ₜ[R] b) = y * r • a ⊗ₜ[R] b
⊢ r • ((x + y) * a ⊗ₜ[R] b) = (x + y) * r • a ⊗ₜ[R] b
[PROOFSTEP]

| add x y hx hy => simp [smul_add, add_mul _, *]
[GOAL]
case tmul.add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
a : A
b : B
x y : A ⊗[R] B
hx : r • (x * a ⊗ₜ[R] b) = x * r • a ⊗ₜ[R] b
hy : r • (y * a ⊗ₜ[R] b) = y * r • a ⊗ₜ[R] b
⊢ r • ((x + y) * a ⊗ₜ[R] b) = (x + y) * r • a ⊗ₜ[R] b
[PROOFSTEP]
simp [smul_add, add_mul _, *]
[GOAL]
case add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x✝ x y : A ⊗[R] B
hx : r • (x✝ * x) = x✝ * r • x
hy : r • (x✝ * y) = x✝ * r • y
⊢ r • (x✝ * (x + y)) = x✝ * r • (x + y)
[PROOFSTEP]

| add x y hx hy => simp [smul_add, mul_add _, *]
[GOAL]
case add
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : Monoid S
inst✝² : DistribMulAction S A
inst✝¹ : SMulCommClass S A A
inst✝ : SMulCommClass R S A
r : S
x✝ x y : A ⊗[R] B
hx : r • (x✝ * x) = x✝ * r • x
hy : r • (x✝ * y) = x✝ * r • y
⊢ r • (x✝ * (x + y)) = x✝ * r • (x + y)
[PROOFSTEP]
simp [smul_add, mul_add _, *]
[GOAL]
R : Type u
inst✝⁷ : CommSemiring R
A : Type v₁
inst✝⁶ : Semiring A
inst✝⁵ : Algebra R A
B : Type v₂
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
S : Type u_1
inst✝² : CommSemiring S
inst✝¹ : Algebra S A
inst✝ : SMulCommClass R S A
r : S
x : (fun x => A ⊗[R] B) r
⊢ ↑(RingHom.comp includeLeftRingHom (algebraMap S A)) r * x = x * ↑(RingHom.comp includeLeftRingHom (algebraMap S A)) r
[PROOFSTEP]
dsimp only [RingHom.toFun_eq_coe, RingHom.comp_apply, includeLeftRingHom_apply]
[GOAL]
R : Type u
inst✝⁷ : CommSemiring R
A : Type v₁
inst✝⁶ : Semiring A
inst✝⁵ : Algebra R A
B : Type v₂
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
S : Type u_1
inst✝² : CommSemiring S
inst✝¹ : Algebra S A
inst✝ : SMulCommClass R S A
r : S
x : (fun x => A ⊗[R] B) r
⊢ ↑(algebraMap S A) r ⊗ₜ[R] 1 * x = x * ↑(algebraMap S A) r ⊗ₜ[R] 1
[PROOFSTEP]
rw [algebraMap_eq_smul_one, ← smul_tmul', ← one_def, mul_smul_comm, smul_mul_assoc, mul_one, one_mul]
[GOAL]
R : Type u
inst✝⁷ : CommSemiring R
A : Type v₁
inst✝⁶ : Semiring A
inst✝⁵ : Algebra R A
B : Type v₂
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
S : Type u_1
inst✝² : CommSemiring S
inst✝¹ : Algebra S A
inst✝ : SMulCommClass R S A
r : S
x : (fun x => A ⊗[R] B) r
⊢ r • x = ↑(RingHom.comp includeLeftRingHom (algebraMap S A)) r * x
[PROOFSTEP]
dsimp only [RingHom.toFun_eq_coe, RingHom.comp_apply, includeLeftRingHom_apply]
[GOAL]
R : Type u
inst✝⁷ : CommSemiring R
A : Type v₁
inst✝⁶ : Semiring A
inst✝⁵ : Algebra R A
B : Type v₂
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
S : Type u_1
inst✝² : CommSemiring S
inst✝¹ : Algebra S A
inst✝ : SMulCommClass R S A
r : S
x : (fun x => A ⊗[R] B) r
⊢ r • x = ↑(algebraMap S A) r ⊗ₜ[R] 1 * x
[PROOFSTEP]
rw [algebraMap_eq_smul_one, ← smul_tmul', smul_mul_assoc, ← one_def, one_mul]
[GOAL]
R : Type u
inst✝⁹ : CommSemiring R
A : Type v₁
inst✝⁸ : Semiring A
inst✝⁷ : Algebra R A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
S : Type u_1
inst✝⁴ : CommSemiring S
inst✝³ : Algebra S A
C : Type v₃
inst✝² : Semiring C
inst✝¹ : Algebra R C
inst✝ : SMulCommClass R S A
src✝ : A →+* A ⊗[R] B := includeLeftRingHom
⊢ ∀ (r : S),
    OneHom.toFun
        (↑↑{ toMonoidHom := ↑src✝, map_zero' := (_ : OneHom.toFun (↑↑src✝) 0 = 0),
              map_add' :=
                (_ : ∀ (x y : A), OneHom.toFun (↑↑src✝) (x + y) = OneHom.toFun (↑↑src✝) x + OneHom.toFun (↑↑src✝) y) })
        (↑(algebraMap S A) r) =
      ↑(algebraMap S (A ⊗[R] B)) r
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
⊢ ∀ (x y : B),
    OneHom.toFun { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) }
        (x * y) =
      OneHom.toFun { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) }
          x *
        OneHom.toFun { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) }
          y
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
⊢ OneHom.toFun
      (↑{
          toOneHom :=
            { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) },
          map_mul' := (_ : ∀ (a a_1 : B), 1 ⊗ₜ[R] (a * a_1) = (1 * 1) ⊗ₜ[R] (a * a_1)) })
      0 =
    0
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
⊢ ∀ (x y : B),
    OneHom.toFun
        (↑{
            toOneHom :=
              { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) },
            map_mul' := (_ : ∀ (a a_1 : B), 1 ⊗ₜ[R] (a * a_1) = (1 * 1) ⊗ₜ[R] (a * a_1)) })
        (x + y) =
      OneHom.toFun
          (↑{
              toOneHom :=
                { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) },
              map_mul' := (_ : ∀ (a a_1 : B), 1 ⊗ₜ[R] (a * a_1) = (1 * 1) ⊗ₜ[R] (a * a_1)) })
          x +
        OneHom.toFun
          (↑{
              toOneHom :=
                { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) },
              map_mul' := (_ : ∀ (a a_1 : B), 1 ⊗ₜ[R] (a * a_1) = (1 * 1) ⊗ₜ[R] (a * a_1)) })
          y
[PROOFSTEP]
simp [tmul_add]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
r : R
⊢ OneHom.toFun
      (↑↑{
            toMonoidHom :=
              {
                toOneHom :=
                  { toFun := fun b => 1 ⊗ₜ[R] b, map_one' := (_ : (fun b => 1 ⊗ₜ[R] b) 1 = (fun b => 1 ⊗ₜ[R] b) 1) },
                map_mul' := (_ : ∀ (a a_1 : B), 1 ⊗ₜ[R] (a * a_1) = (1 * 1) ⊗ₜ[R] (a * a_1)) },
            map_zero' := (_ : 1 ⊗ₜ[R] 0 = 0),
            map_add' := (_ : ∀ (a a_1 : B), 1 ⊗ₜ[R] (a + a_1) = 1 ⊗ₜ[R] a + 1 ⊗ₜ[R] a_1) })
      (↑(algebraMap R B) r) =
    ↑(algebraMap R (A ⊗[R] B)) r
[PROOFSTEP]
simp only [algebraMap_apply]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
r : R
⊢ 1 ⊗ₜ[R] ↑(algebraMap R B) r = ↑(algebraMap R A) r ⊗ₜ[R] 1
[PROOFSTEP]
trans r • (1 : A) ⊗ₜ[R] (1 : B)
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
r : R
⊢ 1 ⊗ₜ[R] ↑(algebraMap R B) r = r • 1 ⊗ₜ[R] 1
[PROOFSTEP]
rw [← tmul_smul, Algebra.smul_def]
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
r : R
⊢ 1 ⊗ₜ[R] ↑(algebraMap R B) r = 1 ⊗ₜ[R] (↑(algebraMap R B) r * 1)
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
S : Type u_1
inst✝³ : CommSemiring S
inst✝² : Algebra S A
C : Type v₃
inst✝¹ : Semiring C
inst✝ : Algebra R C
r : R
⊢ r • 1 ⊗ₜ[R] 1 = ↑(algebraMap R A) r ⊗ₜ[R] 1
[PROOFSTEP]
simp [Algebra.smul_def]
[GOAL]
R✝ : Type u
inst✝¹³ : CommSemiring R✝
A : Type v₁
inst✝¹² : Semiring A
inst✝¹¹ : Algebra R✝ A
B : Type v₂
inst✝¹⁰ : Semiring B
inst✝⁹ : Algebra R✝ B
S✝ : Type u_1
inst✝⁸ : CommSemiring S✝
inst✝⁷ : Algebra S✝ A
C : Type v₃
inst✝⁶ : Semiring C
inst✝⁵ : Algebra R✝ C
R : Type u_2
S : Type u_3
T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
⊢ RingHom.comp includeLeftRingHom (algebraMap R S) = RingHom.comp (↑includeRight) (algebraMap R T)
[PROOFSTEP]
ext
[GOAL]
case a
R✝ : Type u
inst✝¹³ : CommSemiring R✝
A : Type v₁
inst✝¹² : Semiring A
inst✝¹¹ : Algebra R✝ A
B : Type v₂
inst✝¹⁰ : Semiring B
inst✝⁹ : Algebra R✝ B
S✝ : Type u_1
inst✝⁸ : CommSemiring S✝
inst✝⁷ : Algebra S✝ A
C : Type v₃
inst✝⁶ : Semiring C
inst✝⁵ : Algebra R✝ C
R : Type u_2
S : Type u_3
T : Type u_4
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
x✝ : R
⊢ ↑(RingHom.comp includeLeftRingHom (algebraMap R S)) x✝ = ↑(RingHom.comp (↑includeRight) (algebraMap R T)) x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝¹² : CommSemiring R
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
B : Type v₂
inst✝⁹ : Semiring B
inst✝⁸ : Algebra R B
S : Type u_1
inst✝⁷ : CommSemiring S
inst✝⁶ : Algebra S A
C : Type v₃
inst✝⁵ : Semiring C
inst✝⁴ : Algebra R C
inst✝³ : Algebra R S
inst✝² : Algebra S C
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S C
f g : A ⊗[R] B →ₐ[S] C
ha : AlgHom.comp f includeLeft = AlgHom.comp g includeLeft
hb : AlgHom.comp (AlgHom.restrictScalars R f) includeRight = AlgHom.comp (AlgHom.restrictScalars R g) includeRight
⊢ f = g
[PROOFSTEP]
apply AlgHom.toLinearMap_injective
[GOAL]
case a
R : Type u
inst✝¹² : CommSemiring R
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
B : Type v₂
inst✝⁹ : Semiring B
inst✝⁸ : Algebra R B
S : Type u_1
inst✝⁷ : CommSemiring S
inst✝⁶ : Algebra S A
C : Type v₃
inst✝⁵ : Semiring C
inst✝⁴ : Algebra R C
inst✝³ : Algebra R S
inst✝² : Algebra S C
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S C
f g : A ⊗[R] B →ₐ[S] C
ha : AlgHom.comp f includeLeft = AlgHom.comp g includeLeft
hb : AlgHom.comp (AlgHom.restrictScalars R f) includeRight = AlgHom.comp (AlgHom.restrictScalars R g) includeRight
⊢ AlgHom.toLinearMap f = AlgHom.toLinearMap g
[PROOFSTEP]
ext a b
[GOAL]
case a.a.h.h
R : Type u
inst✝¹² : CommSemiring R
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
B : Type v₂
inst✝⁹ : Semiring B
inst✝⁸ : Algebra R B
S : Type u_1
inst✝⁷ : CommSemiring S
inst✝⁶ : Algebra S A
C : Type v₃
inst✝⁵ : Semiring C
inst✝⁴ : Algebra R C
inst✝³ : Algebra R S
inst✝² : Algebra S C
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S C
f g : A ⊗[R] B →ₐ[S] C
ha : AlgHom.comp f includeLeft = AlgHom.comp g includeLeft
hb : AlgHom.comp (AlgHom.restrictScalars R f) includeRight = AlgHom.comp (AlgHom.restrictScalars R g) includeRight
a : A
b : B
⊢ ↑(↑(AlgebraTensorModule.curry (AlgHom.toLinearMap f)) a) b =
    ↑(↑(AlgebraTensorModule.curry (AlgHom.toLinearMap g)) a) b
[PROOFSTEP]
have := congr_arg₂ HMul.hMul (AlgHom.congr_fun ha a) (AlgHom.congr_fun hb b)
[GOAL]
case a.a.h.h
R : Type u
inst✝¹² : CommSemiring R
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
B : Type v₂
inst✝⁹ : Semiring B
inst✝⁸ : Algebra R B
S : Type u_1
inst✝⁷ : CommSemiring S
inst✝⁶ : Algebra S A
C : Type v₃
inst✝⁵ : Semiring C
inst✝⁴ : Algebra R C
inst✝³ : Algebra R S
inst✝² : Algebra S C
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S C
f g : A ⊗[R] B →ₐ[S] C
ha : AlgHom.comp f includeLeft = AlgHom.comp g includeLeft
hb : AlgHom.comp (AlgHom.restrictScalars R f) includeRight = AlgHom.comp (AlgHom.restrictScalars R g) includeRight
a : A
b : B
this :
  ↑(AlgHom.comp f includeLeft) a * ↑(AlgHom.comp (AlgHom.restrictScalars R f) includeRight) b =
    ↑(AlgHom.comp g includeLeft) a * ↑(AlgHom.comp (AlgHom.restrictScalars R g) includeRight) b
⊢ ↑(↑(AlgebraTensorModule.curry (AlgHom.toLinearMap f)) a) b =
    ↑(↑(AlgebraTensorModule.curry (AlgHom.toLinearMap g)) a) b
[PROOFSTEP]
dsimp at *
[GOAL]
case a.a.h.h
R : Type u
inst✝¹² : CommSemiring R
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
B : Type v₂
inst✝⁹ : Semiring B
inst✝⁸ : Algebra R B
S : Type u_1
inst✝⁷ : CommSemiring S
inst✝⁶ : Algebra S A
C : Type v₃
inst✝⁵ : Semiring C
inst✝⁴ : Algebra R C
inst✝³ : Algebra R S
inst✝² : Algebra S C
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S C
f g : A ⊗[R] B →ₐ[S] C
ha : AlgHom.comp f includeLeft = AlgHom.comp g includeLeft
hb : AlgHom.comp (AlgHom.restrictScalars R f) includeRight = AlgHom.comp (AlgHom.restrictScalars R g) includeRight
a : A
b : B
this : ↑f (a ⊗ₜ[R] 1) * ↑f (1 ⊗ₜ[R] b) = ↑g (a ⊗ₜ[R] 1) * ↑g (1 ⊗ₜ[R] b)
⊢ ↑f (a ⊗ₜ[R] b) = ↑g (a ⊗ₜ[R] b)
[PROOFSTEP]
rwa [← f.map_mul, ← g.map_mul, tmul_mul_tmul, _root_.one_mul, _root_.mul_one] at this
[GOAL]
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : Ring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Ring B
inst✝ : Algebra R B
n : ℕ
⊢ IntCast.intCast ↑n = ↑n
[PROOFSTEP]
simp [natCast_def]
[GOAL]
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : Ring A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : Ring B
inst✝ : Algebra R B
n : ℕ
⊢ IntCast.intCast (Int.negSucc n) = -↑(n + 1)
[PROOFSTEP]
simp [natCast_def, add_tmul, neg_tmul, one_def]
[GOAL]
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
⊢ x * y = y * x
[PROOFSTEP]
refine TensorProduct.induction_on x ?_ ?_ ?_
[GOAL]
case refine_1
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
⊢ 0 * y = y * 0
[PROOFSTEP]
simp
[GOAL]
case refine_2
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
⊢ ∀ (x : A) (y_1 : B), x ⊗ₜ[R] y_1 * y = y * x ⊗ₜ[R] y_1
[PROOFSTEP]
intro a₁ b₁
[GOAL]
case refine_2
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ a₁ ⊗ₜ[R] b₁ * y = y * a₁ ⊗ₜ[R] b₁
[PROOFSTEP]
refine TensorProduct.induction_on y ?_ ?_ ?_
[GOAL]
case refine_2.refine_1
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ a₁ ⊗ₜ[R] b₁ * 0 = 0 * a₁ ⊗ₜ[R] b₁
[PROOFSTEP]
simp
[GOAL]
case refine_2.refine_2
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ ∀ (x : A) (y : B), a₁ ⊗ₜ[R] b₁ * x ⊗ₜ[R] y = x ⊗ₜ[R] y * a₁ ⊗ₜ[R] b₁
[PROOFSTEP]
intro a₂ b₂
[GOAL]
case refine_2.refine_2
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
a₁ : A
b₁ : B
a₂ : A
b₂ : B
⊢ a₁ ⊗ₜ[R] b₁ * a₂ ⊗ₜ[R] b₂ = a₂ ⊗ₜ[R] b₂ * a₁ ⊗ₜ[R] b₁
[PROOFSTEP]
simp [mul_comm]
[GOAL]
case refine_2.refine_3
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ ∀ (x y : A ⊗[R] B),
    a₁ ⊗ₜ[R] b₁ * x = x * a₁ ⊗ₜ[R] b₁ →
      a₁ ⊗ₜ[R] b₁ * y = y * a₁ ⊗ₜ[R] b₁ → a₁ ⊗ₜ[R] b₁ * (x + y) = (x + y) * a₁ ⊗ₜ[R] b₁
[PROOFSTEP]
intro a₂ b₂ ha hb
[GOAL]
case refine_2.refine_3
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
a₁ : A
b₁ : B
a₂ b₂ : A ⊗[R] B
ha : a₁ ⊗ₜ[R] b₁ * a₂ = a₂ * a₁ ⊗ₜ[R] b₁
hb : a₁ ⊗ₜ[R] b₁ * b₂ = b₂ * a₁ ⊗ₜ[R] b₁
⊢ a₁ ⊗ₜ[R] b₁ * (a₂ + b₂) = (a₂ + b₂) * a₁ ⊗ₜ[R] b₁
[PROOFSTEP]
rw [mul_add, add_mul, ha, hb]
[GOAL]
case refine_3
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y : A ⊗[R] B
⊢ ∀ (x y_1 : A ⊗[R] B), x * y = y * x → y_1 * y = y * y_1 → (x + y_1) * y = y * (x + y_1)
[PROOFSTEP]
intro x₁ x₂ h₁ h₂
[GOAL]
case refine_3
R : Type u
inst✝⁴ : CommRing R
A : Type v₁
inst✝³ : CommRing A
inst✝² : Algebra R A
B : Type v₂
inst✝¹ : CommRing B
inst✝ : Algebra R B
x y x₁ x₂ : A ⊗[R] B
h₁ : x₁ * y = y * x₁
h₂ : x₂ * y = y * x₂
⊢ (x₁ + x₂) * y = y * (x₁ + x₂)
[PROOFSTEP]
rw [mul_add, add_mul, h₁, h₂]
[GOAL]
A : Type v₁
inst✝¹ : Ring A
B : Type v₂
inst✝ : Ring B
⊢ Ring (A ⊗[ℤ] B)
[PROOFSTEP]
infer_instance
[GOAL]
A : Type v₁
inst✝¹ : CommRing A
B : Type v₂
inst✝ : CommRing B
⊢ CommRing (A ⊗[ℤ] B)
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
⊢ AddHom.toFun f.toAddHom 1 = 1
[PROOFSTEP]
rw [← (algebraMap S C).map_one, ← w₂, (algebraMap S A).map_one]
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
⊢ AddHom.toFun f.toAddHom 1 = ↑f (1 ⊗ₜ[R] 1)
[PROOFSTEP]
rfl
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
⊢ OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } (x * y) =
    OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } x *
      OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } y
[PROOFSTEP]
simp only
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
⊢ AddHom.toFun f.toAddHom (x * y) = AddHom.toFun f.toAddHom x * AddHom.toFun f.toAddHom y
[PROOFSTEP]
rw [LinearMap.toFun_eq_coe]
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
⊢ ↑f (x * y) = ↑f x * ↑f y
[PROOFSTEP]
refine TensorProduct.induction_on x ?_ ?_ ?_
[GOAL]
case refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
⊢ ↑f (0 * y) = ↑f 0 * ↑f y
[PROOFSTEP]
rw [zero_mul, map_zero, zero_mul]
[GOAL]
case refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
⊢ ∀ (x : A) (y_1 : B), ↑f (x ⊗ₜ[R] y_1 * y) = ↑f (x ⊗ₜ[R] y_1) * ↑f y
[PROOFSTEP]
intro a₁ b₁
[GOAL]
case refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ ↑f (a₁ ⊗ₜ[R] b₁ * y) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f y
[PROOFSTEP]
refine TensorProduct.induction_on y ?_ ?_ ?_
[GOAL]
case refine_2.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ ↑f (a₁ ⊗ₜ[R] b₁ * 0) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f 0
[PROOFSTEP]
rw [mul_zero, map_zero, mul_zero]
[GOAL]
case refine_2.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ ∀ (x : A) (y : B), ↑f (a₁ ⊗ₜ[R] b₁ * x ⊗ₜ[R] y) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (x ⊗ₜ[R] y)
[PROOFSTEP]
intro a₂ b₂
[GOAL]
case refine_2.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
a₁ : A
b₁ : B
a₂ : A
b₂ : B
⊢ ↑f (a₁ ⊗ₜ[R] b₁ * a₂ ⊗ₜ[R] b₂) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
[PROOFSTEP]
rw [tmul_mul_tmul, w₁]
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
a₁ : A
b₁ : B
⊢ ∀ (x y : A ⊗[R] B),
    ↑f (a₁ ⊗ₜ[R] b₁ * x) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f x →
      ↑f (a₁ ⊗ₜ[R] b₁ * y) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f y → ↑f (a₁ ⊗ₜ[R] b₁ * (x + y)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (x + y)
[PROOFSTEP]
intro x₁ x₂ h₁ h₂
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
a₁ : A
b₁ : B
x₁ x₂ : A ⊗[R] B
h₁ : ↑f (a₁ ⊗ₜ[R] b₁ * x₁) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f x₁
h₂ : ↑f (a₁ ⊗ₜ[R] b₁ * x₂) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f x₂
⊢ ↑f (a₁ ⊗ₜ[R] b₁ * (x₁ + x₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (x₁ + x₂)
[PROOFSTEP]
rw [mul_add, map_add, map_add, mul_add, h₁, h₂]
[GOAL]
case refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y : A ⊗[R] B
⊢ ∀ (x y_1 : A ⊗[R] B),
    ↑f (x * y) = ↑f x * ↑f y → ↑f (y_1 * y) = ↑f y_1 * ↑f y → ↑f ((x + y_1) * y) = ↑f (x + y_1) * ↑f y
[PROOFSTEP]
intro x₁ x₂ h₁ h₂
[GOAL]
case refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
x y x₁ x₂ : A ⊗[R] B
h₁ : ↑f (x₁ * y) = ↑f x₁ * ↑f y
h₂ : ↑f (x₂ * y) = ↑f x₂ * ↑f y
⊢ ↑f ((x₁ + x₂) * y) = ↑f (x₁ + x₂) * ↑f y
[PROOFSTEP]
rw [add_mul, map_add, map_add, add_mul, h₁, h₂]
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
⊢ OneHom.toFun
      (↑{ toOneHom := { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) },
          map_mul' :=
            (_ :
              ∀ (x y : A ⊗[R] B),
                OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } (x * y) =
                  OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } x *
                    OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } y) })
      0 =
    0
[PROOFSTEP]
simp only
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
⊢ AddHom.toFun f.toAddHom 0 = 0
[PROOFSTEP]
rw [LinearMap.toFun_eq_coe, map_zero]
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
r : S
⊢ OneHom.toFun
      (↑↑{
            toMonoidHom :=
              { toOneHom := { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) },
                map_mul' :=
                  (_ :
                    ∀ (x y : A ⊗[R] B),
                      OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } (x * y) =
                        OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } x *
                          OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } y) },
            map_zero' :=
              (_ :
                OneHom.toFun
                    (↑{ toOneHom := { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) },
                        map_mul' :=
                          (_ :
                            ∀ (x y : A ⊗[R] B),
                              OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) }
                                  (x * y) =
                                OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) } x *
                                  OneHom.toFun { toFun := f.toFun, map_one' := (_ : AddHom.toFun f.toAddHom 1 = 1) }
                                    y) })
                    0 =
                  0),
            map_add' :=
              (_ :
                ∀ (x y : A ⊗[R] B),
                  AddHom.toFun f.toAddHom (x + y) = AddHom.toFun f.toAddHom x + AddHom.toFun f.toAddHom y) })
      (↑(algebraMap S (A ⊗[R] B)) r) =
    ↑(algebraMap S C) r
[PROOFSTEP]
simp only
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ⊗[R] B →ₗ[S] C
w₁ : ∀ (a₁ a₂ : A) (b₁ b₂ : B), ↑f ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) = ↑f (a₁ ⊗ₜ[R] b₁) * ↑f (a₂ ⊗ₜ[R] b₂)
w₂ : ∀ (r : S), ↑f (↑(algebraMap S A) r ⊗ₜ[R] 1) = ↑(algebraMap S C) r
r : S
⊢ AddHom.toFun f.toAddHom (↑(algebraMap S (A ⊗[R] B)) r) = ↑(algebraMap S C) r
[PROOFSTEP]
rw [LinearMap.toFun_eq_coe, algebraMap_apply, w₂]
[GOAL]
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ↑f ((x₁ * x₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x₁ ⊗ₜ[R] c₁) * ↑f (x₂ ⊗ₜ[R] c₂)
[PROOFSTEP]
refine TensorProduct.induction_on x₁ ?_ ?_ ?_
[GOAL]
case refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ↑f ((0 * x₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f (0 ⊗ₜ[R] c₁) * ↑f (x₂ ⊗ₜ[R] c₂)
[PROOFSTEP]
refine TensorProduct.induction_on x₂ ?_ ?_ ?_
[GOAL]
case refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B), ↑f ((x ⊗ₜ[R] y * x₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (x₂ ⊗ₜ[R] c₂)
[PROOFSTEP]
refine TensorProduct.induction_on x₂ ?_ ?_ ?_
[GOAL]
case refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    ↑f ((x * x₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (x₂ ⊗ₜ[R] c₂) →
      ↑f ((y * x₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (x₂ ⊗ₜ[R] c₂) →
        ↑f (((x + y) * x₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x + y) ⊗ₜ[R] c₁) * ↑f (x₂ ⊗ₜ[R] c₂)
[PROOFSTEP]
refine TensorProduct.induction_on x₂ ?_ ?_ ?_
[GOAL]
case refine_1.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ↑f ((0 * 0) ⊗ₜ[R] (c₁ * c₂)) = ↑f (0 ⊗ₜ[R] c₁) * ↑f (0 ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_1.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B), ↑f ((0 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (0 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_1.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    ↑f ((0 * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (0 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
      ↑f ((0 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (0 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
        ↑f ((0 * (x + y)) ⊗ₜ[R] (c₁ * c₂)) = ↑f (0 ⊗ₜ[R] c₁) * ↑f ((x + y) ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_2.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B), ↑f ((x ⊗ₜ[R] y * 0) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (0 ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_2.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B) (x_1 : A) (y_1 : B),
    ↑f ((x_1 ⊗ₜ[R] y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 : A) (y : B), ↑f ((x_1 ⊗ₜ[R] y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x : A) (y_1 : B), ↑f ((x ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 : A) (y_1 : B),
          ↑f ((x_1 ⊗ₜ[R] y_1 * (x + y)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f ((x + y) ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_3.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    ↑f ((x * 0) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (0 ⊗ₜ[R] c₂) →
      ↑f ((y * 0) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (0 ⊗ₜ[R] c₂) →
        ↑f (((x + y) * 0) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x + y) ⊗ₜ[R] c₁) * ↑f (0 ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_3.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B) (x_1 y_1 : A ⊗[R] B),
    ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
      ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
        ↑f (((x_1 + y_1) * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 + y_1) ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_3.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 y : A ⊗[R] B),
        ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
          ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
            ↑f (((x_1 + y) * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 + y) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x y_1 : A ⊗[R] B),
          ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f (((x + y_1) * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x + y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 y_1 : A ⊗[R] B),
          ↑f ((x_1 * (x + y)) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x + y) ⊗ₜ[R] c₂) →
            ↑f ((y_1 * (x + y)) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x + y) ⊗ₜ[R] c₂) →
              ↑f (((x_1 + y_1) * (x + y)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 + y_1) ⊗ₜ[R] c₁) * ↑f ((x + y) ⊗ₜ[R] c₂)
[PROOFSTEP]
simp only [zero_tmul, tmul_zero, tmul_mul_tmul, map_zero, zero_mul, mul_zero, mul_add, add_mul, map_add, add_tmul,
  tmul_add, w₁]
[GOAL]
case refine_1.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A → B → True
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_1.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A → B → True
[PROOFSTEP]
intros
[GOAL]
case refine_1.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝ : A
y✝ : B
⊢ True
[PROOFSTEP]
trivial
[GOAL]
case refine_1.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A ⊗[R] B → A ⊗[R] B → True
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_1.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A ⊗[R] B → A ⊗[R] B → True
[PROOFSTEP]
intros
[GOAL]
case refine_1.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝ y✝ : A ⊗[R] B
⊢ True
[PROOFSTEP]
trivial
[GOAL]
case refine_2.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A → B → True
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_2.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A → B → True
[PROOFSTEP]
intros
[GOAL]
case refine_2.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝ : A
y✝ : B
⊢ True
[PROOFSTEP]
trivial
[GOAL]
case refine_2.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A → B → A → B → True
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_2.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A → B → A → B → True
[PROOFSTEP]
intros
[GOAL]
case refine_2.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝¹ : A
y✝¹ : B
x✝ : A
y✝ : B
⊢ True
[PROOFSTEP]
trivial
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 : A) (y : B), ↑f ((x_1 ⊗ₜ[R] y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x : A) (y_1 : B), ↑f ((x ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 : A) (y_1 : B),
          ↑f ((x_1 ⊗ₜ[R] y_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x_1 ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
            ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 : A) (y : B), ↑f ((x_1 ⊗ₜ[R] y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x : A) (y_1 : B), ↑f ((x ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 : A) (y_1 : B),
          ↑f ((x_1 ⊗ₜ[R] y_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x_1 ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
            ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)
[PROOFSTEP]
intros
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝¹ y✝¹ : A ⊗[R] B
a✝¹ : ∀ (x : A) (y : B), ↑f ((x ⊗ₜ[R] y * x✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂)
a✝ : ∀ (x : A) (y : B), ↑f ((x ⊗ₜ[R] y * y✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂)
x✝ : A
y✝ : B
⊢ ↑f ((x✝ ⊗ₜ[R] y✝ * x✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x✝ ⊗ₜ[R] y✝ * y✝¹) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f ((x✝ ⊗ₜ[R] y✝) ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) + ↑f ((x✝ ⊗ₜ[R] y✝) ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂)
[PROOFSTEP]
trivial
[GOAL]
case refine_3.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A ⊗[R] B → A ⊗[R] B → True
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_3.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ A ⊗[R] B → A ⊗[R] B → True
[PROOFSTEP]
intros
[GOAL]
case refine_3.refine_1
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝ y✝ : A ⊗[R] B
⊢ True
[PROOFSTEP]
trivial
[GOAL]
case refine_3.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B) (x_1 y_1 : A ⊗[R] B),
    ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
      ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
        ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂)
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_3.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B) (x_1 y_1 : A ⊗[R] B),
    ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
      ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
        ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂)
[PROOFSTEP]
intros
[GOAL]
case refine_3.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝¹ : A
y✝¹ : B
x✝ y✝ : A ⊗[R] B
a✝¹ : ↑f ((x✝ * x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x✝ ⊗ₜ[R] c₁) * ↑f ((x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] c₂)
a✝ : ↑f ((y✝ * x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y✝ ⊗ₜ[R] c₁) * ↑f ((x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] c₂)
⊢ ↑f ((x✝ * x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y✝ * x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f (x✝ ⊗ₜ[R] c₁) * ↑f ((x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] c₂) + ↑f (y✝ ⊗ₜ[R] c₁) * ↑f ((x✝¹ ⊗ₜ[R] y✝¹) ⊗ₜ[R] c₂)
[PROOFSTEP]
trivial
[GOAL]
case refine_3.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 y : A ⊗[R] B),
        ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
          ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
            ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) =
              ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x y_1 : A ⊗[R] B),
          ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
                ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 y_1 : A ⊗[R] B),
          ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
              ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
                ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * x) ⊗ₜ[R] (c₁ * c₂)) +
                  (↑f ((x_1 * y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂))) =
                ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) +
                  (↑f (x_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂))
[PROOFSTEP]
try
  intros
  trivial
[GOAL]
case refine_3.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 y : A ⊗[R] B),
        ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
          ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
            ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) =
              ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x y_1 : A ⊗[R] B),
          ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
                ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 y_1 : A ⊗[R] B),
          ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
              ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
                ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * x) ⊗ₜ[R] (c₁ * c₂)) +
                  (↑f ((x_1 * y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂))) =
                ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) +
                  (↑f (x_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂))
[PROOFSTEP]
intros
[GOAL]
case refine_3.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
x✝¹ y✝¹ : A ⊗[R] B
a✝³ :
  ∀ (x y : A ⊗[R] B),
    ↑f ((x * x✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) →
      ↑f ((y * x✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) →
        ↑f ((x * x✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * x✝¹) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂)
a✝² :
  ∀ (x y : A ⊗[R] B),
    ↑f ((x * y✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂) →
      ↑f ((y * y✝¹) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂) →
        ↑f ((x * y✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * y✝¹) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂)
x✝ y✝ : A ⊗[R] B
a✝¹ :
  ↑f ((x✝ * x✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x✝ * y✝¹) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f (x✝ ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) + ↑f (x✝ ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂)
a✝ :
  ↑f ((y✝ * x✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y✝ * y✝¹) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f (y✝ ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) + ↑f (y✝ ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂)
⊢ ↑f ((x✝ * x✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y✝ * x✝¹) ⊗ₜ[R] (c₁ * c₂)) +
      (↑f ((x✝ * y✝¹) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y✝ * y✝¹) ⊗ₜ[R] (c₁ * c₂))) =
    ↑f (x✝ ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) + ↑f (y✝ ⊗ₜ[R] c₁) * ↑f (x✝¹ ⊗ₜ[R] c₂) +
      (↑f (x✝ ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂) + ↑f (y✝ ⊗ₜ[R] c₁) * ↑f (y✝¹ ⊗ₜ[R] c₂))
[PROOFSTEP]
trivial
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 : A) (y : B), ↑f ((x_1 ⊗ₜ[R] y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x_1 ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x : A) (y_1 : B), ↑f ((x ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 : A) (y_1 : B),
          ↑f ((x_1 ⊗ₜ[R] y_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x_1 ⊗ₜ[R] y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
            ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f ((x_1 ⊗ₜ[R] y_1) ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)
[PROOFSTEP]
intros ab₁ ab₂ h₁ h₂ a b
[GOAL]
case refine_2.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
ab₁ ab₂ : A ⊗[R] B
h₁ : ∀ (x : A) (y : B), ↑f ((x ⊗ₜ[R] y * ab₁) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂)
h₂ : ∀ (x : A) (y : B), ↑f ((x ⊗ₜ[R] y * ab₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂)
a : A
b : B
⊢ ↑f ((a ⊗ₜ[R] b * ab₁) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((a ⊗ₜ[R] b * ab₂) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f ((a ⊗ₜ[R] b) ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) + ↑f ((a ⊗ₜ[R] b) ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂)
[PROOFSTEP]
rw [h₁, h₂]
[GOAL]
case refine_3.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x : A) (y : B) (x_1 y_1 : A ⊗[R] B),
    ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
      ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) →
        ↑f ((x_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * x ⊗ₜ[R] y) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f ((x ⊗ₜ[R] y) ⊗ₜ[R] c₂)
[PROOFSTEP]
intros a b ab₁ ab₂ h₁ h₂
[GOAL]
case refine_3.refine_2
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
a : A
b : B
ab₁ ab₂ : A ⊗[R] B
h₁ : ↑f ((ab₁ * a ⊗ₜ[R] b) ⊗ₜ[R] (c₁ * c₂)) = ↑f (ab₁ ⊗ₜ[R] c₁) * ↑f ((a ⊗ₜ[R] b) ⊗ₜ[R] c₂)
h₂ : ↑f ((ab₂ * a ⊗ₜ[R] b) ⊗ₜ[R] (c₁ * c₂)) = ↑f (ab₂ ⊗ₜ[R] c₁) * ↑f ((a ⊗ₜ[R] b) ⊗ₜ[R] c₂)
⊢ ↑f ((ab₁ * a ⊗ₜ[R] b) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((ab₂ * a ⊗ₜ[R] b) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f (ab₁ ⊗ₜ[R] c₁) * ↑f ((a ⊗ₜ[R] b) ⊗ₜ[R] c₂) + ↑f (ab₂ ⊗ₜ[R] c₁) * ↑f ((a ⊗ₜ[R] b) ⊗ₜ[R] c₂)
[PROOFSTEP]
rw [h₁, h₂]
[GOAL]
case refine_3.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 y : A ⊗[R] B),
        ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
          ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) →
            ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * x) ⊗ₜ[R] (c₁ * c₂)) =
              ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂)) →
      (∀ (x y_1 : A ⊗[R] B),
          ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f ((x * y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
                ↑f (x ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂)) →
        ∀ (x_1 y_1 : A ⊗[R] B),
          ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
              ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
            ↑f ((y_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂)) =
                ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) →
              ↑f ((x_1 * x) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * x) ⊗ₜ[R] (c₁ * c₂)) +
                  (↑f ((x_1 * y) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y_1 * y) ⊗ₜ[R] (c₁ * c₂))) =
                ↑f (x_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (x ⊗ₜ[R] c₂) +
                  (↑f (x_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂) + ↑f (y_1 ⊗ₜ[R] c₁) * ↑f (y ⊗ₜ[R] c₂))
[PROOFSTEP]
intros ab₁ ab₂ _ _ x y hx hy
[GOAL]
case refine_3.refine_3
R : Type u
S : Type uS
inst✝¹³ : CommSemiring R
inst✝¹² : CommSemiring S
inst✝¹¹ : Algebra R S
A : Type v₁
inst✝¹⁰ : Semiring A
inst✝⁹ : Algebra R A
inst✝⁸ : Algebra S A
inst✝⁷ : IsScalarTower R S A
B : Type v₂
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
C : Type v₃
inst✝⁴ : Semiring C
inst✝³ : Algebra R C
inst✝² : Algebra S C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : (A ⊗[R] B) ⊗[R] C ≃ₗ[R] D
w₁ :
  ∀ (a₁ a₂ : A) (b₁ b₂ : B) (c₁ c₂ : C),
    ↑f (((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) ⊗ₜ[R] (c₁ * c₂)) = ↑f ((a₁ ⊗ₜ[R] b₁) ⊗ₜ[R] c₁) * ↑f ((a₂ ⊗ₜ[R] b₂) ⊗ₜ[R] c₂)
w₂ : ∀ (r : R), ↑f ((↑(algebraMap R A) r ⊗ₜ[R] 1) ⊗ₜ[R] 1) = ↑(algebraMap R D) r
x₁ x₂ : A ⊗[R] B
c₁ c₂ : C
ab₁ ab₂ : A ⊗[R] B
a✝¹ :
  ∀ (x y : A ⊗[R] B),
    ↑f ((x * ab₁) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) →
      ↑f ((y * ab₁) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) →
        ↑f ((x * ab₁) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * ab₁) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂)
a✝ :
  ∀ (x y : A ⊗[R] B),
    ↑f ((x * ab₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂) →
      ↑f ((y * ab₂) ⊗ₜ[R] (c₁ * c₂)) = ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂) →
        ↑f ((x * ab₂) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * ab₂) ⊗ₜ[R] (c₁ * c₂)) =
          ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂)
x y : A ⊗[R] B
hx :
  ↑f ((x * ab₁) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((x * ab₂) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) + ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂)
hy :
  ↑f ((y * ab₁) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * ab₂) ⊗ₜ[R] (c₁ * c₂)) =
    ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂)
⊢ ↑f ((x * ab₁) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * ab₁) ⊗ₜ[R] (c₁ * c₂)) +
      (↑f ((x * ab₂) ⊗ₜ[R] (c₁ * c₂)) + ↑f ((y * ab₂) ⊗ₜ[R] (c₁ * c₂))) =
    ↑f (x ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₁ ⊗ₜ[R] c₂) +
      (↑f (x ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂) + ↑f (y ⊗ₜ[R] c₁) * ↑f (ab₂ ⊗ₜ[R] c₂))
[PROOFSTEP]
rw [add_add_add_comm, hx, hy, add_add_add_comm]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
⊢ ∀ (a₁ a₂ : R) (b₁ b₂ : A),
    ↑(_root_.TensorProduct.lid R A) ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) =
      ↑(_root_.TensorProduct.lid R A) (a₁ ⊗ₜ[R] b₁) * ↑(_root_.TensorProduct.lid R A) (a₂ ⊗ₜ[R] b₂)
[PROOFSTEP]
simp only [mul_smul, lid_tmul, Algebra.smul_mul_assoc, Algebra.mul_smul_comm]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
⊢ ∀ (a₁ a₂ : R) (b₁ b₂ : A), a₁ • a₂ • (b₁ * b₂) = a₂ • a₁ • (b₁ * b₂)
[PROOFSTEP]
simp_rw [← mul_smul, mul_comm]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
⊢ R → R → A → A → True
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
⊢ ∀ (r : R), ↑(_root_.TensorProduct.lid R A) (↑(algebraMap R R) r ⊗ₜ[R] 1) = ↑(algebraMap R A) r
[PROOFSTEP]
simp [Algebra.smul_def]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
r : R
a : A
⊢ ↑(TensorProduct.lid R A) (r ⊗ₜ[R] a) = r • a
[PROOFSTEP]
simp [TensorProduct.lid]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
⊢ ∀ (a₁ a₂ : A) (b₁ b₂ : B),
    ↑(_root_.TensorProduct.comm R A B) ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) =
      ↑(_root_.TensorProduct.comm R A B) (a₁ ⊗ₜ[R] b₁) * ↑(_root_.TensorProduct.comm R A B) (a₂ ⊗ₜ[R] b₂)
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
r : R
⊢ ↑(_root_.TensorProduct.comm R A B) (↑(algebraMap R A) r ⊗ₜ[R] 1) = ↑(algebraMap R (B ⊗[R] A)) r
[PROOFSTEP]
trans r • (1 : B) ⊗ₜ[R] (1 : A)
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
r : R
⊢ ↑(_root_.TensorProduct.comm R A B) (↑(algebraMap R A) r ⊗ₜ[R] 1) = r • 1 ⊗ₜ[R] 1
[PROOFSTEP]
rw [← tmul_smul, Algebra.smul_def]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
r : R
⊢ ↑(_root_.TensorProduct.comm R A B) (↑(algebraMap R A) r ⊗ₜ[R] 1) = 1 ⊗ₜ[R] (↑(algebraMap R A) r * 1)
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
r : R
⊢ r • 1 ⊗ₜ[R] 1 = ↑(algebraMap R (B ⊗[R] A)) r
[PROOFSTEP]
simp [Algebra.smul_def]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
a : A
b : B
⊢ ↑(TensorProduct.comm R A B) (a ⊗ₜ[R] b) = b ⊗ₜ[R] a
[PROOFSTEP]
simp [TensorProduct.comm]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[S] B
g : C →ₐ[R] D
⊢ ∀ (a₁ a₂ : A) (b₁ b₂ : C),
    ↑(AlgebraTensorModule.map (AlgHom.toLinearMap f) (AlgHom.toLinearMap g)) ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) =
      ↑(AlgebraTensorModule.map (AlgHom.toLinearMap f) (AlgHom.toLinearMap g)) (a₁ ⊗ₜ[R] b₁) *
        ↑(AlgebraTensorModule.map (AlgHom.toLinearMap f) (AlgHom.toLinearMap g)) (a₂ ⊗ₜ[R] b₂)
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[S] B
g : C →ₐ[R] D
⊢ ∀ (r : S),
    ↑(AlgebraTensorModule.map (AlgHom.toLinearMap f) (AlgHom.toLinearMap g)) (↑(algebraMap S A) r ⊗ₜ[R] 1) =
      ↑(algebraMap S (B ⊗[R] D)) r
[PROOFSTEP]
simp [AlgHom.commutes]
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[S] B
g : C →ₐ[R] D
⊢ ∀ (x : A), ↑(AlgHom.comp (map f g) includeLeft) x = ↑(AlgHom.comp includeLeft f) x
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[S] B
g : C →ₐ[R] D
⊢ ∀ (x : C), ↑(AlgHom.comp (AlgHom.restrictScalars R (map f g)) includeRight) x = ↑(AlgHom.comp includeRight g) x
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
⊢ AlgHom.range (map f g) = AlgHom.range (AlgHom.comp includeLeft f) ⊔ AlgHom.range (AlgHom.comp includeRight g)
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
⊢ AlgHom.range (map f g) ≤ AlgHom.range (AlgHom.comp includeLeft f) ⊔ AlgHom.range (AlgHom.comp includeRight g)
[PROOFSTEP]
rw [← map_top, ← adjoin_tmul_eq_top, ← adjoin_image, adjoin_le_iff]
[GOAL]
case a
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
⊢ ↑(map f g) '' {t | ∃ a b, a ⊗ₜ[R] b = t} ⊆
    ↑(AlgHom.range (AlgHom.comp includeLeft f) ⊔ AlgHom.range (AlgHom.comp includeRight g))
[PROOFSTEP]
rintro _ ⟨_, ⟨a, b, rfl⟩, rfl⟩
[GOAL]
case a.intro.intro.intro.intro
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
a : A
b : C
⊢ ↑(map f g) (a ⊗ₜ[R] b) ∈ ↑(AlgHom.range (AlgHom.comp includeLeft f) ⊔ AlgHom.range (AlgHom.comp includeRight g))
[PROOFSTEP]
rw [map_tmul, ← _root_.mul_one (f a), ← _root_.one_mul (g b), ← tmul_mul_tmul]
[GOAL]
case a.intro.intro.intro.intro
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
a : A
b : C
⊢ ↑f a ⊗ₜ[R] 1 * 1 ⊗ₜ[R] ↑g b ∈ ↑(AlgHom.range (AlgHom.comp includeLeft f) ⊔ AlgHom.range (AlgHom.comp includeRight g))
[PROOFSTEP]
exact mul_mem_sup (AlgHom.mem_range_self _ a) (AlgHom.mem_range_self _ b)
[GOAL]
case a
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
⊢ AlgHom.range (AlgHom.comp includeLeft f) ⊔ AlgHom.range (AlgHom.comp includeRight g) ≤ AlgHom.range (map f g)
[PROOFSTEP]
rw [← map_comp_includeLeft f g, ← map_comp_includeRight f g]
[GOAL]
case a
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A →ₐ[R] B
g : C →ₐ[R] D
⊢ AlgHom.range (AlgHom.comp (map f g) includeLeft) ⊔ AlgHom.range (AlgHom.comp (map f g) includeRight) ≤
    AlgHom.range (map f g)
[PROOFSTEP]
exact sup_le (AlgHom.range_comp_le_range _ _) (AlgHom.range_comp_le_range _ _)
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ≃ₐ[S] B
g : C ≃ₐ[R] D
b : B
d : D
⊢ ↑(AlgHom.comp (map ↑f ↑g) (map ↑(AlgEquiv.symm f) ↑(AlgEquiv.symm g))) (b ⊗ₜ[R] d) =
    ↑(AlgHom.id S (B ⊗[R] D)) (b ⊗ₜ[R] d)
[PROOFSTEP]
simp
[GOAL]
R : Type u
S : Type uS
inst✝¹⁴ : CommSemiring R
inst✝¹³ : CommSemiring S
inst✝¹² : Algebra R S
A : Type v₁
inst✝¹¹ : Semiring A
inst✝¹⁰ : Algebra R A
inst✝⁹ : Algebra S A
inst✝⁸ : IsScalarTower R S A
B : Type v₂
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R B
inst✝⁵ : Algebra S B
inst✝⁴ : IsScalarTower R S B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
f : A ≃ₐ[S] B
g : C ≃ₐ[R] D
a : A
c : C
⊢ ↑(AlgHom.comp (map ↑(AlgEquiv.symm f) ↑(AlgEquiv.symm g)) (map ↑f ↑g)) (a ⊗ₜ[R] c) =
    ↑(AlgHom.id S (A ⊗[R] C)) (a ⊗ₜ[R] c)
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
a₁ a₂ b₁ b₂ : S
⊢ ↑(LinearMap.mul' R S) ((a₁ * a₂) ⊗ₜ[R] (b₁ * b₂)) =
    ↑(LinearMap.mul' R S) (a₁ ⊗ₜ[R] b₁) * ↑(LinearMap.mul' R S) (a₂ ⊗ₜ[R] b₂)
[PROOFSTEP]
simp only [LinearMap.mul'_apply, mul_mul_mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
r : R
⊢ ↑(LinearMap.mul' R S) (↑(algebraMap R S) r ⊗ₜ[R] 1) = ↑(algebraMap R S) r
[PROOFSTEP]
simp only [LinearMap.mul'_apply, _root_.mul_one]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
a : A
⊢ ↑(productMap f g) (a ⊗ₜ[R] 1) = ↑f a
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
⊢ ∀ (x : A), ↑(AlgHom.comp (productMap f g) includeLeft) x = ↑f x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
b : B
⊢ ↑(productMap f g) (1 ⊗ₜ[R] b) = ↑g b
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
⊢ ∀ (x : B), ↑(AlgHom.comp (productMap f g) includeRight) x = ↑g x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Semiring B
inst✝³ : CommSemiring S
inst✝² : Algebra R A
inst✝¹ : Algebra R B
inst✝ : Algebra R S
f : A →ₐ[R] S
g : B →ₐ[R] S
⊢ AlgHom.range (productMap f g) = AlgHom.range f ⊔ AlgHom.range g
[PROOFSTEP]
rw [productMap, AlgHom.range_comp, map_range, map_sup, ← AlgHom.range_comp, ← AlgHom.range_comp, ← AlgHom.comp_assoc, ←
  AlgHom.comp_assoc, lmul'_comp_includeLeft, lmul'_comp_includeRight, AlgHom.id_comp, AlgHom.id_comp]
[GOAL]
R : Type u_1
A : Type u_2
A' : Type u_3
B : Type u_4
S : Type u_5
inst✝¹² : CommSemiring R
inst✝¹¹ : CommSemiring A
inst✝¹⁰ : Semiring A'
inst✝⁹ : Semiring B
inst✝⁸ : CommSemiring S
inst✝⁷ : Algebra R A
inst✝⁶ : Algebra R A'
inst✝⁵ : Algebra A A'
inst✝⁴ : IsScalarTower R A A'
inst✝³ : Algebra R B
inst✝² : Algebra R S
inst✝¹ : Algebra A S
inst✝ : IsScalarTower R A S
f : A' →ₐ[A] S
g : B →ₐ[R] S
src✝ : A' ⊗[R] B →+* S := ↑(productMap (AlgHom.restrictScalars R f) g)
r : A
⊢ OneHom.toFun
      (↑↑{ toMonoidHom := ↑src✝, map_zero' := (_ : OneHom.toFun (↑↑src✝) 0 = 0),
            map_add' :=
              (_ :
                ∀ (x y : A' ⊗[R] B),
                  OneHom.toFun (↑↑src✝) (x + y) = OneHom.toFun (↑↑src✝) x + OneHom.toFun (↑↑src✝) y) })
      (↑(algebraMap A (A' ⊗[R] B)) r) =
    ↑(algebraMap A S) r
[PROOFSTEP]
dsimp
[GOAL]
R : Type u_1
A : Type u_2
A' : Type u_3
B : Type u_4
S : Type u_5
inst✝¹² : CommSemiring R
inst✝¹¹ : CommSemiring A
inst✝¹⁰ : Semiring A'
inst✝⁹ : Semiring B
inst✝⁸ : CommSemiring S
inst✝⁷ : Algebra R A
inst✝⁶ : Algebra R A'
inst✝⁵ : Algebra A A'
inst✝⁴ : IsScalarTower R A A'
inst✝³ : Algebra R B
inst✝² : Algebra R S
inst✝¹ : Algebra A S
inst✝ : IsScalarTower R A S
f : A' →ₐ[A] S
g : B →ₐ[R] S
src✝ : A' ⊗[R] B →+* S := ↑(productMap (AlgHom.restrictScalars R f) g)
r : A
⊢ ↑f (↑(algebraMap A A') r) * ↑g 1 = ↑(algebraMap A S) r
[PROOFSTEP]
simp
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
m : M
⊢ ↑(basisAux R b) (r ⊗ₜ[k] m) = r • Finsupp.mapRange ↑(algebraMap k R) (_ : ↑(algebraMap k R) 0 = 0) (↑b.repr m)
[PROOFSTEP]
ext
[GOAL]
case h
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
m : M
a✝ : ι
⊢ ↑(↑(basisAux R b) (r ⊗ₜ[k] m)) a✝ =
    ↑(r • Finsupp.mapRange ↑(algebraMap k R) (_ : ↑(algebraMap k R) 0 = 0) (↑b.repr m)) a✝
[PROOFSTEP]
simp [basisAux, ← Algebra.commutes, Algebra.smul_def]
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
x : R ⊗[k] M
⊢ ↑(basisAux R b) (r • 0) = r • ↑(basisAux R b) 0
[PROOFSTEP]
simp
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
x✝ : R ⊗[k] M
x : R
y : M
⊢ ↑(basisAux R b) (r • x ⊗ₜ[k] y) = r • ↑(basisAux R b) (x ⊗ₜ[k] y)
[PROOFSTEP]
simp only [TensorProduct.smul_tmul', basisAux_tmul, smul_assoc]
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
x✝ x y : R ⊗[k] M
hx : ↑(basisAux R b) (r • x) = r • ↑(basisAux R b) x
hy : ↑(basisAux R b) (r • y) = r • ↑(basisAux R b) y
⊢ ↑(basisAux R b) (r • (x + y)) = r • ↑(basisAux R b) (x + y)
[PROOFSTEP]
simp [hx, hy]
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
i : ι
⊢ ↑(LinearEquiv.symm (basis R b).repr) (Finsupp.single i r) = r ⊗ₜ[k] ↑(LinearEquiv.symm b.repr) (Finsupp.single i 1)
[PROOFSTEP]
rw [basis, LinearEquiv.coe_symm_mk]
  -- porting note: `coe_symm_mk` isn't firing in `simp`
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
i : ι
⊢ LinearEquiv.invFun (basisAux R b) (Finsupp.single i r) = r ⊗ₜ[k] ↑(LinearEquiv.symm b.repr) (Finsupp.single i 1)
[PROOFSTEP]
simp [Equiv.uniqueProd_symm_apply, basisAux]
  -- Porting note: simpNF linter failed on `basis_repr_symm_apply`
[GOAL]
k : Type uk
inst✝⁴ : CommRing k
R : Type uR
inst✝³ : Ring R
inst✝² : Algebra k R
M : Type uM
inst✝¹ : AddCommMonoid M
inst✝ : Module k M
ι : Type uι
b : Basis ι k M
r : R
i : ι
⊢ r • ↑(basis R b) i = r ⊗ₜ[k] ↑b i
[PROOFSTEP]
simpa using basis_repr_symm_apply b r i
[GOAL]
K : Type u_1
L : Type u_2
inst✝⁴ : Field K
inst✝³ : CommRing L
inst✝² : Algebra K L
E1 E2 : Subalgebra K L
inst✝¹ : FiniteDimensional K { x // x ∈ E1 }
inst✝ : FiniteDimensional K { x // x ∈ E2 }
⊢ FiniteDimensional K { x // x ∈ E1 ⊔ E2 }
[PROOFSTEP]
rw [← E1.range_val, ← E2.range_val, ← Algebra.TensorProduct.productMap_range]
[GOAL]
K : Type u_1
L : Type u_2
inst✝⁴ : Field K
inst✝³ : CommRing L
inst✝² : Algebra K L
E1 E2 : Subalgebra K L
inst✝¹ : FiniteDimensional K { x // x ∈ E1 }
inst✝ : FiniteDimensional K { x // x ∈ E2 }
⊢ FiniteDimensional K { x // x ∈ AlgHom.range (Algebra.TensorProduct.productMap (val E1) (val E2)) }
[PROOFSTEP]
exact (Algebra.TensorProduct.productMap E1.val E2.val).toLinearMap.finiteDimensional_range
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
inst✝⁷ : Semiring A
inst✝⁶ : Semiring B
inst✝⁵ : Module A M
inst✝⁴ : Module B M
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : IsScalarTower R A M
inst✝ : IsScalarTower R B M
r t : A
⊢ (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) (r + t) =
    (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) r +
      (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) t
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
inst✝⁷ : Semiring A
inst✝⁶ : Semiring B
inst✝⁵ : Module A M
inst✝⁴ : Module B M
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : IsScalarTower R A M
inst✝ : IsScalarTower R B M
r t : A
x✝¹ : B
x✝ : M
⊢ ↑(↑((fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) (r + t)) x✝¹) x✝ =
    ↑(↑((fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) r +
              (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) t)
          x✝¹)
      x✝
[PROOFSTEP]
simp only [add_smul, LinearMap.add_apply]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
inst✝⁷ : Semiring A
inst✝⁶ : Semiring B
inst✝⁵ : Module A M
inst✝⁴ : Module B M
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : IsScalarTower R A M
inst✝ : IsScalarTower R B M
n : R
r : A
⊢ AddHom.toFun
      { toFun := fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M),
        map_add' :=
          (_ :
            ∀ (r t : A),
              (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) (r + t) =
                (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) r +
                  (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) t) }
      (n • r) =
    ↑(RingHom.id R) n •
      AddHom.toFun
        { toFun := fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M),
          map_add' :=
            (_ :
              ∀ (r t : A),
                (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) (r + t) =
                  (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) r +
                    (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) t) }
        r
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
inst✝⁷ : Semiring A
inst✝⁶ : Semiring B
inst✝⁵ : Module A M
inst✝⁴ : Module B M
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : IsScalarTower R A M
inst✝ : IsScalarTower R B M
n : R
r : A
x✝¹ : B
x✝ : M
⊢ ↑(↑(AddHom.toFun
              { toFun := fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M),
                map_add' :=
                  (_ :
                    ∀ (r t : A),
                      (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) (r + t) =
                        (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) r +
                          (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) t) }
              (n • r))
          x✝¹)
      x✝ =
    ↑(↑(↑(RingHom.id R) n •
              AddHom.toFun
                { toFun := fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M),
                  map_add' :=
                    (_ :
                      ∀ (r t : A),
                        (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) (r + t) =
                          (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) r +
                            (fun a => a • AlgHom.toLinearMap (Algebra.lsmul R R M)) t) }
                r)
          x✝¹)
      x✝
[PROOFSTEP]
simp only [RingHom.id_apply, LinearMap.smul_apply, smul_assoc]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
m : M
⊢ 1 • m = m
[PROOFSTEP]
simp only [(· • ·), Algebra.TensorProduct.one_def]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
m : M
⊢ ↑(↑moduleAux (1 ⊗ₜ[R] 1)) m = m
[PROOFSTEP]
simp only [moduleAux_apply, one_smul]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ (x * y) • m = x • y • m
[PROOFSTEP]
refine TensorProduct.induction_on x ?_ ?_ ?_
[GOAL]
case refine_1
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ (0 * y) • m = 0 • y • m
[PROOFSTEP]
refine TensorProduct.induction_on y ?_ ?_ ?_
[GOAL]
case refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x : A) (y_1 : B), (x ⊗ₜ[R] y_1 * y) • m = x ⊗ₜ[R] y_1 • y • m
[PROOFSTEP]
refine TensorProduct.induction_on y ?_ ?_ ?_
[GOAL]
case refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x y_1 : A ⊗[R] B), (x * y) • m = x • y • m → (y_1 * y) • m = y_1 • y • m → ((x + y_1) * y) • m = (x + y_1) • y • m
[PROOFSTEP]
refine TensorProduct.induction_on y ?_ ?_ ?_
[GOAL]
case refine_1.refine_1
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ (0 * 0) • m = 0 • 0 • m
[PROOFSTEP]
simp only [(· • ·), mul_zero, map_zero, LinearMap.zero_apply]
[GOAL]
case refine_1.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x : A) (y : B), (0 * x ⊗ₜ[R] y) • m = 0 • x ⊗ₜ[R] y • m
[PROOFSTEP]
intro a b
[GOAL]
case refine_1.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a : A
b : B
⊢ (0 * a ⊗ₜ[R] b) • m = 0 • a ⊗ₜ[R] b • m
[PROOFSTEP]
simp only [(· • ·), zero_mul, map_zero, LinearMap.zero_apply]
[GOAL]
case refine_1.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x y : A ⊗[R] B), (0 * x) • m = 0 • x • m → (0 * y) • m = 0 • y • m → (0 * (x + y)) • m = 0 • (x + y) • m
[PROOFSTEP]
intro z w _ _
[GOAL]
case refine_1.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
z w : A ⊗[R] B
a✝¹ : (0 * z) • m = 0 • z • m
a✝ : (0 * w) • m = 0 • w • m
⊢ (0 * (z + w)) • m = 0 • (z + w) • m
[PROOFSTEP]
simp only [(· • ·), zero_mul, map_zero, LinearMap.zero_apply]
[GOAL]
case refine_2.refine_1
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x : A) (y : B), (x ⊗ₜ[R] y * 0) • m = x ⊗ₜ[R] y • 0 • m
[PROOFSTEP]
intro a b
[GOAL]
case refine_2.refine_1
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a : A
b : B
⊢ (a ⊗ₜ[R] b * 0) • m = a ⊗ₜ[R] b • 0 • m
[PROOFSTEP]
simp only [(· • ·), mul_zero, map_zero, LinearMap.zero_apply]
[GOAL]
case refine_2.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x : A) (y : B) (x_1 : A) (y_1 : B), (x_1 ⊗ₜ[R] y_1 * x ⊗ₜ[R] y) • m = x_1 ⊗ₜ[R] y_1 • x ⊗ₜ[R] y • m
[PROOFSTEP]
intro a₁ b₁ a₂ b₂
[GOAL]
case refine_2.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a₁ : A
b₁ : B
a₂ : A
b₂ : B
⊢ (a₂ ⊗ₜ[R] b₂ * a₁ ⊗ₜ[R] b₁) • m = a₂ ⊗ₜ[R] b₂ • a₁ ⊗ₜ[R] b₁ • m
[PROOFSTEP]
simp only [(· • ·), Algebra.TensorProduct.tmul_mul_tmul]
[GOAL]
case refine_2.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a₁ : A
b₁ : B
a₂ : A
b₂ : B
⊢ ↑(↑moduleAux ((a₂ * a₁) ⊗ₜ[R] (b₂ * b₁))) m = ↑(↑moduleAux (a₂ ⊗ₜ[R] b₂)) (↑(↑moduleAux (a₁ ⊗ₜ[R] b₁)) m)
[PROOFSTEP]
simp only [moduleAux_apply, mul_smul]
[GOAL]
case refine_2.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a₁ : A
b₁ : B
a₂ : A
b₂ : B
⊢ a₂ • a₁ • b₂ • b₁ • m = a₂ • b₂ • a₁ • b₁ • m
[PROOFSTEP]
rw [smul_comm a₁ b₂]
[GOAL]
case refine_2.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 : A) (y : B), (x_1 ⊗ₜ[R] y * x) • m = x_1 ⊗ₜ[R] y • x • m) →
      (∀ (x : A) (y_1 : B), (x ⊗ₜ[R] y_1 * y) • m = x ⊗ₜ[R] y_1 • y • m) →
        ∀ (x_1 : A) (y_1 : B), (x_1 ⊗ₜ[R] y_1 * (x + y)) • m = x_1 ⊗ₜ[R] y_1 • (x + y) • m
[PROOFSTEP]
intro z w hz hw a b
[GOAL]
case refine_2.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
z w : A ⊗[R] B
hz : ∀ (x : A) (y : B), (x ⊗ₜ[R] y * z) • m = x ⊗ₜ[R] y • z • m
hw : ∀ (x : A) (y : B), (x ⊗ₜ[R] y * w) • m = x ⊗ₜ[R] y • w • m
a : A
b : B
⊢ (a ⊗ₜ[R] b * (z + w)) • m = a ⊗ₜ[R] b • (z + w) • m
[PROOFSTEP]
simp only [(· • ·)] at hz hw ⊢
[GOAL]
case refine_2.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
z w : A ⊗[R] B
hz : ∀ (x : A) (y : B), ↑(↑moduleAux (x ⊗ₜ[R] y * z)) m = ↑(↑moduleAux (x ⊗ₜ[R] y)) (↑(↑moduleAux z) m)
hw : ∀ (x : A) (y : B), ↑(↑moduleAux (x ⊗ₜ[R] y * w)) m = ↑(↑moduleAux (x ⊗ₜ[R] y)) (↑(↑moduleAux w) m)
a : A
b : B
⊢ ↑(↑moduleAux (a ⊗ₜ[R] b * (z + w))) m = ↑(↑moduleAux (a ⊗ₜ[R] b)) (↑(↑moduleAux (z + w)) m)
[PROOFSTEP]
simp only [moduleAux_apply]
[GOAL]
case refine_2.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
z w : A ⊗[R] B
hz : ∀ (x : A) (y : B), ↑(↑moduleAux (x ⊗ₜ[R] y * z)) m = ↑(↑moduleAux (x ⊗ₜ[R] y)) (↑(↑moduleAux z) m)
hw : ∀ (x : A) (y : B), ↑(↑moduleAux (x ⊗ₜ[R] y * w)) m = ↑(↑moduleAux (x ⊗ₜ[R] y)) (↑(↑moduleAux w) m)
a : A
b : B
⊢ ↑(↑moduleAux (a ⊗ₜ[R] b * (z + w))) m = a • b • ↑(↑moduleAux (z + w)) m
[PROOFSTEP]
rw [mul_add]
  -- simp only doesn't work
[GOAL]
case refine_2.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
z w : A ⊗[R] B
hz : ∀ (x : A) (y : B), ↑(↑moduleAux (x ⊗ₜ[R] y * z)) m = ↑(↑moduleAux (x ⊗ₜ[R] y)) (↑(↑moduleAux z) m)
hw : ∀ (x : A) (y : B), ↑(↑moduleAux (x ⊗ₜ[R] y * w)) m = ↑(↑moduleAux (x ⊗ₜ[R] y)) (↑(↑moduleAux w) m)
a : A
b : B
⊢ ↑(↑moduleAux (a ⊗ₜ[R] b * z + a ⊗ₜ[R] b * w)) m = a • b • ↑(↑moduleAux (z + w)) m
[PROOFSTEP]
simp only [LinearMap.map_add, LinearMap.add_apply, moduleAux_apply, hz, hw, smul_add]
[GOAL]
case refine_3.refine_1
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x y : A ⊗[R] B), (x * 0) • m = x • 0 • m → (y * 0) • m = y • 0 • m → ((x + y) * 0) • m = (x + y) • 0 • m
[PROOFSTEP]
intro z w _ _
[GOAL]
case refine_3.refine_1
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
z w : A ⊗[R] B
a✝¹ : (z * 0) • m = z • 0 • m
a✝ : (w * 0) • m = w • 0 • m
⊢ ((z + w) * 0) • m = (z + w) • 0 • m
[PROOFSTEP]
simp only [(· • ·), mul_zero, map_zero, LinearMap.zero_apply]
[GOAL]
case refine_3.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x : A) (y : B) (x_1 y_1 : A ⊗[R] B),
    (x_1 * x ⊗ₜ[R] y) • m = x_1 • x ⊗ₜ[R] y • m →
      (y_1 * x ⊗ₜ[R] y) • m = y_1 • x ⊗ₜ[R] y • m → ((x_1 + y_1) * x ⊗ₜ[R] y) • m = (x_1 + y_1) • x ⊗ₜ[R] y • m
[PROOFSTEP]
intro a b z w hz hw
[GOAL]
case refine_3.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a : A
b : B
z w : A ⊗[R] B
hz : (z * a ⊗ₜ[R] b) • m = z • a ⊗ₜ[R] b • m
hw : (w * a ⊗ₜ[R] b) • m = w • a ⊗ₜ[R] b • m
⊢ ((z + w) * a ⊗ₜ[R] b) • m = (z + w) • a ⊗ₜ[R] b • m
[PROOFSTEP]
simp only [(· • ·)] at hz hw
[GOAL]
case refine_3.refine_2
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
a : A
b : B
z w : A ⊗[R] B
hz : ↑(↑moduleAux (z * a ⊗ₜ[R] b)) m = ↑(↑moduleAux z) (↑(↑moduleAux (a ⊗ₜ[R] b)) m)
hw : ↑(↑moduleAux (w * a ⊗ₜ[R] b)) m = ↑(↑moduleAux w) (↑(↑moduleAux (a ⊗ₜ[R] b)) m)
⊢ ((z + w) * a ⊗ₜ[R] b) • m = (z + w) • a ⊗ₜ[R] b • m
[PROOFSTEP]
simp only [(· • ·), LinearMap.map_add, add_mul, LinearMap.add_apply, hz, hw]
[GOAL]
case refine_3.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ ∀ (x y : A ⊗[R] B),
    (∀ (x_1 y : A ⊗[R] B),
        (x_1 * x) • m = x_1 • x • m → (y * x) • m = y • x • m → ((x_1 + y) * x) • m = (x_1 + y) • x • m) →
      (∀ (x y_1 : A ⊗[R] B),
          (x * y) • m = x • y • m → (y_1 * y) • m = y_1 • y • m → ((x + y_1) * y) • m = (x + y_1) • y • m) →
        ∀ (x_1 y_1 : A ⊗[R] B),
          (x_1 * (x + y)) • m = x_1 • (x + y) • m →
            (y_1 * (x + y)) • m = y_1 • (x + y) • m → ((x_1 + y_1) * (x + y)) • m = (x_1 + y_1) • (x + y) • m
[PROOFSTEP]
intro u v _ _ z w hz hw
[GOAL]
case refine_3.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
u v : A ⊗[R] B
a✝¹ : ∀ (x y : A ⊗[R] B), (x * u) • m = x • u • m → (y * u) • m = y • u • m → ((x + y) * u) • m = (x + y) • u • m
a✝ : ∀ (x y : A ⊗[R] B), (x * v) • m = x • v • m → (y * v) • m = y • v • m → ((x + y) * v) • m = (x + y) • v • m
z w : A ⊗[R] B
hz : (z * (u + v)) • m = z • (u + v) • m
hw : (w * (u + v)) • m = w • (u + v) • m
⊢ ((z + w) * (u + v)) • m = (z + w) • (u + v) • m
[PROOFSTEP]
simp only [(· • ·)] at hz hw
[GOAL]
case refine_3.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
u v : A ⊗[R] B
a✝¹ : ∀ (x y : A ⊗[R] B), (x * u) • m = x • u • m → (y * u) • m = y • u • m → ((x + y) * u) • m = (x + y) • u • m
a✝ : ∀ (x y : A ⊗[R] B), (x * v) • m = x • v • m → (y * v) • m = y • v • m → ((x + y) * v) • m = (x + y) • v • m
z w : A ⊗[R] B
hz : ↑(↑moduleAux (z * (u + v))) m = ↑(↑moduleAux z) (↑(↑moduleAux (u + v)) m)
hw : ↑(↑moduleAux (w * (u + v))) m = ↑(↑moduleAux w) (↑(↑moduleAux (u + v)) m)
⊢ ((z + w) * (u + v)) • m = (z + w) • (u + v) • m
[PROOFSTEP]
simp only [(· • ·)]
[GOAL]
case refine_3.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
u v : A ⊗[R] B
a✝¹ : ∀ (x y : A ⊗[R] B), (x * u) • m = x • u • m → (y * u) • m = y • u • m → ((x + y) * u) • m = (x + y) • u • m
a✝ : ∀ (x y : A ⊗[R] B), (x * v) • m = x • v • m → (y * v) • m = y • v • m → ((x + y) * v) • m = (x + y) • v • m
z w : A ⊗[R] B
hz : ↑(↑moduleAux (z * (u + v))) m = ↑(↑moduleAux z) (↑(↑moduleAux (u + v)) m)
hw : ↑(↑moduleAux (w * (u + v))) m = ↑(↑moduleAux w) (↑(↑moduleAux (u + v)) m)
⊢ ↑(↑moduleAux ((z + w) * (u + v))) m = ↑(↑moduleAux (z + w)) (↑(↑moduleAux (u + v)) m)
[PROOFSTEP]
rw [add_mul, LinearMap.map_add, LinearMap.add_apply, hz, hw]
[GOAL]
case refine_3.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
u v : A ⊗[R] B
a✝¹ : ∀ (x y : A ⊗[R] B), (x * u) • m = x • u • m → (y * u) • m = y • u • m → ((x + y) * u) • m = (x + y) • u • m
a✝ : ∀ (x y : A ⊗[R] B), (x * v) • m = x • v • m → (y * v) • m = y • v • m → ((x + y) * v) • m = (x + y) • v • m
z w : A ⊗[R] B
hz : ↑(↑moduleAux (z * (u + v))) m = ↑(↑moduleAux z) (↑(↑moduleAux (u + v)) m)
hw : ↑(↑moduleAux (w * (u + v))) m = ↑(↑moduleAux w) (↑(↑moduleAux (u + v)) m)
⊢ ↑(↑moduleAux z) (↑(↑moduleAux (u + v)) m) + ↑(↑moduleAux w) (↑(↑moduleAux (u + v)) m) =
    ↑(↑moduleAux (z + w)) (↑(↑moduleAux (u + v)) m)
[PROOFSTEP]
simp only [LinearMap.map_add, LinearMap.add_apply]
[GOAL]
case refine_3.refine_3
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
u v : A ⊗[R] B
a✝¹ : ∀ (x y : A ⊗[R] B), (x * u) • m = x • u • m → (y * u) • m = y • u • m → ((x + y) * u) • m = (x + y) • u • m
a✝ : ∀ (x y : A ⊗[R] B), (x * v) • m = x • v • m → (y * v) • m = y • v • m → ((x + y) * v) • m = (x + y) • v • m
z w : A ⊗[R] B
hz : ↑(↑moduleAux (z * (u + v))) m = ↑(↑moduleAux z) (↑(↑moduleAux (u + v)) m)
hw : ↑(↑moduleAux (w * (u + v))) m = ↑(↑moduleAux w) (↑(↑moduleAux (u + v)) m)
⊢ ↑(↑moduleAux z) (↑(↑moduleAux u) m) + ↑(↑moduleAux z) (↑(↑moduleAux v) m) +
      (↑(↑moduleAux w) (↑(↑moduleAux u) m) + ↑(↑moduleAux w) (↑(↑moduleAux v) m)) =
    ↑(↑moduleAux z) (↑(↑moduleAux u) m) + ↑(↑moduleAux w) (↑(↑moduleAux u) m) +
      (↑(↑moduleAux z) (↑(↑moduleAux v) m) + ↑(↑moduleAux w) (↑(↑moduleAux v) m))
[PROOFSTEP]
rw [add_add_add_comm]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x : A ⊗[R] B
⊢ x • 0 = 0
[PROOFSTEP]
simp only [(· • ·), map_zero]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x : A ⊗[R] B
m₁ m₂ : M
⊢ x • (m₁ + m₂) = x • m₁ + x • m₂
[PROOFSTEP]
simp only [(· • ·), map_add]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
x y : A ⊗[R] B
m : M
⊢ (x + y) • m = x • m + y • m
[PROOFSTEP]
simp only [(· • ·), map_add, LinearMap.add_apply]
[GOAL]
R : Type u_1
A : Type u_2
B : Type u_3
M : Type u_4
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Module A M
inst✝⁵ : Module B M
inst✝⁴ : Algebra R A
inst✝³ : Algebra R B
inst✝² : IsScalarTower R A M
inst✝¹ : IsScalarTower R B M
inst✝ : SMulCommClass A B M
m : M
⊢ 0 • m = 0
[PROOFSTEP]
simp only [(· • ·), map_zero, LinearMap.zero_apply]