Theorem: MultilinearMap.domCoprod_apply
File: Mathlib/LinearAlgebra/Multilinear/TensorProduct.lean

Proof steps:
state_before: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
p q : N
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (p + q)) =
    (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p) +
      (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i q)
state_after: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
p q : N
this : DecidableEq ι₁ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (p + q)) =
    (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p) +
      (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i q)
tactic: letI := (@Sum.inl_injective ι₁ ι₂).decidableEq
state_before: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
p q : N
this : DecidableEq ι₁ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (p + q)) =
    (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p) +
      (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i q)
state_after: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
p q : N
this✝ : DecidableEq ι₁ := ⋯.decidableEq
this : DecidableEq ι₂ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (p + q)) =
    (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p) +
      (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i q)
tactic: letI := (@Sum.inr_injective ι₁ ι₂).decidableEq
state_before: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
p q : N
this✝ : DecidableEq ι₁ := ⋯.decidableEq
this : DecidableEq ι₂ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (p + q)) =
    (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p) +
      (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i q)
state_after: no goals
tactic: cases i <;> simp [TensorProduct.add_tmul, TensorProduct.tmul_add]
state_before: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
c : R
p : N
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (c • p)) =
    c • (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p)
state_after: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
c : R
p : N
this : DecidableEq ι₁ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (c • p)) =
    c • (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p)
tactic: letI := (@Sum.inl_injective ι₁ ι₂).decidableEq
state_before: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
c : R
p : N
this : DecidableEq ι₁ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (c • p)) =
    c • (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p)
state_after: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
c : R
p : N
this✝ : DecidableEq ι₁ := ⋯.decidableEq
this : DecidableEq ι₂ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (c • p)) =
    c • (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p)
tactic: letI := (@Sum.inr_injective ι₁ ι₂).decidableEq
state_before: R : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
ι₃ : Type u_4
ι₄ : Type u_5
inst✝⁷ : CommSemiring R
N₁ : Type u_6
inst✝⁶ : AddCommMonoid N₁
inst✝⁵ : Module R N₁
N₂ : Type u_7
inst✝⁴ : AddCommMonoid N₂
inst✝³ : Module R N₂
N : Type u_8
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
a : MultilinearMap R (fun x => N) N₁
b : MultilinearMap R (fun x => N) N₂
inst✝ : DecidableEq (ι₁ ⊕ ι₂)
x✝ : ι₁ ⊕ ι₂ → N
i : ι₁ ⊕ ι₂
c : R
p : N
this✝ : DecidableEq ι₁ := ⋯.decidableEq
this : DecidableEq ι₂ := ⋯.decidableEq
⊢ (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i (c • p)) =
    c • (fun v => (a fun i => v (Sum.inl i)) ⊗ₜ[R] b fun i => v (Sum.inr i)) (Function.update x✝ i p)
state_after: no goals
tactic: cases i <;> simp [TensorProduct.smul_tmul', TensorProduct.tmul_smul]