Theorem: TensorProduct.add_left_neg
File: Mathlib/LinearAlgebra/TensorProduct.lean

tactic: rw [add_zero]
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x : M ⊗[R] N
⊢ -0 + 0 = 0

tactic: apply (Neg.aux R).map_zero
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x : M ⊗[R] N
⊢ -0 = 0

tactic: convert (add_tmul (R := R) (-x) x y).symm
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ : M ⊗[R] N
x : M
y : N
⊢ -x ⊗ₜ[R] y + x ⊗ₜ[R] y = 0

tactic: rw [add_left_neg, zero_tmul]
state_before: case h.e'_3
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ : M ⊗[R] N
x : M
y : N
⊢ 0 = (-x + x) ⊗ₜ[R] y

tactic: suffices : -x + x + (-y + y) = 0
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
⊢ -(x + y) + (x + y) = 0

tactic: rw [hx, hy, add_zero]
state_before: case this
R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
⊢ -x + x + (-y + y) = 0

tactic: rw [← this]
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ -(x + y) + (x + y) = 0

tactic: unfold Neg.neg neg
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ -(x + y) + (x + y) = -x + x + (-y + y)

tactic: simp only
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ { neg := ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) }.1
        (x + y) +
      (x + y) =
    { neg := ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) }.1
          x +
        x +
      ({
              neg :=
                ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R)
                    (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) }.1
          y +
        y)

tactic: rw [AddMonoidHom.map_add]
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) (x + y) +
      (x + y) =
    ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x + x +
      (↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y + y)

tactic: abel
state_before: R : Type u_1
inst✝¹⁰ : CommSemiring R
M : Type u_2
N : Type u_3
P : Type ?u.1367541
Q : Type ?u.1367544
S : Type ?u.1367547
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup N
inst✝⁷ : AddCommGroup P
inst✝⁶ : AddCommGroup Q
inst✝⁵ : AddCommGroup S
inst✝⁴ : Module R M
inst✝³ : Module R N
inst✝² : Module R P
inst✝¹ : Module R Q
inst✝ : Module R S
x✝ x y : M ⊗[R] N
hx : -x + x = 0
hy : -y + y = 0
this : -x + x + (-y + y) = 0
⊢ ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x +
        ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y +
      (x + y) =
    ↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) x + x +
      (↑(AddCon.lift (addConGen (Eqv R M N)) (Neg.aux R) (_ : addConGen (Eqv R M N) ≤ AddCon.ker (Neg.aux R))) y + y)