[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : AlternatingMap R M N ι
g✝ g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
f g : AlternatingMap R M N ι
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g
[PROOFSTEP]
rcases f with ⟨⟨_, _, _⟩, _⟩
[GOAL]
case mk.mk
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g✝ g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
g : AlternatingMap R M N ι
toFun✝ : (ι → M) → N
map_add'✝ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
    toFun✝ (update m i (x + y)) = toFun✝ (update m i x) + toFun✝ (update m i y)
map_smul'✝ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M), toFun✝ (update m i (c • x)) = c • toFun✝ (update m i x)
map_eq_zero_of_eq'✝ :
  ∀ (v : ι → M) (i j : ι),
    v i = v j → i ≠ j → MultilinearMap.toFun { toFun := toFun✝, map_add' := map_add'✝, map_smul' := map_smul'✝ } v = 0
h :
  (fun f => f.toFun)
      { toMultilinearMap := { toFun := toFun✝, map_add' := map_add'✝, map_smul' := map_smul'✝ },
        map_eq_zero_of_eq' := map_eq_zero_of_eq'✝ } =
    (fun f => f.toFun) g
⊢ { toMultilinearMap := { toFun := toFun✝, map_add' := map_add'✝, map_smul' := map_smul'✝ },
      map_eq_zero_of_eq' := map_eq_zero_of_eq'✝ } =
    g
[PROOFSTEP]
rcases g with ⟨⟨_, _, _⟩, _⟩
[GOAL]
case mk.mk.mk.mk
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
toFun✝¹ : (ι → M) → N
map_add'✝¹ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
    toFun✝¹ (update m i (x + y)) = toFun✝¹ (update m i x) + toFun✝¹ (update m i y)
map_smul'✝¹ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
    toFun✝¹ (update m i (c • x)) = c • toFun✝¹ (update m i x)
map_eq_zero_of_eq'✝¹ :
  ∀ (v : ι → M) (i j : ι),
    v i = v j →
      i ≠ j → MultilinearMap.toFun { toFun := toFun✝¹, map_add' := map_add'✝¹, map_smul' := map_smul'✝¹ } v = 0
toFun✝ : (ι → M) → N
map_add'✝ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
    toFun✝ (update m i (x + y)) = toFun✝ (update m i x) + toFun✝ (update m i y)
map_smul'✝ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M), toFun✝ (update m i (c • x)) = c • toFun✝ (update m i x)
map_eq_zero_of_eq'✝ :
  ∀ (v : ι → M) (i j : ι),
    v i = v j → i ≠ j → MultilinearMap.toFun { toFun := toFun✝, map_add' := map_add'✝, map_smul' := map_smul'✝ } v = 0
h :
  (fun f => f.toFun)
      { toMultilinearMap := { toFun := toFun✝¹, map_add' := map_add'✝¹, map_smul' := map_smul'✝¹ },
        map_eq_zero_of_eq' := map_eq_zero_of_eq'✝¹ } =
    (fun f => f.toFun)
      { toMultilinearMap := { toFun := toFun✝, map_add' := map_add'✝, map_smul' := map_smul'✝ },
        map_eq_zero_of_eq' := map_eq_zero_of_eq'✝ }
⊢ { toMultilinearMap := { toFun := toFun✝¹, map_add' := map_add'✝¹, map_smul' := map_smul'✝¹ },
      map_eq_zero_of_eq' := map_eq_zero_of_eq'✝¹ } =
    { toMultilinearMap := { toFun := toFun✝, map_add' := map_add'✝, map_smul' := map_smul'✝ },
      map_eq_zero_of_eq' := map_eq_zero_of_eq'✝ }
[PROOFSTEP]
congr
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
f : (ι → M) → N
h₁ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M), f (update m i (x + y)) = f (update m i x) + f (update m i y)
h₂ : ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M), f (update m i (c • x)) = c • f (update m i x)
h₃ :
  ∀ (v : ι → M) (i j : ι),
    v i = v j →
      i ≠ j →
        MultilinearMap.toFun
            { toFun := f,
              map_add' :=
                (_ :
                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                    f (update m i (x + y)) = f (update m i x) + f (update m i y)),
              map_smul' :=
                (_ :
                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                    f (update m i (c • x)) = c • f (update m i x)) }
            v =
          0
⊢ ↑{
        toMultilinearMap :=
          { toFun := f,
            map_add' :=
              (_ :
                ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                  f (update m i (x + y)) = f (update m i x) + f (update m i y)),
            map_smul' :=
              (_ :
                ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                  f (update m i (c • x)) = c • f (update m i x)) },
        map_eq_zero_of_eq' := h₃ } =
    { toFun := f, map_add' := h₁, map_smul' := h₂ }
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
v : ι → M
hv : ¬Injective v
⊢ ↑f v = 0
[PROOFSTEP]
rw [Function.Injective] at hv 
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
v : ι → M
hv : ¬∀ ⦃a₁ a₂ : ι⦄, v a₁ = v a₂ → a₁ = a₂
⊢ ↑f v = 0
[PROOFSTEP]
push_neg at hv 
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
v : ι → M
hv : Exists fun ⦃a₁⦄ => Exists fun ⦃a₂⦄ => v a₁ = v a₂ ∧ a₁ ≠ a₂
⊢ ↑f v = 0
[PROOFSTEP]
rcases hv with ⟨i₁, i₂, heq, hne⟩
[GOAL]
case intro.intro.intro
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
v : ι → M
i₁ i₂ : ι
heq : v i₁ = v i₂
hne : i₁ ≠ i₂
⊢ ↑f v = 0
[PROOFSTEP]
exact f.map_eq_zero_of_eq v heq hne
[GOAL]
R : Type u_1
inst✝¹³ : Semiring R
M : Type u_2
inst✝¹² : AddCommMonoid M
inst✝¹¹ : Module R M
N : Type u_3
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : Module R N
P : Type u_4
inst✝⁸ : AddCommMonoid P
inst✝⁷ : Module R P
M' : Type u_5
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
N' : Type u_6
inst✝⁴ : AddCommGroup N'
inst✝³ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
S : Type u_10
inst✝² : Monoid S
inst✝¹ : DistribMulAction S N
inst✝ : SMulCommClass R S N
c : S
f : AlternatingMap R M N ι
src✝ : MultilinearMap R (fun x => M) N := c • ↑f
v : ι → M
i j : ι
h : v i = v j
hij : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
              MultilinearMap.toFun src✝ (update m i (x + y)) =
                MultilinearMap.toFun src✝ (update m i x) + MultilinearMap.toFun src✝ (update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
              MultilinearMap.toFun src✝ (update m i (c • x)) = c • MultilinearMap.toFun src✝ (update m i x)) }
      v =
    0
[PROOFSTEP]
simp [f.map_eq_zero_of_eq v h hij]
[GOAL]
R✝ : Type u_1
inst✝¹⁵ : Semiring R✝
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R✝ M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R✝ N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R✝ P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R✝ M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R✝ N'
ι✝ : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : AlternatingMap R✝ M N ι✝
g g₂ : AlternatingMap R✝ M N' ι✝
g' : AlternatingMap R✝ M' N' ι✝
v✝ : ι✝ → M
v' : ι✝ → M'
R : Type u_10
M₁ : Type u_11
M₂ : Type u_12
ι : Type u_13
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
f : AlternatingMap R M₁ R ι
z : M₂
src✝ : MultilinearMap R (fun x => M₁) M₂ := MultilinearMap.smulRight (↑f) z
v : ι → M₁
i j : ι
h : v i = v j
hne : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M₁) (i : ι) (x y : M₁),
              MultilinearMap.toFun src✝ (update m i (x + y)) =
                MultilinearMap.toFun src✝ (update m i x) + MultilinearMap.toFun src✝ (update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M₁) (i : ι) (c : R) (x : M₁),
              MultilinearMap.toFun src✝ (update m i (c • x)) = c • MultilinearMap.toFun src✝ (update m i x)) }
      v =
    0
[PROOFSTEP]
simp [f.map_eq_zero_of_eq v h hne]
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
a b : AlternatingMap R M N ι
src✝ : MultilinearMap R (fun x => M) N := ↑a + ↑b
v : ι → M
i j : ι
h : v i = v j
hij : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
              MultilinearMap.toFun src✝ (update m i (x + y)) =
                MultilinearMap.toFun src✝ (update m i x) + MultilinearMap.toFun src✝ (update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
              MultilinearMap.toFun src✝ (update m i (c • x)) = c • MultilinearMap.toFun src✝ (update m i x)) }
      v =
    0
[PROOFSTEP]
simp [a.map_eq_zero_of_eq v h hij, b.map_eq_zero_of_eq v h hij]
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
src✝ : MultilinearMap R (fun x => M) N := 0
v : ι → M
i j : ι
x✝¹ : v i = v j
x✝ : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
              MultilinearMap.toFun src✝ (update m i (x + y)) =
                MultilinearMap.toFun src✝ (update m i x) + MultilinearMap.toFun src✝ (update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
              MultilinearMap.toFun src✝ (update m i (c • x)) = c • MultilinearMap.toFun src✝ (update m i x)) }
      v =
    0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
f : AlternatingMap R M N' ι
src✝ : MultilinearMap R (fun x => M) N' := -↑f
v : ι → M
i j : ι
h : v i = v j
hij : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
              MultilinearMap.toFun src✝ (update m i (x + y)) =
                MultilinearMap.toFun src✝ (update m i x) + MultilinearMap.toFun src✝ (update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
              MultilinearMap.toFun src✝ (update m i (c • x)) = c • MultilinearMap.toFun src✝ (update m i x)) }
      v =
    0
[PROOFSTEP]
simp [f.map_eq_zero_of_eq v h hij]
[GOAL]
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : AlternatingMap R M N ι
g✝ g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
f g : AlternatingMap R M N' ι
src✝ : MultilinearMap R (fun x => M) N' := ↑f - ↑g
v : ι → M
i j : ι
h : v i = v j
hij : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
              MultilinearMap.toFun src✝ (update m i (x + y)) =
                MultilinearMap.toFun src✝ (update m i x) + MultilinearMap.toFun src✝ (update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
              MultilinearMap.toFun src✝ (update m i (c • x)) = c • MultilinearMap.toFun src✝ (update m i x)) }
      v =
    0
[PROOFSTEP]
simp [f.map_eq_zero_of_eq v h hij, g.map_eq_zero_of_eq v h hij]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N₂ : Type u_10
inst✝¹ : AddCommMonoid N₂
inst✝ : Module R N₂
g : N →ₗ[R] N₂
f : AlternatingMap R M N ι
src✝ : MultilinearMap R (fun x => M) N₂ := compMultilinearMap g ↑f
v : ι → M
i j : ι
h : v i = v j
hij : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
              MultilinearMap.toFun src✝ (Function.update m i (x + y)) =
                MultilinearMap.toFun src✝ (Function.update m i x) + MultilinearMap.toFun src✝ (Function.update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
              MultilinearMap.toFun src✝ (Function.update m i (c • x)) =
                c • MultilinearMap.toFun src✝ (Function.update m i x)) }
      v =
    0
[PROOFSTEP]
simp [f.map_eq_zero_of_eq v h hij]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N₂ : Type u_10
inst✝¹ : AddCommMonoid N₂
inst✝ : Module R N₂
g : N →ₗ[R] N₂
⊢ (fun f =>
        let src := compMultilinearMap g ↑f;
        {
          toMultilinearMap :=
            { toFun := src.toFun,
              map_add' :=
                (_ :
                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                    MultilinearMap.toFun src (Function.update m i (x + y)) =
                      MultilinearMap.toFun src (Function.update m i x) +
                        MultilinearMap.toFun src (Function.update m i y)),
              map_smul' :=
                (_ :
                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                    MultilinearMap.toFun src (Function.update m i (c • x)) =
                      c • MultilinearMap.toFun src (Function.update m i x)) },
          map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
      0 =
    0
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N₂ : Type u_10
inst✝¹ : AddCommMonoid N₂
inst✝ : Module R N₂
g : N →ₗ[R] N₂
x✝ : ι → M
⊢ ↑((fun f =>
            let src := compMultilinearMap g ↑f;
            {
              toMultilinearMap :=
                { toFun := src.toFun,
                  map_add' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                        MultilinearMap.toFun src (Function.update m i (x + y)) =
                          MultilinearMap.toFun src (Function.update m i x) +
                            MultilinearMap.toFun src (Function.update m i y)),
                  map_smul' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                        MultilinearMap.toFun src (Function.update m i (c • x)) =
                          c • MultilinearMap.toFun src (Function.update m i x)) },
              map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
          0)
      x✝ =
    ↑0 x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N₂ : Type u_10
inst✝¹ : AddCommMonoid N₂
inst✝ : Module R N₂
g : N →ₗ[R] N₂
a b : AlternatingMap R M N ι
⊢ ZeroHom.toFun
      {
        toFun := fun f =>
          let src := compMultilinearMap g ↑f;
          {
            toMultilinearMap :=
              { toFun := src.toFun,
                map_add' :=
                  (_ :
                    ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                      MultilinearMap.toFun src (Function.update m i (x + y)) =
                        MultilinearMap.toFun src (Function.update m i x) +
                          MultilinearMap.toFun src (Function.update m i y)),
                map_smul' :=
                  (_ :
                    ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                      MultilinearMap.toFun src (Function.update m i (c • x)) =
                        c • MultilinearMap.toFun src (Function.update m i x)) },
            map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) },
        map_zero' :=
          (_ :
            (fun f =>
                  let src := compMultilinearMap g ↑f;
                  {
                    toMultilinearMap :=
                      { toFun := src.toFun,
                        map_add' :=
                          (_ :
                            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                              MultilinearMap.toFun src (Function.update m i (x + y)) =
                                MultilinearMap.toFun src (Function.update m i x) +
                                  MultilinearMap.toFun src (Function.update m i y)),
                        map_smul' :=
                          (_ :
                            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                              MultilinearMap.toFun src (Function.update m i (c • x)) =
                                c • MultilinearMap.toFun src (Function.update m i x)) },
                    map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
                0 =
              0) }
      (a + b) =
    ZeroHom.toFun
        {
          toFun := fun f =>
            let src := compMultilinearMap g ↑f;
            {
              toMultilinearMap :=
                { toFun := src.toFun,
                  map_add' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                        MultilinearMap.toFun src (Function.update m i (x + y)) =
                          MultilinearMap.toFun src (Function.update m i x) +
                            MultilinearMap.toFun src (Function.update m i y)),
                  map_smul' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                        MultilinearMap.toFun src (Function.update m i (c • x)) =
                          c • MultilinearMap.toFun src (Function.update m i x)) },
              map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) },
          map_zero' :=
            (_ :
              (fun f =>
                    let src := compMultilinearMap g ↑f;
                    {
                      toMultilinearMap :=
                        { toFun := src.toFun,
                          map_add' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                MultilinearMap.toFun src (Function.update m i (x + y)) =
                                  MultilinearMap.toFun src (Function.update m i x) +
                                    MultilinearMap.toFun src (Function.update m i y)),
                          map_smul' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                MultilinearMap.toFun src (Function.update m i (c • x)) =
                                  c • MultilinearMap.toFun src (Function.update m i x)) },
                      map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
                  0 =
                0) }
        a +
      ZeroHom.toFun
        {
          toFun := fun f =>
            let src := compMultilinearMap g ↑f;
            {
              toMultilinearMap :=
                { toFun := src.toFun,
                  map_add' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                        MultilinearMap.toFun src (Function.update m i (x + y)) =
                          MultilinearMap.toFun src (Function.update m i x) +
                            MultilinearMap.toFun src (Function.update m i y)),
                  map_smul' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                        MultilinearMap.toFun src (Function.update m i (c • x)) =
                          c • MultilinearMap.toFun src (Function.update m i x)) },
              map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) },
          map_zero' :=
            (_ :
              (fun f =>
                    let src := compMultilinearMap g ↑f;
                    {
                      toMultilinearMap :=
                        { toFun := src.toFun,
                          map_add' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                MultilinearMap.toFun src (Function.update m i (x + y)) =
                                  MultilinearMap.toFun src (Function.update m i x) +
                                    MultilinearMap.toFun src (Function.update m i y)),
                          map_smul' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                MultilinearMap.toFun src (Function.update m i (c • x)) =
                                  c • MultilinearMap.toFun src (Function.update m i x)) },
                      map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
                  0 =
                0) }
        b
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N₂ : Type u_10
inst✝¹ : AddCommMonoid N₂
inst✝ : Module R N₂
g : N →ₗ[R] N₂
a b : AlternatingMap R M N ι
x✝ : ι → M
⊢ ↑(ZeroHom.toFun
          {
            toFun := fun f =>
              let src := compMultilinearMap g ↑f;
              {
                toMultilinearMap :=
                  { toFun := src.toFun,
                    map_add' :=
                      (_ :
                        ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                          MultilinearMap.toFun src (Function.update m i (x + y)) =
                            MultilinearMap.toFun src (Function.update m i x) +
                              MultilinearMap.toFun src (Function.update m i y)),
                    map_smul' :=
                      (_ :
                        ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                          MultilinearMap.toFun src (Function.update m i (c • x)) =
                            c • MultilinearMap.toFun src (Function.update m i x)) },
                map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) },
            map_zero' :=
              (_ :
                (fun f =>
                      let src := compMultilinearMap g ↑f;
                      {
                        toMultilinearMap :=
                          { toFun := src.toFun,
                            map_add' :=
                              (_ :
                                ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                  MultilinearMap.toFun src (Function.update m i (x + y)) =
                                    MultilinearMap.toFun src (Function.update m i x) +
                                      MultilinearMap.toFun src (Function.update m i y)),
                            map_smul' :=
                              (_ :
                                ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                  MultilinearMap.toFun src (Function.update m i (c • x)) =
                                    c • MultilinearMap.toFun src (Function.update m i x)) },
                        map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
                    0 =
                  0) }
          (a + b))
      x✝ =
    ↑(ZeroHom.toFun
            {
              toFun := fun f =>
                let src := compMultilinearMap g ↑f;
                {
                  toMultilinearMap :=
                    { toFun := src.toFun,
                      map_add' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                            MultilinearMap.toFun src (Function.update m i (x + y)) =
                              MultilinearMap.toFun src (Function.update m i x) +
                                MultilinearMap.toFun src (Function.update m i y)),
                      map_smul' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                            MultilinearMap.toFun src (Function.update m i (c • x)) =
                              c • MultilinearMap.toFun src (Function.update m i x)) },
                  map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) },
              map_zero' :=
                (_ :
                  (fun f =>
                        let src := compMultilinearMap g ↑f;
                        {
                          toMultilinearMap :=
                            { toFun := src.toFun,
                              map_add' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                    MultilinearMap.toFun src (Function.update m i (x + y)) =
                                      MultilinearMap.toFun src (Function.update m i x) +
                                        MultilinearMap.toFun src (Function.update m i y)),
                              map_smul' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                    MultilinearMap.toFun src (Function.update m i (c • x)) =
                                      c • MultilinearMap.toFun src (Function.update m i x)) },
                          map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
                      0 =
                    0) }
            a +
          ZeroHom.toFun
            {
              toFun := fun f =>
                let src := compMultilinearMap g ↑f;
                {
                  toMultilinearMap :=
                    { toFun := src.toFun,
                      map_add' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                            MultilinearMap.toFun src (Function.update m i (x + y)) =
                              MultilinearMap.toFun src (Function.update m i x) +
                                MultilinearMap.toFun src (Function.update m i y)),
                      map_smul' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                            MultilinearMap.toFun src (Function.update m i (c • x)) =
                              c • MultilinearMap.toFun src (Function.update m i x)) },
                  map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) },
              map_zero' :=
                (_ :
                  (fun f =>
                        let src := compMultilinearMap g ↑f;
                        {
                          toMultilinearMap :=
                            { toFun := src.toFun,
                              map_add' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                    MultilinearMap.toFun src (Function.update m i (x + y)) =
                                      MultilinearMap.toFun src (Function.update m i x) +
                                        MultilinearMap.toFun src (Function.update m i y)),
                              map_smul' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                    MultilinearMap.toFun src (Function.update m i (c • x)) =
                                      c • MultilinearMap.toFun src (Function.update m i x)) },
                          map_eq_zero_of_eq' := (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑g (↑f v) = 0) })
                      0 =
                    0) }
            b)
      x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
g : M₂ →ₗ[R] M
⊢ compLinearMap 0 g = 0
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
g : M₂ →ₗ[R] M
x✝ : ι → M₂
⊢ ↑(compLinearMap 0 g) x✝ = ↑0 x✝
[PROOFSTEP]
simp only [compLinearMap_apply, zero_apply]
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f₁ f₂ : AlternatingMap R M N ι
g : M₂ →ₗ[R] M
⊢ compLinearMap (f₁ + f₂) g = compLinearMap f₁ g + compLinearMap f₂ g
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f₁ f₂ : AlternatingMap R M N ι
g : M₂ →ₗ[R] M
x✝ : ι → M₂
⊢ ↑(compLinearMap (f₁ + f₂) g) x✝ = ↑(compLinearMap f₁ g + compLinearMap f₂ g) x✝
[PROOFSTEP]
simp only [compLinearMap_apply, add_apply]
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
inst✝ : Nonempty ι
f : AlternatingMap R M N ι
⊢ compLinearMap f 0 = 0
[PROOFSTEP]
ext
  -- Porting note: Was `simp_rw [.., ← Pi.zero_def, map_zero, zero_apply]`.
[GOAL]
case H
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
inst✝ : Nonempty ι
f : AlternatingMap R M N ι
x✝ : ι → M₂
⊢ ↑(compLinearMap f 0) x✝ = ↑0 x✝
[PROOFSTEP]
simp_rw [compLinearMap_apply, LinearMap.zero_apply, ← Pi.zero_def, zero_apply]
[GOAL]
case H
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
inst✝ : Nonempty ι
f : AlternatingMap R M N ι
x✝ : ι → M₂
⊢ ↑f 0 = 0
[PROOFSTEP]
exact map_zero f
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f : M₂ →ₗ[R] M
hf : Function.Surjective ↑f
g₁ g₂ : AlternatingMap R M N ι
h : (fun g => compLinearMap g f) g₁ = (fun g => compLinearMap g f) g₂
x : ι → M
⊢ ↑g₁ x = ↑g₂ x
[PROOFSTEP]
simpa [Function.surjInv_eq hf] using ext_iff.mp h (Function.surjInv hf ∘ x)
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ update v i (v j) i = update v i (v j) j
[PROOFSTEP]
rw [Function.update_same, Function.update_noteq hij.symm]
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
m : M
⊢ update (update v i m) j m i = update (update v i m) j m j
[PROOFSTEP]
rw [Function.update_same, Function.update_noteq hij, Function.update_same]
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ ↑f (v ∘ ↑(Equiv.swap i j)) + ↑f v = 0
[PROOFSTEP]
rw [Equiv.comp_swap_eq_update]
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ ↑f (update (update v j (v i)) i (v j)) + ↑f v = 0
[PROOFSTEP]
convert f.map_update_update v hij (v i + v j)
[GOAL]
case h.e'_2
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ ↑f (update (update v j (v i)) i (v j)) + ↑f v = ↑f (update (update v i (v i + v j)) j (v i + v j))
[PROOFSTEP]
simp [f.map_update_self _ hij, f.map_update_self _ hij.symm, Function.update_comm hij (v i + v j) (v _) v,
  Function.update_comm hij.symm (v i) (v i) v]
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ ↑f v + ↑f (v ∘ ↑(Equiv.swap i j)) = 0
[PROOFSTEP]
rw [add_comm]
[GOAL]
R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ ↑f (v ∘ ↑(Equiv.swap i j)) + ↑f v = 0
[PROOFSTEP]
exact f.map_swap_add v hij
[GOAL]
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
M₃ : Type u_11
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
v : ι → M
σ : Equiv.Perm ι
⊢ ↑g (v ∘ ↑σ) = ↑Equiv.Perm.sign σ • ↑g v
[PROOFSTEP]
induction' σ using Equiv.Perm.swap_induction_on' with s x y hxy hI
[GOAL]
case a
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
M₃ : Type u_11
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
v : ι → M
⊢ ↑g (v ∘ ↑1) = ↑Equiv.Perm.sign 1 • ↑g v
[PROOFSTEP]
simp
[GOAL]
case a
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
M₃ : Type u_11
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
v : ι → M
s : Equiv.Perm ι
x y : ι
hxy : x ≠ y
hI : ↑g (v ∘ ↑s) = ↑Equiv.Perm.sign s • ↑g v
⊢ ↑g (v ∘ ↑(s * Equiv.swap x y)) = ↑Equiv.Perm.sign (s * Equiv.swap x y) • ↑g v
[PROOFSTEP]
simpa [← Function.comp.assoc, g.map_swap (v ∘ s) hxy, Equiv.Perm.sign_swap hxy, -Equiv.Perm.sign_swap'] using hI
[GOAL]
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
M₃ : Type u_11
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
σ : Equiv.Perm ι
⊢ ↑g v = ↑Equiv.Perm.sign σ • ↑g (v ∘ ↑σ)
[PROOFSTEP]
rw [g.map_perm, smul_smul]
[GOAL]
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
M₃ : Type u_11
inst✝³ : AddCommMonoid M₃
inst✝² : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
σ : Equiv.Perm ι
⊢ ↑g v = (↑Equiv.Perm.sign σ * ↑Equiv.Perm.sign σ) • ↑g v
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f✝ f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M
v' : ι → M'
σ : ι ≃ ι'
f : AlternatingMap R M N ι
src✝ : MultilinearMap R (fun x => M) N := MultilinearMap.domDomCongr σ ↑f
v : ι' → M
i j : ι'
hv : v i = v j
hij : i ≠ j
⊢ (v ∘ ↑σ) (↑σ.symm i) = (v ∘ ↑σ) (↑σ.symm j)
[PROOFSTEP]
simpa using hv
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f✝ f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
σ : ι ≃ ι'
f : AlternatingMap R M N ι
⊢ domDomCongr σ.symm (domDomCongr σ f) = f
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f✝ f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
σ : ι ≃ ι'
f : AlternatingMap R M N ι
x✝ : ι → M
⊢ ↑(domDomCongr σ.symm (domDomCongr σ f)) x✝ = ↑f x✝
[PROOFSTEP]
simp [Function.comp]
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
σ : ι ≃ ι'
m : AlternatingMap R M N ι'
⊢ domDomCongr σ (domDomCongr σ.symm m) = m
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f f' : AlternatingMap R M N ι
g g₂ : AlternatingMap R M N' ι
g' : AlternatingMap R M' N' ι
v : ι → M
v' : ι → M'
σ : ι ≃ ι'
m : AlternatingMap R M N ι'
x✝ : ι' → M
⊢ ↑(domDomCongr σ (domDomCongr σ.symm m)) x✝ = ↑m x✝
[PROOFSTEP]
simp [Function.comp]
[GOAL]
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h : ¬LinearIndependent K v
⊢ ↑f v = 0
[PROOFSTEP]
obtain ⟨s, g, h, i, hi, hz⟩ := not_linearIndependent_iff.mp h
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
⊢ ↑f v = 0
[PROOFSTEP]
letI := Classical.decEq ι
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
⊢ ↑f v = 0
[PROOFSTEP]
suffices f (update v i (g i • v i)) = 0
  by
  rw [f.map_smul, Function.update_eq_self, smul_eq_zero] at this 
  exact Or.resolve_left this hz
[GOAL]
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this✝ : DecidableEq ι := Classical.decEq ι
this : ↑f (update v i (g i • v i)) = 0
⊢ ↑f v = 0
[PROOFSTEP]
rw [f.map_smul, Function.update_eq_self, smul_eq_zero] at this 
[GOAL]
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this✝ : DecidableEq ι := Classical.decEq ι
this : g i = 0 ∨ ↑f v = 0
⊢ ↑f v = 0
[PROOFSTEP]
exact Or.resolve_left this hz
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
⊢ ↑f (update v i (g i • v i)) = 0
[PROOFSTEP]
rw [← (funext fun x => ite_self (c := i = x) (d := Classical.decEq ι i x) (g x • v x))] at h 
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
h : (Finset.sum s fun x => if i = x then g x • v x else g x • v x) = 0
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
⊢ ↑f (update v i (g i • v i)) = 0
[PROOFSTEP]
rw [Finset.sum_ite, Finset.filter_eq, Finset.filter_ne, if_pos hi, Finset.sum_singleton, add_eq_zero_iff_eq_neg] at h 
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
⊢ ↑f (update v i (g i • v i)) = 0
[PROOFSTEP]
rw [h, f.map_neg, f.map_update_sum, neg_eq_zero]
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
⊢ (Finset.sum (Finset.erase s i) fun a => ↑f (update v i (g a • v a))) = 0
[PROOFSTEP]
apply Finset.sum_eq_zero
[GOAL]
case intro.intro.intro.intro.intro.h
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
⊢ ∀ (x : ι), x ∈ Finset.erase s i → ↑f (update v i (g x • v x)) = 0
[PROOFSTEP]
intro j hj
[GOAL]
case intro.intro.intro.intro.intro.h
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
j : ι
hj : j ∈ Finset.erase s i
⊢ ↑f (update v i (g j • v j)) = 0
[PROOFSTEP]
obtain ⟨hij, _⟩ := Finset.mem_erase.mp hj
[GOAL]
case intro.intro.intro.intro.intro.h.intro
R : Type u_1
inst✝²⁰ : Semiring R
M✝ : Type u_2
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type u_3
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type u_11
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_12
inst✝⁵ : Ring K
M : Type u_13
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_14
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
j : ι
hj : j ∈ Finset.erase s i
hij : j ≠ i
right✝ : j ∈ s
⊢ ↑f (update v i (g j • v j)) = 0
[PROOFSTEP]
rw [f.map_smul, f.map_update_self _ hij.symm, smul_zero]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
m : MultilinearMap R (fun x => M) N'
v : ι → M
i j : ι
i_ne_j : i ≠ j
hv : v i = v j
⊢ ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0
[PROOFSTEP]
rw [sum_apply]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
m : MultilinearMap R (fun x => M) N'
v : ι → M
i j : ι
i_ne_j : i ≠ j
hv : v i = v j
⊢ ∑ a : Perm ι, ↑(↑Perm.sign a • domDomCongr a m) v = 0
[PROOFSTEP]
exact
  Finset.sum_involution
    (fun σ _ => swap i j * σ)
      -- Porting note: `-Equiv.Perm.sign_swap'` is required.
    (fun σ _ => by simp [Perm.sign_swap i_ne_j, apply_swap_eq_self hv, -Equiv.Perm.sign_swap'])
    (fun σ _ _ => (not_congr swap_mul_eq_iff).mpr i_ne_j) (fun σ _ => Finset.mem_univ _) fun σ _ =>
    swap_mul_involutive i j σ
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
m : MultilinearMap R (fun x => M) N'
v : ι → M
i j : ι
i_ne_j : i ≠ j
hv : v i = v j
σ : Perm ι
x✝ : σ ∈ Finset.univ
⊢ ↑(↑Perm.sign σ • domDomCongr σ m) v +
      ↑(↑Perm.sign ((fun σ x => swap i j * σ) σ x✝) • domDomCongr ((fun σ x => swap i j * σ) σ x✝) m) v =
    0
[PROOFSTEP]
simp [Perm.sign_swap i_ne_j, apply_swap_eq_self hv, -Equiv.Perm.sign_swap']
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
⊢ (fun m =>
        let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
        {
          toMultilinearMap :=
            { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
              map_add' :=
                (_ :
                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                    toFun src (Function.update m i (x + y)) =
                      toFun src (Function.update m i x) + toFun src (Function.update m i y)),
              map_smul' :=
                (_ :
                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                    toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
          map_eq_zero_of_eq' :=
            (_ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
      0 =
    0
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
x✝ : ι → M
⊢ ↑((fun m =>
            let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
            {
              toMultilinearMap :=
                { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                  map_add' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                        toFun src (Function.update m i (x + y)) =
                          toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                  map_smul' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                        toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
              map_eq_zero_of_eq' :=
                (_ :
                  ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
          0)
      x✝ =
    ↑0 x✝
[PROOFSTEP]
simp only [mk_coe, AlternatingMap.coe_mk, sum_apply, smul_apply, domDomCongr_apply, zero_apply, smul_zero,
  Finset.sum_const_zero, AlternatingMap.zero_apply]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : MultilinearMap R (fun x => M) N'
⊢ ZeroHom.toFun
      {
        toFun := fun m =>
          let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
          {
            toMultilinearMap :=
              { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                map_add' :=
                  (_ :
                    ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                      toFun src (Function.update m i (x + y)) =
                        toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                map_smul' :=
                  (_ :
                    ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                      toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
            map_eq_zero_of_eq' :=
              (_ :
                ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) },
        map_zero' :=
          (_ :
            (fun m =>
                  let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                  {
                    toMultilinearMap :=
                      { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                        map_add' :=
                          (_ :
                            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                              toFun src (Function.update m i (x + y)) =
                                toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                        map_smul' :=
                          (_ :
                            ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                              toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                    map_eq_zero_of_eq' :=
                      (_ :
                        ∀ (v : ι → M) (i j : ι),
                          v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
                0 =
              0) }
      (a + b) =
    ZeroHom.toFun
        {
          toFun := fun m =>
            let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
            {
              toMultilinearMap :=
                { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                  map_add' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                        toFun src (Function.update m i (x + y)) =
                          toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                  map_smul' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                        toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
              map_eq_zero_of_eq' :=
                (_ :
                  ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) },
          map_zero' :=
            (_ :
              (fun m =>
                    let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                    {
                      toMultilinearMap :=
                        { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                          map_add' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                toFun src (Function.update m i (x + y)) =
                                  toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                          map_smul' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                      map_eq_zero_of_eq' :=
                        (_ :
                          ∀ (v : ι → M) (i j : ι),
                            v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
                  0 =
                0) }
        a +
      ZeroHom.toFun
        {
          toFun := fun m =>
            let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
            {
              toMultilinearMap :=
                { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                  map_add' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                        toFun src (Function.update m i (x + y)) =
                          toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                  map_smul' :=
                    (_ :
                      ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                        toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
              map_eq_zero_of_eq' :=
                (_ :
                  ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) },
          map_zero' :=
            (_ :
              (fun m =>
                    let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                    {
                      toMultilinearMap :=
                        { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                          map_add' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                toFun src (Function.update m i (x + y)) =
                                  toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                          map_smul' :=
                            (_ :
                              ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                      map_eq_zero_of_eq' :=
                        (_ :
                          ∀ (v : ι → M) (i j : ι),
                            v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
                  0 =
                0) }
        b
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : MultilinearMap R (fun x => M) N'
x✝ : ι → M
⊢ ↑(ZeroHom.toFun
          {
            toFun := fun m =>
              let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
              {
                toMultilinearMap :=
                  { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                    map_add' :=
                      (_ :
                        ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                          toFun src (Function.update m i (x + y)) =
                            toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                    map_smul' :=
                      (_ :
                        ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                          toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                map_eq_zero_of_eq' :=
                  (_ :
                    ∀ (v : ι → M) (i j : ι),
                      v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) },
            map_zero' :=
              (_ :
                (fun m =>
                      let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                      {
                        toMultilinearMap :=
                          { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                            map_add' :=
                              (_ :
                                ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                  toFun src (Function.update m i (x + y)) =
                                    toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                            map_smul' :=
                              (_ :
                                ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                  toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                        map_eq_zero_of_eq' :=
                          (_ :
                            ∀ (v : ι → M) (i j : ι),
                              v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
                    0 =
                  0) }
          (a + b))
      x✝ =
    ↑(ZeroHom.toFun
            {
              toFun := fun m =>
                let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                {
                  toMultilinearMap :=
                    { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                      map_add' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                            toFun src (Function.update m i (x + y)) =
                              toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                      map_smul' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                            toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                  map_eq_zero_of_eq' :=
                    (_ :
                      ∀ (v : ι → M) (i j : ι),
                        v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) },
              map_zero' :=
                (_ :
                  (fun m =>
                        let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                        {
                          toMultilinearMap :=
                            { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                              map_add' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                    toFun src (Function.update m i (x + y)) =
                                      toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                              map_smul' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                    toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                          map_eq_zero_of_eq' :=
                            (_ :
                              ∀ (v : ι → M) (i j : ι),
                                v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
                      0 =
                    0) }
            a +
          ZeroHom.toFun
            {
              toFun := fun m =>
                let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                {
                  toMultilinearMap :=
                    { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                      map_add' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                            toFun src (Function.update m i (x + y)) =
                              toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                      map_smul' :=
                        (_ :
                          ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                            toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                  map_eq_zero_of_eq' :=
                    (_ :
                      ∀ (v : ι → M) (i j : ι),
                        v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) },
              map_zero' :=
                (_ :
                  (fun m =>
                        let src := ∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m;
                        {
                          toMultilinearMap :=
                            { toFun := ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m),
                              map_add' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M),
                                    toFun src (Function.update m i (x + y)) =
                                      toFun src (Function.update m i x) + toFun src (Function.update m i y)),
                              map_smul' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M),
                                    toFun src (Function.update m i (c • x)) = c • toFun src (Function.update m i x)) },
                          map_eq_zero_of_eq' :=
                            (_ :
                              ∀ (v : ι → M) (i j : ι),
                                v i = v j → i ≠ j → ↑(∑ σ : Perm ι, ↑Perm.sign σ • domDomCongr σ m) v = 0) })
                      0 =
                    0) }
            b)
      x✝
[PROOFSTEP]
simp only [mk_coe, AlternatingMap.coe_mk, sum_apply, smul_apply, domDomCongr_apply, add_apply, smul_add,
  Finset.sum_add_distrib, AlternatingMap.add_apply]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
m : MultilinearMap R (fun x => M) N'
v : ι → M
⊢ ↑(↑alternatization m) v = ∑ σ : Perm ι, ↑Perm.sign σ • ↑(domDomCongr σ m) v
[PROOFSTEP]
simp only [alternatization_def, smul_apply, sum_apply]
[GOAL]
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
a : AlternatingMap R M N' ι
⊢ ↑MultilinearMap.alternatization ↑a = Nat.factorial (Fintype.card ι) • a
[PROOFSTEP]
apply AlternatingMap.coe_injective
[GOAL]
case a
R : Type u_1
inst✝¹² : Semiring R
M : Type u_2
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : Module R M
N : Type u_3
inst✝⁹ : AddCommMonoid N
inst✝⁸ : Module R N
P : Type u_4
inst✝⁷ : AddCommMonoid P
inst✝⁶ : Module R P
M' : Type u_5
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
N' : Type u_6
inst✝³ : AddCommGroup N'
inst✝² : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
a : AlternatingMap R M N' ι
⊢ ↑(↑MultilinearMap.alternatization ↑a) = ↑(Nat.factorial (Fintype.card ι) • a)
[PROOFSTEP]
simp_rw [MultilinearMap.alternatization_def, ← coe_domDomCongr, domDomCongr_perm, coe_smul, smul_smul,
  Int.units_mul_self, one_smul, Finset.sum_const, Finset.card_univ, Fintype.card_perm, ← coe_multilinearMap, coe_smul]
[GOAL]
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N'₂ : Type u_10
inst✝³ : AddCommGroup N'₂
inst✝² : Module R N'₂
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
g : N' →ₗ[R] N'₂
f : MultilinearMap R (fun x => M) N'
⊢ ↑MultilinearMap.alternatization (compMultilinearMap g f) = ↑(compAlternatingMap g) (↑MultilinearMap.alternatization f)
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
N'₂ : Type u_10
inst✝³ : AddCommGroup N'₂
inst✝² : Module R N'₂
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
g : N' →ₗ[R] N'₂
f : MultilinearMap R (fun x => M) N'
x✝ : ι → M
⊢ ↑(↑MultilinearMap.alternatization (compMultilinearMap g f)) x✝ =
    ↑(↑(compAlternatingMap g) (↑MultilinearMap.alternatization f)) x✝
[PROOFSTEP]
simp [MultilinearMap.alternatization_def]
[GOAL]
R : Type u_1
inst✝²⁰ : Semiring R
M : Type u_2
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
N : Type u_3
inst✝¹⁷ : AddCommMonoid N
inst✝¹⁶ : Module R N
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝⁹ : Fintype ιa
inst✝⁸ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁷ : CommSemiring R'
inst✝⁶ : AddCommGroup N₁
inst✝⁵ : Module R' N₁
inst✝⁴ : AddCommGroup N₂
inst✝³ : Module R' N₂
inst✝² : AddCommMonoid Mᵢ
inst✝¹ : Module R' Mᵢ
α : Type u_16
β : Type u_17
inst✝ : DecidableEq (α ⊕ β)
i j : α ⊕ β
σ : ModSumCongr α β
⊢ SMul.smul (swap i j) (SMul.smul (swap i j) σ) = σ
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
R : Type u_1
inst✝²⁰ : Semiring R
M : Type u_2
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
N : Type u_3
inst✝¹⁷ : AddCommMonoid N
inst✝¹⁶ : Module R N
P : Type u_4
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type u_5
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type u_6
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝⁹ : Fintype ιa
inst✝⁸ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁷ : CommSemiring R'
inst✝⁶ : AddCommGroup N₁
inst✝⁵ : Module R' N₁
inst✝⁴ : AddCommGroup N₂
inst✝³ : Module R' N₂
inst✝² : AddCommMonoid Mᵢ
inst✝¹ : Module R' Mᵢ
α : Type u_16
β : Type u_17
inst✝ : DecidableEq (α ⊕ β)
i j : α ⊕ β
σ✝ : ModSumCongr α β
σ : Perm (α ⊕ β)
⊢ SMul.smul (swap i j) (SMul.smul (swap i j) (Quotient.mk'' σ)) = Quotient.mk'' σ
[PROOFSTEP]
exact _root_.congr_arg Quotient.mk'' (Equiv.swap_mul_involutive i j σ)
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
H : Setoid.r σ₁ σ₂
⊢ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₁ =
    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₂
[PROOFSTEP]
rw [QuotientGroup.leftRel_apply] at H 
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
H : σ₁⁻¹ * σ₂ ∈ MonoidHom.range (Perm.sumCongrHom ιa ιb)
⊢ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₁ =
    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₂
[PROOFSTEP]
obtain ⟨⟨sl, sr⟩, h⟩ := H
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
h : ↑(Perm.sumCongrHom ιa ιb) (sl, sr) = σ₁⁻¹ * σ₂
⊢ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₁ =
    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₂
[PROOFSTEP]
ext v
[GOAL]
case intro.mk.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
h : ↑(Perm.sumCongrHom ιa ιb) (sl, sr) = σ₁⁻¹ * σ₂
v : ιa ⊕ ιb → Mᵢ
⊢ ↑((fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₁) v =
    ↑((fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) σ₂) v
[PROOFSTEP]
simp only [MultilinearMap.domDomCongr_apply, MultilinearMap.domCoprod_apply, coe_multilinearMap,
  MultilinearMap.smul_apply]
[GOAL]
case intro.mk.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
h : ↑(Perm.sumCongrHom ιa ιb) (sl, sr) = σ₁⁻¹ * σ₂
v : ιa ⊕ ιb → Mᵢ
⊢ (↑Perm.sign σ₁ • (↑a fun i => v (↑σ₁ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₁ (Sum.inr i))) =
    ↑Perm.sign σ₂ • (↑a fun i => v (↑σ₂ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₂ (Sum.inr i))
[PROOFSTEP]
replace h := inv_mul_eq_iff_eq_mul.mp h.symm
[GOAL]
case intro.mk.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
v : ιa ⊕ ιb → Mᵢ
h : σ₂ = σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)
⊢ (↑Perm.sign σ₁ • (↑a fun i => v (↑σ₁ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₁ (Sum.inr i))) =
    ↑Perm.sign σ₂ • (↑a fun i => v (↑σ₂ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₂ (Sum.inr i))
[PROOFSTEP]
have :
  Equiv.Perm.sign (σ₁ * Perm.sumCongrHom _ _ (sl, sr)) =
    Equiv.Perm.sign σ₁ * (Equiv.Perm.sign sl * Equiv.Perm.sign sr) :=
  by simp
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
v : ιa ⊕ ιb → Mᵢ
h : σ₂ = σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)
⊢ ↑Perm.sign (σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)) = ↑Perm.sign σ₁ * (↑Perm.sign sl * ↑Perm.sign sr)
[PROOFSTEP]
simp
[GOAL]
case intro.mk.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
v : ιa ⊕ ιb → Mᵢ
h : σ₂ = σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)
this : ↑Perm.sign (σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)) = ↑Perm.sign σ₁ * (↑Perm.sign sl * ↑Perm.sign sr)
⊢ (↑Perm.sign σ₁ • (↑a fun i => v (↑σ₁ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₁ (Sum.inr i))) =
    ↑Perm.sign σ₂ • (↑a fun i => v (↑σ₂ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₂ (Sum.inr i))
[PROOFSTEP]
rw [h, this, mul_smul, mul_smul, smul_left_cancel_iff, ← TensorProduct.tmul_smul, TensorProduct.smul_tmul']
[GOAL]
case intro.mk.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
v : ιa ⊕ ιb → Mᵢ
h : σ₂ = σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)
this : ↑Perm.sign (σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)) = ↑Perm.sign σ₁ * (↑Perm.sign sl * ↑Perm.sign sr)
⊢ ((↑a fun i => v (↑σ₁ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₁ (Sum.inr i))) =
    (↑Perm.sign sl • ↑a fun i => v (↑(σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inl i))) ⊗ₜ[R']
      (↑Perm.sign sr • ↑b fun i => v (↑(σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inr i)))
[PROOFSTEP]
simp only [Sum.map_inr, Perm.sumCongrHom_apply, Perm.sumCongr_apply, Sum.map_inl, Function.comp_apply, Perm.coe_mul]
  -- Porting note: Was `rw`.
[GOAL]
case intro.mk.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
σ₁ σ₂ : Perm (ιa ⊕ ιb)
sl : Perm ιa
sr : Perm ιb
v : ιa ⊕ ιb → Mᵢ
h : σ₂ = σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)
this : ↑Perm.sign (σ₁ * ↑(Perm.sumCongrHom ιa ιb) (sl, sr)) = ↑Perm.sign σ₁ * (↑Perm.sign sl * ↑Perm.sign sr)
⊢ ((↑a fun i => v (↑σ₁ (Sum.inl i))) ⊗ₜ[R'] ↑b fun i => v (↑σ₁ (Sum.inr i))) =
    (↑Perm.sign sl • ↑a fun i => v (↑σ₁ (Sum.inl (↑sl i)))) ⊗ₜ[R']
      (↑Perm.sign sr • ↑b fun i => v (↑σ₁ (Sum.inr (↑sr i))))
[PROOFSTEP]
erw [← a.map_congr_perm fun i => v (σ₁ _), ← b.map_congr_perm fun i => v (σ₁ _)]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
⊢ ↑(summand a b σ) v + ↑(summand a b (swap i j • σ)) v = 0
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ ↑(summand a b (Quotient.mk'' σ)) v + ↑(summand a b (swap i j • Quotient.mk'' σ)) v = 0
[PROOFSTEP]
dsimp only [Quotient.liftOn'_mk'', Quotient.map'_mk'', MulAction.Quotient.smul_mk, domCoprod.summand]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ ↑(↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) v +
      ↑(↑Perm.sign (swap i j • σ) • MultilinearMap.domDomCongr (swap i j • σ) (MultilinearMap.domCoprod ↑a ↑b)) v =
    0
[PROOFSTEP]
rw [smul_eq_mul, Perm.sign_mul, Perm.sign_swap hij]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ ↑(↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑a ↑b)) v +
      ↑((-1 * ↑Perm.sign σ) • MultilinearMap.domDomCongr (swap i j * σ) (MultilinearMap.domCoprod ↑a ↑b)) v =
    0
[PROOFSTEP]
simp only [one_mul, neg_mul, Function.comp_apply, Units.neg_smul, Perm.coe_mul, Units.val_neg,
  MultilinearMap.smul_apply, MultilinearMap.neg_apply, MultilinearMap.domDomCongr_apply, MultilinearMap.domCoprod_apply]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) +
      -(↑Perm.sign σ •
          (↑↑a fun i_1 => v (↑(swap i j) (↑σ (Sum.inl i_1)))) ⊗ₜ[R']
            ↑↑b fun i_1 => v (↑(swap i j) (↑σ (Sum.inr i_1)))) =
    0
[PROOFSTEP]
convert add_right_neg (G := N₁ ⊗[R'] N₂) _ using 6
[GOAL]
case h.e'_2.h.e'_6.h.e'_3.h.e'_6.h.e'_9.h.e'_6
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ (fun i_1 => v (↑(swap i j) (↑σ (Sum.inl i_1)))) = fun i => v (↑σ (Sum.inl i))
[PROOFSTEP]
ext k
[GOAL]
case h.e'_2.h.e'_6.h.e'_3.h.e'_6.h.e'_9.h.e'_6.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
k : ιa
⊢ v (↑(swap i j) (↑σ (Sum.inl k))) = v (↑σ (Sum.inl k))
[PROOFSTEP]
rw [Equiv.apply_swap_eq_self hv]
[GOAL]
case h.e'_2.h.e'_6.h.e'_3.h.e'_6.h.e'_10.h.e'_6
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ (fun i_1 => v (↑(swap i j) (↑σ (Sum.inr i_1)))) = fun i => v (↑σ (Sum.inr i))
[PROOFSTEP]
ext k
[GOAL]
case h.e'_2.h.e'_6.h.e'_3.h.e'_6.h.e'_10.h.e'_6.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
k : ιb
⊢ v (↑(swap i j) (↑σ (Sum.inr k))) = v (↑σ (Sum.inr k))
[PROOFSTEP]
rw [Equiv.apply_swap_eq_self hv]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
⊢ swap i j • σ = σ → ↑(summand a b σ) v = 0
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ swap i j • Quotient.mk'' σ = Quotient.mk'' σ → ↑(summand a b (Quotient.mk'' σ)) v = 0
[PROOFSTEP]
dsimp only [Quotient.liftOn'_mk'', Quotient.map'_mk'', MultilinearMap.smul_apply, MultilinearMap.domDomCongr_apply,
  MultilinearMap.domCoprod_apply, domCoprod.summand]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
⊢ swap i j • Quotient.mk'' σ = Quotient.mk'' σ →
    (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
intro hσ
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
cases' hi : σ⁻¹ i with val val
[GOAL]
case inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιa
hi : ↑σ⁻¹ i = Sum.inl val
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
cases' hj : σ⁻¹ j with val_1 val_1
[GOAL]
case inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιb
hi : ↑σ⁻¹ i = Sum.inr val
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
cases' hj : σ⁻¹ j with val_1 val_1
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιa
hi : ↑σ⁻¹ i = Sum.inl val
val_1 : ιa
hj : ↑σ⁻¹ j = Sum.inl val_1
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
rw [Perm.inv_eq_iff_eq] at hi hj 
[GOAL]
case inl.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιa
hi : ↑σ⁻¹ i = Sum.inl val
val_1 : ιb
hj : ↑σ⁻¹ j = Sum.inr val_1
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
rw [Perm.inv_eq_iff_eq] at hi hj 
[GOAL]
case inr.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιb
hi : ↑σ⁻¹ i = Sum.inr val
val_1 : ιa
hj : ↑σ⁻¹ j = Sum.inl val_1
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
rw [Perm.inv_eq_iff_eq] at hi hj 
[GOAL]
case inr.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιb
hi : ↑σ⁻¹ i = Sum.inr val
val_1 : ιb
hj : ↑σ⁻¹ j = Sum.inr val_1
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
rw [Perm.inv_eq_iff_eq] at hi hj 
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιa
hi : i = ↑σ (Sum.inl val)
val_1 : ιa
hj : j = ↑σ (Sum.inl val_1)
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
substs hi hj
[GOAL]
case inl.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιa
hi : i = ↑σ (Sum.inl val)
val_1 : ιb
hj : j = ↑σ (Sum.inr val_1)
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
substs hi hj
[GOAL]
case inr.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιb
hi : i = ↑σ (Sum.inr val)
val_1 : ιa
hj : j = ↑σ (Sum.inl val_1)
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
substs hi hj
[GOAL]
case inr.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
σ : Perm (ιa ⊕ ιb)
hσ : swap i j • Quotient.mk'' σ = Quotient.mk'' σ
val : ιb
hi : i = ↑σ (Sum.inr val)
val_1 : ιb
hj : j = ↑σ (Sum.inr val_1)
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
substs hi hj
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
val val_1 : ιa
hv : v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1))
hij : ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1)
hσ : swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
revert val val_1
[GOAL]
case inl.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
val : ιa
val_1 : ιb
hv : v (↑σ (Sum.inl val)) = v (↑σ (Sum.inr val_1))
hij : ↑σ (Sum.inl val) ≠ ↑σ (Sum.inr val_1)
hσ : swap (↑σ (Sum.inl val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
revert val val_1
[GOAL]
case inr.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
val : ιb
val_1 : ιa
hv : v (↑σ (Sum.inr val)) = v (↑σ (Sum.inl val_1))
hij : ↑σ (Sum.inr val) ≠ ↑σ (Sum.inl val_1)
hσ : swap (↑σ (Sum.inr val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
revert val val_1
[GOAL]
case inr.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
val val_1 : ιb
hv : v (↑σ (Sum.inr val)) = v (↑σ (Sum.inr val_1))
hij : ↑σ (Sum.inr val) ≠ ↑σ (Sum.inr val_1)
hσ : swap (↑σ (Sum.inr val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
revert val val_1
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιa),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
case inl.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιa) (val_1 : ιb),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
case inr.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιb) (val_1 : ιa),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
case inr.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιb),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inl.inr =>
  intro i' j' _ _ hσ
  obtain ⟨⟨sl, sr⟩, hσ⟩ := QuotientGroup.leftRel_apply.mp (Quotient.exact' hσ)
  replace hσ := Equiv.congr_fun hσ (Sum.inl i')
  dsimp only at hσ 
  rw [smul_eq_mul, ← mul_swap_eq_swap_mul, mul_inv_rev, swap_inv, inv_mul_cancel_right] at hσ 
  simp at hσ 
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιa) (val_1 : ιb),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inl.inr =>
  intro i' j' _ _ hσ
  obtain ⟨⟨sl, sr⟩, hσ⟩ := QuotientGroup.leftRel_apply.mp (Quotient.exact' hσ)
  replace hσ := Equiv.congr_fun hσ (Sum.inl i')
  dsimp only at hσ 
  rw [smul_eq_mul, ← mul_swap_eq_swap_mul, mul_inv_rev, swap_inv, inv_mul_cancel_right] at hσ 
  simp at hσ 
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιa) (val_1 : ιb),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
intro i' j' _ _ hσ
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιa
j' : ιb
hv✝ : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inr j'))
hij✝ : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inr j')
hσ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
obtain ⟨⟨sl, sr⟩, hσ⟩ := QuotientGroup.leftRel_apply.mp (Quotient.exact' hσ)
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιa
j' : ιb
hv✝ : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inr j'))
hij✝ : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ : ↑(Perm.sumCongrHom ιa ιb) (sl, sr) = ((fun x x_1 => x • x_1) (swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j'))) σ)⁻¹ * σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
replace hσ := Equiv.congr_fun hσ (Sum.inl i')
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιa
j' : ιb
hv✝ : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inr j'))
hij✝ : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ :
  ↑(↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inl i') =
    ↑(((fun x x_1 => x • x_1) (swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j'))) σ)⁻¹ * σ) (Sum.inl i')
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
dsimp only at hσ 
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιa
j' : ιb
hv✝ : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inr j'))
hij✝ : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ :
  ↑(↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inl i') =
    ↑((swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j')) • σ)⁻¹ * σ) (Sum.inl i')
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
rw [smul_eq_mul, ← mul_swap_eq_swap_mul, mul_inv_rev, swap_inv, inv_mul_cancel_right] at hσ 
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιa
j' : ιb
hv✝ : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inr j'))
hij✝ : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ : ↑(↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inl i') = ↑(swap (Sum.inl i') (Sum.inr j')) (Sum.inl i')
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
simp at hσ 
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιa),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
case inr.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιb) (val_1 : ιa),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
case inr.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιb),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inr.inl =>
  intro i' j' _ _ hσ
  obtain ⟨⟨sl, sr⟩, hσ⟩ := QuotientGroup.leftRel_apply.mp (Quotient.exact' hσ)
  replace hσ := Equiv.congr_fun hσ (Sum.inr i')
  dsimp only at hσ 
  rw [smul_eq_mul, ← mul_swap_eq_swap_mul, mul_inv_rev, swap_inv, inv_mul_cancel_right] at hσ 
  simp at hσ 
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιb) (val_1 : ιa),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inr.inl =>
  intro i' j' _ _ hσ
  obtain ⟨⟨sl, sr⟩, hσ⟩ := QuotientGroup.leftRel_apply.mp (Quotient.exact' hσ)
  replace hσ := Equiv.congr_fun hσ (Sum.inr i')
  dsimp only at hσ 
  rw [smul_eq_mul, ← mul_swap_eq_swap_mul, mul_inv_rev, swap_inv, inv_mul_cancel_right] at hσ 
  simp at hσ 
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val : ιb) (val_1 : ιa),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
intro i' j' _ _ hσ
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιb
j' : ιa
hv✝ : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inl j'))
hij✝ : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inl j')
hσ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
obtain ⟨⟨sl, sr⟩, hσ⟩ := QuotientGroup.leftRel_apply.mp (Quotient.exact' hσ)
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιb
j' : ιa
hv✝ : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inl j'))
hij✝ : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ : ↑(Perm.sumCongrHom ιa ιb) (sl, sr) = ((fun x x_1 => x • x_1) (swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j'))) σ)⁻¹ * σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
replace hσ := Equiv.congr_fun hσ (Sum.inr i')
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιb
j' : ιa
hv✝ : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inl j'))
hij✝ : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ :
  ↑(↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inr i') =
    ↑(((fun x x_1 => x • x_1) (swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j'))) σ)⁻¹ * σ) (Sum.inr i')
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
dsimp only at hσ 
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιb
j' : ιa
hv✝ : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inl j'))
hij✝ : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ :
  ↑(↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inr i') =
    ↑((swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j')) • σ)⁻¹ * σ) (Sum.inr i')
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
rw [smul_eq_mul, ← mul_swap_eq_swap_mul, mul_inv_rev, swap_inv, inv_mul_cancel_right] at hσ 
[GOAL]
case intro.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' : ιb
j' : ιa
hv✝ : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inl j'))
hij✝ : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
sl : Perm ιa
sr : Perm ιb
hσ : ↑(↑(Perm.sumCongrHom ιa ιb) (sl, sr)) (Sum.inr i') = ↑(swap (Sum.inr i') (Sum.inl j')) (Sum.inr i')
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
simp at hσ 
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιa),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
case inr.inr
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιb),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inr.inr =>
  intro i' j' hv hij _
  convert smul_zero (M := ℤˣ) (A := N₁ ⊗[R'] N₂) _
  convert TensorProduct.tmul_zero (R := R') (M := N₁) N₂ _
  exact AlternatingMap.map_eq_zero_of_eq _ _ hv fun hij' => hij (hij' ▸ rfl)
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιb),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inr.inr =>
  intro i' j' hv hij _
  convert smul_zero (M := ℤˣ) (A := N₁ ⊗[R'] N₂) _
  convert TensorProduct.tmul_zero (R := R') (M := N₁) N₂ _
  exact AlternatingMap.map_eq_zero_of_eq _ _ hv fun hij' => hij (hij' ▸ rfl)
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιb),
    v (↑σ (Sum.inr val)) = v (↑σ (Sum.inr val_1)) →
      ↑σ (Sum.inr val) ≠ ↑σ (Sum.inr val_1) →
        swap (↑σ (Sum.inr val)) (↑σ (Sum.inr val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
intro i' j' hv hij _
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' j' : ιb
hv : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inr j'))
hij : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
convert smul_zero (M := ℤˣ) (A := N₁ ⊗[R'] N₂) _
[GOAL]
case h.e'_2.h.e'_6
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' j' : ιb
hv : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inr j'))
hij : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ ((↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
convert TensorProduct.tmul_zero (R := R') (M := N₁) N₂ _
[GOAL]
case h.e'_2.h.e'_10
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' j' : ιb
hv : v (↑σ (Sum.inr i')) = v (↑σ (Sum.inr j'))
hij : ↑σ (Sum.inr i') ≠ ↑σ (Sum.inr j')
hσ✝ : swap (↑σ (Sum.inr i')) (↑σ (Sum.inr j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
exact AlternatingMap.map_eq_zero_of_eq _ _ hv fun hij' => hij (hij' ▸ rfl)
[GOAL]
case inl.inl
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιa),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inl.inl =>
  intro i' j' hv hij _
  convert smul_zero (M := ℤˣ) (A := N₁ ⊗[R'] N₂) _
  convert TensorProduct.zero_tmul (R := R') N₁ (N := N₂) _
  exact AlternatingMap.map_eq_zero_of_eq _ _ hv fun hij' => hij (hij' ▸ rfl)
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιa),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
case inl.inl =>
  intro i' j' hv hij _
  convert smul_zero (M := ℤˣ) (A := N₁ ⊗[R'] N₂) _
  convert TensorProduct.zero_tmul (R := R') N₁ (N := N₂) _
  exact AlternatingMap.map_eq_zero_of_eq _ _ hv fun hij' => hij (hij' ▸ rfl)
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
⊢ ∀ (val val_1 : ιa),
    v (↑σ (Sum.inl val)) = v (↑σ (Sum.inl val_1)) →
      ↑σ (Sum.inl val) ≠ ↑σ (Sum.inl val_1) →
        swap (↑σ (Sum.inl val)) (↑σ (Sum.inl val_1)) • Quotient.mk'' σ = Quotient.mk'' σ →
          (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
intro i' j' hv hij _
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' j' : ιa
hv : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inl j'))
hij : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑Perm.sign σ • (↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
convert smul_zero (M := ℤˣ) (A := N₁ ⊗[R'] N₂) _
[GOAL]
case h.e'_2.h.e'_6
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' j' : ιa
hv : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inl j'))
hij : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ ((↑↑a fun i => v (↑σ (Sum.inl i))) ⊗ₜ[R'] ↑↑b fun i => v (↑σ (Sum.inr i))) = 0
[PROOFSTEP]
convert TensorProduct.zero_tmul (R := R') N₁ (N := N₂) _
[GOAL]
case h.e'_2.h.e'_9
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
σ✝ : Perm.ModSumCongr ιa ιb
v : ιa ⊕ ιb → Mᵢ
σ : Perm (ιa ⊕ ιb)
i' j' : ιa
hv : v (↑σ (Sum.inl i')) = v (↑σ (Sum.inl j'))
hij : ↑σ (Sum.inl i') ≠ ↑σ (Sum.inl j')
hσ✝ : swap (↑σ (Sum.inl i')) (↑σ (Sum.inl j')) • Quotient.mk'' σ = Quotient.mk'' σ
⊢ (↑↑a fun i => v (↑σ (Sum.inl i))) = 0
[PROOFSTEP]
exact AlternatingMap.map_eq_zero_of_eq _ _ hv fun hij' => hij (hij' ▸ rfl)
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
src✝ : MultilinearMap R' (fun x => Mᵢ) (N₁ ⊗[R'] N₂) := ∑ σ : Perm.ModSumCongr ιa ιb, domCoprod.summand a b σ
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
⊢ MultilinearMap.toFun
      { toFun := fun v => ↑(∑ σ : Perm.ModSumCongr ιa ιb, domCoprod.summand a b σ) v,
        map_add' :=
          (_ :
            ∀ [inst : DecidableEq (ιa ⊕ ιb)] (m : ιa ⊕ ιb → Mᵢ) (i : ιa ⊕ ιb) (x y : Mᵢ),
              MultilinearMap.toFun src✝ (Function.update m i (x + y)) =
                MultilinearMap.toFun src✝ (Function.update m i x) + MultilinearMap.toFun src✝ (Function.update m i y)),
        map_smul' :=
          (_ :
            ∀ [inst : DecidableEq (ιa ⊕ ιb)] (m : ιa ⊕ ιb → Mᵢ) (i : ιa ⊕ ιb) (c : R') (x : Mᵢ),
              MultilinearMap.toFun src✝ (Function.update m i (c • x)) =
                c • MultilinearMap.toFun src✝ (Function.update m i x)) }
      v =
    0
[PROOFSTEP]
dsimp only
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
src✝ : MultilinearMap R' (fun x => Mᵢ) (N₁ ⊗[R'] N₂) := ∑ σ : Perm.ModSumCongr ιa ιb, domCoprod.summand a b σ
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
⊢ ↑(∑ σ : Perm.ModSumCongr ιa ιb, domCoprod.summand a b σ) v = 0
[PROOFSTEP]
rw [MultilinearMap.sum_apply]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
src✝ : MultilinearMap R' (fun x => Mᵢ) (N₁ ⊗[R'] N₂) := ∑ σ : Perm.ModSumCongr ιa ιb, domCoprod.summand a b σ
v : ιa ⊕ ιb → Mᵢ
i j : ιa ⊕ ιb
hv : v i = v j
hij : i ≠ j
⊢ ∑ a_1 : Perm.ModSumCongr ιa ιb, ↑(domCoprod.summand a b a_1) v = 0
[PROOFSTEP]
exact
  Finset.sum_involution (fun σ _ => Equiv.swap i j • σ)
    (fun σ _ => domCoprod.summand_add_swap_smul_eq_zero a b σ hv hij)
    (fun σ _ => mt <| domCoprod.summand_eq_zero_of_smul_invariant a b σ hv hij) (fun σ _ => Finset.mem_univ _)
    fun σ _ => Equiv.Perm.ModSumCongr.swap_smul_involutive i j σ
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
⊢ AlternatingMap R' Mᵢ N₁ ιa →ₗ[R'] AlternatingMap R' Mᵢ N₂ ιb →ₗ[R'] AlternatingMap R' Mᵢ (N₁ ⊗[R'] N₂) (ιa ⊕ ιb)
[PROOFSTEP]
refine' LinearMap.mk₂ R' domCoprod (fun m₁ m₂ n => _) (fun c m n => _) (fun m n₁ n₂ => _) fun c m n => _
[GOAL]
case refine'_1
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
⊢ domCoprod (m₁ + m₂) n = domCoprod m₁ n + domCoprod m₂ n
[PROOFSTEP]
ext
[GOAL]
case refine'_1.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ↑(domCoprod (m₁ + m₂) n) x✝ = ↑(domCoprod m₁ n + domCoprod m₂ n) x✝
[PROOFSTEP]
simp only [domCoprod_apply, add_apply, smul_apply, ← Finset.sum_add_distrib, Finset.smul_sum, MultilinearMap.sum_apply,
  domCoprod.summand]
[GOAL]
case refine'_1.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ∑ x : Perm.ModSumCongr ιa ιb,
      ↑(Quotient.liftOn' x
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₂))
        x✝ =
    ∑ x : Perm.ModSumCongr ιa ιb,
      (↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n))
              (_ :
                ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                  Setoid.r σ₁ σ₂ →
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₁ =
                      (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₂))
          x✝ +
        ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n))
              (_ :
                ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                  Setoid.r σ₁ σ₂ →
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₁ =
                      (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₂))
          x✝)
[PROOFSTEP]
congr
[GOAL]
case refine'_1.H.e_f
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ (fun x =>
      ↑(Quotient.liftOn' x
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₂))
        x✝) =
    fun x =>
    ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₂))
        x✝ +
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₂))
        x✝
[PROOFSTEP]
ext σ
[GOAL]
case refine'_1.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ : Perm.ModSumCongr ιa ιb
⊢ ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₂))
      x✝ =
    ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₂))
        x✝ +
      ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₂))
        x✝
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
case refine'_1.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑(Quotient.liftOn' (Quotient.mk'' σ)
          (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(m₁ + m₂) ↑n)) σ₂))
      x✝ =
    ↑(Quotient.liftOn' (Quotient.mk'' σ)
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₁ ↑n)) σ₂))
        x✝ +
      ↑(Quotient.liftOn' (Quotient.mk'' σ)
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m₂ ↑n)) σ₂))
        x✝
[PROOFSTEP]
simp only [Quotient.liftOn'_mk'', coe_add, coe_smul, MultilinearMap.smul_apply, ← MultilinearMap.domCoprod'_apply]
[GOAL]
case refine'_1.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' ((↑m₁ + ↑m₂) ⊗ₜ[R'] ↑n))) x✝ =
    ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n))) x✝ +
      ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
simp only [TensorProduct.add_tmul, ← TensorProduct.smul_tmul', TensorProduct.tmul_add, TensorProduct.tmul_smul,
  LinearMap.map_add, LinearMap.map_smul]
[GOAL]
case refine'_1.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ •
      ↑(MultilinearMap.domDomCongr σ
            (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n) + ↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n)))
        x✝ =
    ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n))) x✝ +
      ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
first
| rw [← smul_add]
| rw [smul_comm]
[GOAL]
case refine'_1.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ •
      ↑(MultilinearMap.domDomCongr σ
            (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n) + ↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n)))
        x✝ =
    ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n))) x✝ +
      ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rw [← smul_add]
[GOAL]
case refine'_1.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m₁ m₂ : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ •
      ↑(MultilinearMap.domDomCongr σ
            (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n) + ↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n)))
        x✝ =
    ↑Perm.sign σ •
      (↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₁ ⊗ₜ[R'] ↑n))) x✝ +
        ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m₂ ⊗ₜ[R'] ↑n))) x✝)
[PROOFSTEP]
rfl
[GOAL]
case refine'_2
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
⊢ domCoprod (c • m) n = c • domCoprod m n
[PROOFSTEP]
ext
[GOAL]
case refine'_2.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ↑(domCoprod (c • m) n) x✝ = ↑(c • domCoprod m n) x✝
[PROOFSTEP]
simp only [domCoprod_apply, add_apply, smul_apply, ← Finset.sum_add_distrib, Finset.smul_sum, MultilinearMap.sum_apply,
  domCoprod.summand]
[GOAL]
case refine'_2.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ∑ x : Perm.ModSumCongr ιa ιb,
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₂))
        x✝ =
    ∑ x : Perm.ModSumCongr ιa ιb,
      c •
        ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
              (_ :
                ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                  Setoid.r σ₁ σ₂ →
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                      (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
          x✝
[PROOFSTEP]
congr
[GOAL]
case refine'_2.H.e_f
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ (fun x =>
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₂))
        x✝) =
    fun x =>
    c •
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
        x✝
[PROOFSTEP]
ext σ
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ : Perm.ModSumCongr ιa ιb
⊢ ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₂))
      x✝ =
    c •
      ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
        x✝
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑(Quotient.liftOn' (Quotient.mk'' σ)
          (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑(c • m) ↑n)) σ₂))
      x✝ =
    c •
      ↑(Quotient.liftOn' (Quotient.mk'' σ)
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
        x✝
[PROOFSTEP]
simp only [Quotient.liftOn'_mk'', coe_add, coe_smul, MultilinearMap.smul_apply, ← MultilinearMap.domCoprod'_apply]
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' ((c • ↑m) ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
simp only [TensorProduct.add_tmul, ← TensorProduct.smul_tmul', TensorProduct.tmul_add, TensorProduct.tmul_smul,
  LinearMap.map_add, LinearMap.map_smul]
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
first
| rw [← smul_add]
| rw [smul_comm]
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rw [← smul_add]
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rw [smul_comm]
[GOAL]
case refine'_2.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    ↑Perm.sign σ • c • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rfl
[GOAL]
case refine'_3
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
⊢ domCoprod m (n₁ + n₂) = domCoprod m n₁ + domCoprod m n₂
[PROOFSTEP]
ext
[GOAL]
case refine'_3.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ↑(domCoprod m (n₁ + n₂)) x✝ = ↑(domCoprod m n₁ + domCoprod m n₂) x✝
[PROOFSTEP]
simp only [domCoprod_apply, add_apply, smul_apply, ← Finset.sum_add_distrib, Finset.smul_sum, MultilinearMap.sum_apply,
  domCoprod.summand]
[GOAL]
case refine'_3.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ∑ x : Perm.ModSumCongr ιa ιb,
      ↑(Quotient.liftOn' x
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂)))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₂))
        x✝ =
    ∑ x : Perm.ModSumCongr ιa ιb,
      (↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁))
              (_ :
                ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                  Setoid.r σ₁ σ₂ →
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₁ =
                      (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₂))
          x✝ +
        ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂))
              (_ :
                ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                  Setoid.r σ₁ σ₂ →
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₁ =
                      (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₂))
          x✝)
[PROOFSTEP]
congr
[GOAL]
case refine'_3.H.e_f
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ (fun x =>
      ↑(Quotient.liftOn' x
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂)))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₂))
        x✝) =
    fun x =>
    ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₂))
        x✝ +
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₂))
        x✝
[PROOFSTEP]
ext σ
[GOAL]
case refine'_3.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ : Perm.ModSumCongr ιa ιb
⊢ ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂)))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₂))
      x✝ =
    ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₂))
        x✝ +
      ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₂))
        x✝
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
case refine'_3.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑(Quotient.liftOn' (Quotient.mk'' σ)
          (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂)))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(n₁ + n₂))) σ₂))
      x✝ =
    ↑(Quotient.liftOn' (Quotient.mk'' σ)
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₁)) σ₂))
        x✝ +
      ↑(Quotient.liftOn' (Quotient.mk'' σ)
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n₂)) σ₂))
        x✝
[PROOFSTEP]
simp only [Quotient.liftOn'_mk'', coe_add, coe_smul, MultilinearMap.smul_apply, ← MultilinearMap.domCoprod'_apply]
[GOAL]
case refine'_3.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] (↑n₁ + ↑n₂)))) x✝ =
    ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁))) x✝ +
      ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂))) x✝
[PROOFSTEP]
simp only [TensorProduct.add_tmul, ← TensorProduct.smul_tmul', TensorProduct.tmul_add, TensorProduct.tmul_smul,
  LinearMap.map_add, LinearMap.map_smul]
[GOAL]
case refine'_3.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ •
      ↑(MultilinearMap.domDomCongr σ
            (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁) + ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂)))
        x✝ =
    ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁))) x✝ +
      ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂))) x✝
[PROOFSTEP]
first
| rw [← smul_add]
| rw [smul_comm]
[GOAL]
case refine'_3.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ •
      ↑(MultilinearMap.domDomCongr σ
            (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁) + ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂)))
        x✝ =
    ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁))) x✝ +
      ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂))) x✝
[PROOFSTEP]
rw [← smul_add]
[GOAL]
case refine'_3.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
m : AlternatingMap R' Mᵢ N₁ ιa
n₁ n₂ : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ •
      ↑(MultilinearMap.domDomCongr σ
            (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁) + ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂)))
        x✝ =
    ↑Perm.sign σ •
      (↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₁))) x✝ +
        ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n₂))) x✝)
[PROOFSTEP]
rfl
[GOAL]
case refine'_4
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
⊢ domCoprod m (c • n) = c • domCoprod m n
[PROOFSTEP]
ext
[GOAL]
case refine'_4.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ↑(domCoprod m (c • n)) x✝ = ↑(c • domCoprod m n) x✝
[PROOFSTEP]
simp only [domCoprod_apply, add_apply, smul_apply, ← Finset.sum_add_distrib, Finset.smul_sum, MultilinearMap.sum_apply,
  domCoprod.summand]
[GOAL]
case refine'_4.H
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ ∑ x : Perm.ModSumCongr ιa ιb,
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n)))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₂))
        x✝ =
    ∑ x : Perm.ModSumCongr ιa ιb,
      c •
        ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
              (_ :
                ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                  Setoid.r σ₁ σ₂ →
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                      (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
          x✝
[PROOFSTEP]
congr
[GOAL]
case refine'_4.H.e_f
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
⊢ (fun x =>
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n)))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₂))
        x✝) =
    fun x =>
    c •
      ↑(Quotient.liftOn' x (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
        x✝
[PROOFSTEP]
ext σ
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ : Perm.ModSumCongr ιa ιb
⊢ ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n)))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₂))
      x✝ =
    c •
      ↑(Quotient.liftOn' σ (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
        x✝
[PROOFSTEP]
refine Quotient.inductionOn' σ fun σ => ?_
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑(Quotient.liftOn' (Quotient.mk'' σ)
          (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n)))
          (_ :
            ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
              Setoid.r σ₁ σ₂ →
                (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₁ =
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑(c • n))) σ₂))
      x✝ =
    c •
      ↑(Quotient.liftOn' (Quotient.mk'' σ)
            (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n))
            (_ :
              ∀ (σ₁ σ₂ : Perm (ιa ⊕ ιb)),
                Setoid.r σ₁ σ₂ →
                  (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₁ =
                    (fun σ => ↑Perm.sign σ • MultilinearMap.domDomCongr σ (MultilinearMap.domCoprod ↑m ↑n)) σ₂))
        x✝
[PROOFSTEP]
simp only [Quotient.liftOn'_mk'', coe_add, coe_smul, MultilinearMap.smul_apply, ← MultilinearMap.domCoprod'_apply]
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] (c • ↑n)))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
simp only [TensorProduct.add_tmul, ← TensorProduct.smul_tmul', TensorProduct.tmul_add, TensorProduct.tmul_smul,
  LinearMap.map_add, LinearMap.map_smul]
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
first
| rw [← smul_add]
| rw [smul_comm]
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rw [← smul_add]
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    c • ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rw [smul_comm]
[GOAL]
case refine'_4.H.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
c : R'
m : AlternatingMap R' Mᵢ N₁ ιa
n : AlternatingMap R' Mᵢ N₂ ιb
x✝ : ιa ⊕ ιb → Mᵢ
σ✝ : Perm.ModSumCongr ιa ιb
σ : Perm (ιa ⊕ ιb)
⊢ ↑Perm.sign σ • ↑(MultilinearMap.domDomCongr σ (c • ↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝ =
    ↑Perm.sign σ • c • ↑(MultilinearMap.domDomCongr σ (↑MultilinearMap.domCoprod' (↑m ⊗ₜ[R'] ↑n))) x✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ domCoprod ↑(↑alternatization a) ↑(↑alternatization b) =
    ∑ σa : Perm ιa, ∑ σb : Perm ιb, ↑Perm.sign σa • ↑Perm.sign σb • domCoprod (domDomCongr σa a) (domDomCongr σb b)
[PROOFSTEP]
simp_rw [← MultilinearMap.domCoprod'_apply, MultilinearMap.alternatization_coe]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ ↑domCoprod' ((∑ x : Perm ιa, ↑Perm.sign x • domDomCongr x a) ⊗ₜ[R'] ∑ x : Perm ιb, ↑Perm.sign x • domDomCongr x b) =
    ∑ x : Perm ιa,
      ∑ x_1 : Perm ιb, ↑Perm.sign x • ↑Perm.sign x_1 • ↑domCoprod' (domDomCongr x a ⊗ₜ[R'] domDomCongr x_1 b)
[PROOFSTEP]
simp_rw [TensorProduct.sum_tmul, TensorProduct.tmul_sum, LinearMap.map_sum, ← TensorProduct.smul_tmul',
  TensorProduct.tmul_smul]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ ∑ x : Perm ιa,
      ∑ x_1 : Perm ιb, ↑domCoprod' (↑Perm.sign x • ↑Perm.sign x_1 • domDomCongr x a ⊗ₜ[R'] domDomCongr x_1 b) =
    ∑ x : Perm ιa,
      ∑ x_1 : Perm ιb, ↑Perm.sign x • ↑Perm.sign x_1 • ↑domCoprod' (domDomCongr x a ⊗ₜ[R'] domDomCongr x_1 b)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ ↑alternatization (domCoprod a b) = AlternatingMap.domCoprod (↑alternatization a) (↑alternatization b)
[PROOFSTEP]
apply coe_multilinearMap_injective
[GOAL]
case a
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ ↑(↑alternatization (domCoprod a b)) = ↑(AlternatingMap.domCoprod (↑alternatization a) (↑alternatization b))
[PROOFSTEP]
rw [domCoprod_coe, MultilinearMap.alternatization_coe,
  Finset.sum_partition (QuotientGroup.leftRel (Perm.sumCongrHom ιa ιb).range)]
[GOAL]
case a
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ ∑ xbar in Finset.image Quotient.mk'' Finset.univ,
      ∑ y in
        Finset.filter (fun x => Quotient.mk (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb))) x = xbar)
          Finset.univ,
        ↑Perm.sign y • domDomCongr y (domCoprod a b) =
    ∑ σ : Perm.ModSumCongr ιa ιb, domCoprod.summand (↑alternatization a) (↑alternatization b) σ
[PROOFSTEP]
congr 1
[GOAL]
case a.e_f
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
⊢ (fun xbar =>
      ∑ y in
        Finset.filter (fun x => Quotient.mk (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb))) x = xbar)
          Finset.univ,
        ↑Perm.sign y • domDomCongr y (domCoprod a b)) =
    fun σ => domCoprod.summand (↑alternatization a) (↑alternatization b) σ
[PROOFSTEP]
ext1 σ
[GOAL]
case a.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
⊢ ∑ y in
      Finset.filter (fun x => Quotient.mk (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb))) x = σ)
        Finset.univ,
      ↑Perm.sign y • domDomCongr y (domCoprod a b) =
    domCoprod.summand (↑alternatization a) (↑alternatization b) σ
[PROOFSTEP]
refine
  Quotient.inductionOn' σ fun σ =>
    ?_
      -- unfold the quotient mess left by `Finset.sum_partition`
        -- Porting note: Was `conv in .. => ..`.
[GOAL]
case a.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
⊢ ∑ y in
      Finset.filter
        (fun x => Quotient.mk (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb))) x = Quotient.mk'' σ)
        Finset.univ,
      ↑Perm.sign y • domDomCongr y (domCoprod a b) =
    domCoprod.summand (↑alternatization a) (↑alternatization b) (Quotient.mk'' σ)
[PROOFSTEP]
erw [@Finset.filter_congr _ _
    (fun a =>
      @Quotient.decidableEq _ _ (QuotientGroup.leftRelDecidable (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
        (Quotient.mk (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb))) a) (Quotient.mk'' σ))
    _ (s := Finset.univ) fun x _ => QuotientGroup.eq' (s := MonoidHom.range (Perm.sumCongrHom ιa ιb)) (a := x) (b := σ)]
  -- eliminate a multiplication
[GOAL]
case a.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
⊢ ∑ y in Finset.filter (fun x => x⁻¹ * σ ∈ MonoidHom.range (Perm.sumCongrHom ιa ιb)) Finset.univ,
      ↑Perm.sign y • domDomCongr y (domCoprod a b) =
    domCoprod.summand (↑alternatization a) (↑alternatization b) (Quotient.mk'' σ)
[PROOFSTEP]
rw [← Finset.map_univ_equiv (Equiv.mulLeft σ), Finset.filter_map, Finset.sum_map]
[GOAL]
case a.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
⊢ ∑ x in
      Finset.filter
        ((fun x => x⁻¹ * σ ∈ MonoidHom.range (Perm.sumCongrHom ιa ιb)) ∘ ↑(Equiv.toEmbedding (Equiv.mulLeft σ)))
        Finset.univ,
      ↑Perm.sign (↑(Equiv.toEmbedding (Equiv.mulLeft σ)) x) •
        domDomCongr (↑(Equiv.toEmbedding (Equiv.mulLeft σ)) x) (domCoprod a b) =
    domCoprod.summand (↑alternatization a) (↑alternatization b) (Quotient.mk'' σ)
[PROOFSTEP]
simp_rw [Equiv.coe_toEmbedding, Equiv.coe_mulLeft, (· ∘ ·), mul_inv_rev, inv_mul_cancel_right, Subgroup.inv_mem_iff,
  MonoidHom.mem_range, Finset.univ_filter_exists, Finset.sum_image (Perm.sumCongrHom_injective.injOn _)]
  -- now we're ready to clean up the RHS, pulling out the summation
[GOAL]
case a.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
⊢ ∑ x : Perm ιa × Perm ιb,
      ↑Perm.sign (σ * ↑(Perm.sumCongrHom ιa ιb) x) • domDomCongr (σ * ↑(Perm.sumCongrHom ιa ιb) x) (domCoprod a b) =
    domCoprod.summand (↑alternatization a) (↑alternatization b) (Quotient.mk'' σ)
[PROOFSTEP]
rw [domCoprod.summand_mk'', MultilinearMap.domCoprod_alternization_coe, ← Finset.sum_product', Finset.univ_product_univ,
  ← MultilinearMap.domDomCongrEquiv_apply, _root_.map_sum, Finset.smul_sum]
[GOAL]
case a.e_f.h
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
⊢ ∑ x : Perm ιa × Perm ιb,
      ↑Perm.sign (σ * ↑(Perm.sumCongrHom ιa ιb) x) • domDomCongr (σ * ↑(Perm.sumCongrHom ιa ιb) x) (domCoprod a b) =
    ∑ x : Perm ιa × Perm ιb,
      ↑Perm.sign σ •
        ↑(domDomCongrEquiv σ)
          (↑Perm.sign x.fst • ↑Perm.sign x.snd • domCoprod (domDomCongr x.fst a) (domDomCongr x.snd b))
[PROOFSTEP]
congr 1
[GOAL]
case a.e_f.h.e_f
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
⊢ (fun x =>
      ↑Perm.sign (σ * ↑(Perm.sumCongrHom ιa ιb) x) • domDomCongr (σ * ↑(Perm.sumCongrHom ιa ιb) x) (domCoprod a b)) =
    fun x =>
    ↑Perm.sign σ •
      ↑(domDomCongrEquiv σ)
        (↑Perm.sign x.fst • ↑Perm.sign x.snd • domCoprod (domDomCongr x.fst a) (domDomCongr x.snd b))
[PROOFSTEP]
ext1 ⟨al, ar⟩
[GOAL]
case a.e_f.h.e_f.h.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
al : Perm ιa
ar : Perm ιb
⊢ ↑Perm.sign (σ * ↑(Perm.sumCongrHom ιa ιb) (al, ar)) •
      domDomCongr (σ * ↑(Perm.sumCongrHom ιa ιb) (al, ar)) (domCoprod a b) =
    ↑Perm.sign σ •
      ↑(domDomCongrEquiv σ)
        (↑Perm.sign (al, ar).fst •
          ↑Perm.sign (al, ar).snd • domCoprod (domDomCongr (al, ar).fst a) (domDomCongr (al, ar).snd b))
[PROOFSTEP]
dsimp only
  -- pull out the pair of smuls on the RHS, by rewriting to `_ →ₗ[ℤ] _` and back
[GOAL]
case a.e_f.h.e_f.h.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
al : Perm ιa
ar : Perm ιb
⊢ ↑Perm.sign (σ * ↑(Perm.sumCongrHom ιa ιb) (al, ar)) •
      domDomCongr (σ * ↑(Perm.sumCongrHom ιa ιb) (al, ar)) (domCoprod a b) =
    ↑Perm.sign σ •
      ↑(domDomCongrEquiv σ) (↑Perm.sign al • ↑Perm.sign ar • domCoprod (domDomCongr al a) (domDomCongr ar b))
[PROOFSTEP]
rw [← AddEquiv.coe_toAddMonoidHom, ← AddMonoidHom.coe_toIntLinearMap, LinearMap.map_smul_of_tower,
  LinearMap.map_smul_of_tower, AddMonoidHom.coe_toIntLinearMap, AddEquiv.coe_toAddMonoidHom,
  MultilinearMap.domDomCongrEquiv_apply]
  -- pick up the pieces
[GOAL]
case a.e_f.h.e_f.h.mk
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : MultilinearMap R' (fun x => Mᵢ) N₁
b : MultilinearMap R' (fun x => Mᵢ) N₂
σ✝ : Quotient (QuotientGroup.leftRel (MonoidHom.range (Perm.sumCongrHom ιa ιb)))
σ : Perm (ιa ⊕ ιb)
al : Perm ιa
ar : Perm ιb
⊢ ↑Perm.sign (σ * ↑(Perm.sumCongrHom ιa ιb) (al, ar)) •
      domDomCongr (σ * ↑(Perm.sumCongrHom ιa ιb) (al, ar)) (domCoprod a b) =
    ↑Perm.sign σ • ↑Perm.sign al • ↑Perm.sign ar • domDomCongr σ (domCoprod (domDomCongr al a) (domDomCongr ar b))
[PROOFSTEP]
rw [MultilinearMap.domDomCongr_mul, Perm.sign_mul, Perm.sumCongrHom_apply,
  MultilinearMap.domCoprod_domDomCongr_sumCongr, Perm.sign_sumCongr, mul_smul, mul_smul]
[GOAL]
R : Type u_1
inst✝²¹ : Semiring R
M : Type u_2
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type u_3
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type u_4
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type u_5
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type u_6
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ιa : Type u_10
ιb : Type u_11
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_12
Mᵢ : Type u_13
N₁ : Type u_14
N₂ : Type u_15
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommGroup N₁
inst✝⁶ : Module R' N₁
inst✝⁵ : AddCommGroup N₂
inst✝⁴ : Module R' N₂
inst✝³ : AddCommMonoid Mᵢ
inst✝² : Module R' Mᵢ
inst✝¹ : DecidableEq ιa
inst✝ : DecidableEq ιb
a : AlternatingMap R' Mᵢ N₁ ιa
b : AlternatingMap R' Mᵢ N₂ ιb
⊢ ↑alternatization (domCoprod ↑a ↑b) =
    (Nat.factorial (Fintype.card ιa) * Nat.factorial (Fintype.card ιb)) • AlternatingMap.domCoprod a b
[PROOFSTEP]
rw [MultilinearMap.domCoprod_alternization, coe_alternatization, coe_alternatization, mul_smul, ←
  AlternatingMap.domCoprod'_apply, ← AlternatingMap.domCoprod'_apply, ← TensorProduct.smul_tmul',
  TensorProduct.tmul_smul, LinearMap.map_smul_of_tower AlternatingMap.domCoprod',
  LinearMap.map_smul_of_tower AlternatingMap.domCoprod']
[GOAL]
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
⊢ f = g
[PROOFSTEP]
classical
refine' AlternatingMap.coe_multilinearMap_injective (Basis.ext_multilinear e fun v => _)
by_cases hi : Function.Injective v
· exact h v hi
· have : ¬Function.Injective fun i => e (v i) := hi.imp Function.Injective.of_comp
  rw [coe_multilinearMap, coe_multilinearMap, f.map_eq_zero_of_not_injective _ this,
    g.map_eq_zero_of_not_injective _ this]
[GOAL]
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
⊢ f = g
[PROOFSTEP]
refine' AlternatingMap.coe_multilinearMap_injective (Basis.ext_multilinear e fun v => _)
[GOAL]
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
v : ι → ι₁
⊢ (↑↑f fun i => ↑e (v i)) = ↑↑g fun i => ↑e (v i)
[PROOFSTEP]
by_cases hi : Function.Injective v
[GOAL]
case pos
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
v : ι → ι₁
hi : Function.Injective v
⊢ (↑↑f fun i => ↑e (v i)) = ↑↑g fun i => ↑e (v i)
[PROOFSTEP]
exact h v hi
[GOAL]
case neg
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
v : ι → ι₁
hi : ¬Function.Injective v
⊢ (↑↑f fun i => ↑e (v i)) = ↑↑g fun i => ↑e (v i)
[PROOFSTEP]
have : ¬Function.Injective fun i => e (v i) := hi.imp Function.Injective.of_comp
[GOAL]
case neg
R : Type u_1
inst✝¹⁶ : Semiring R
M : Type u_2
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
N : Type u_3
inst✝¹³ : AddCommMonoid N
inst✝¹² : Module R N
P : Type u_4
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : Module R P
M' : Type u_5
inst✝⁹ : AddCommGroup M'
inst✝⁸ : Module R M'
N' : Type u_6
inst✝⁷ : AddCommGroup N'
inst✝⁶ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
ι₁ : Type u_10
inst✝⁵ : Finite ι
R' : Type u_11
N₁ : Type u_12
N₂ : Type u_13
inst✝⁴ : CommSemiring R'
inst✝³ : AddCommMonoid N₁
inst✝² : AddCommMonoid N₂
inst✝¹ : Module R' N₁
inst✝ : Module R' N₂
f g : AlternatingMap R' N₁ N₂ ι
e : Basis ι₁ R' N₁
h : ∀ (v : ι → ι₁), Function.Injective v → (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
v : ι → ι₁
hi : ¬Function.Injective v
this : ¬Function.Injective fun i => ↑e (v i)
⊢ (↑↑f fun i => ↑e (v i)) = ↑↑g fun i => ↑e (v i)
[PROOFSTEP]
rw [coe_multilinearMap, coe_multilinearMap, f.map_eq_zero_of_not_injective _ this,
  g.map_eq_zero_of_not_injective _ this]
[GOAL]
R : Type u_1
inst✝¹⁹ : Semiring R
M : Type u_2
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
N : Type u_3
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : Module R N
P : Type u_4
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
M' : Type u_5
inst✝¹² : AddCommGroup M'
inst✝¹¹ : Module R M'
N' : Type u_6
inst✝¹⁰ : AddCommGroup N'
inst✝⁹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
R' : Type u_10
M'' : Type u_11
M₂'' : Type u_12
N'' : Type u_13
N₂'' : Type u_14
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : AddCommMonoid N''
inst✝⁴ : AddCommMonoid N₂''
inst✝³ : Module R' M''
inst✝² : Module R' M₂''
inst✝¹ : Module R' N''
inst✝ : Module R' N₂''
n : ℕ
f : AlternatingMap R' M'' N'' (Fin (Nat.succ n))
m : M''
src✝ : (fun x => MultilinearMap R' (fun i => M'') N'') m := ↑(MultilinearMap.curryLeft ↑f) m
v : Fin n → M''
i j : Fin n
hv : v i = v j
hij : i ≠ j
⊢ Matrix.vecCons m v (Fin.succ i) = Matrix.vecCons m v (Fin.succ j)
[PROOFSTEP]
rwa [Matrix.cons_val_succ, Matrix.cons_val_succ]
[GOAL]
R : Type u_1
inst✝¹⁹ : Semiring R
M : Type u_2
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
N : Type u_3
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : Module R N
P : Type u_4
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
M' : Type u_5
inst✝¹² : AddCommGroup M'
inst✝¹¹ : Module R M'
N' : Type u_6
inst✝¹⁰ : AddCommGroup N'
inst✝⁹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
R' : Type u_10
M'' : Type u_11
M₂'' : Type u_12
N'' : Type u_13
N₂'' : Type u_14
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : AddCommMonoid N''
inst✝⁴ : AddCommMonoid N₂''
inst✝³ : Module R' M''
inst✝² : Module R' M₂''
inst✝¹ : Module R' N''
inst✝ : Module R' N₂''
n : ℕ
f : AlternatingMap R' M'' N'' (Fin (Nat.succ (Nat.succ n)))
m : M''
x : Fin n → M''
⊢ Matrix.vecCons m (Matrix.vecCons m x) 0 = Matrix.vecCons m (Matrix.vecCons m x) 1
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝¹⁹ : Semiring R
M : Type u_2
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
N : Type u_3
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : Module R N
P : Type u_4
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
M' : Type u_5
inst✝¹² : AddCommGroup M'
inst✝¹¹ : Module R M'
N' : Type u_6
inst✝¹⁰ : AddCommGroup N'
inst✝⁹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
R' : Type u_10
M'' : Type u_11
M₂'' : Type u_12
N'' : Type u_13
N₂'' : Type u_14
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : AddCommMonoid N''
inst✝⁴ : AddCommMonoid N₂''
inst✝³ : Module R' M''
inst✝² : Module R' M₂''
inst✝¹ : Module R' N''
inst✝ : Module R' N₂''
n : ℕ
g : M₂'' →ₗ[R'] M''
f : AlternatingMap R' M'' N'' (Fin (Nat.succ n))
m : M₂''
v : Fin n → M₂''
⊢ ∀ (x : Fin (Nat.succ n)),
    ↑((fun x => g) x) (Matrix.vecCons m v x) = Matrix.vecCons (↑g m) (fun i => ↑((fun x => g) i) (v i)) x
[PROOFSTEP]
refine' Fin.cases _ _
[GOAL]
case refine'_1
R : Type u_1
inst✝¹⁹ : Semiring R
M : Type u_2
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
N : Type u_3
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : Module R N
P : Type u_4
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
M' : Type u_5
inst✝¹² : AddCommGroup M'
inst✝¹¹ : Module R M'
N' : Type u_6
inst✝¹⁰ : AddCommGroup N'
inst✝⁹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
R' : Type u_10
M'' : Type u_11
M₂'' : Type u_12
N'' : Type u_13
N₂'' : Type u_14
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : AddCommMonoid N''
inst✝⁴ : AddCommMonoid N₂''
inst✝³ : Module R' M''
inst✝² : Module R' M₂''
inst✝¹ : Module R' N''
inst✝ : Module R' N₂''
n : ℕ
g : M₂'' →ₗ[R'] M''
f : AlternatingMap R' M'' N'' (Fin (Nat.succ n))
m : M₂''
v : Fin n → M₂''
⊢ ↑((fun x => g) 0) (Matrix.vecCons m v 0) = Matrix.vecCons (↑g m) (fun i => ↑((fun x => g) i) (v i)) 0
[PROOFSTEP]
rfl
[GOAL]
case refine'_2
R : Type u_1
inst✝¹⁹ : Semiring R
M : Type u_2
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
N : Type u_3
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : Module R N
P : Type u_4
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
M' : Type u_5
inst✝¹² : AddCommGroup M'
inst✝¹¹ : Module R M'
N' : Type u_6
inst✝¹⁰ : AddCommGroup N'
inst✝⁹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
R' : Type u_10
M'' : Type u_11
M₂'' : Type u_12
N'' : Type u_13
N₂'' : Type u_14
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : AddCommMonoid N''
inst✝⁴ : AddCommMonoid N₂''
inst✝³ : Module R' M''
inst✝² : Module R' M₂''
inst✝¹ : Module R' N''
inst✝ : Module R' N₂''
n : ℕ
g : M₂'' →ₗ[R'] M''
f : AlternatingMap R' M'' N'' (Fin (Nat.succ n))
m : M₂''
v : Fin n → M₂''
⊢ ∀ (i : Fin n),
    ↑((fun x => g) (Fin.succ i)) (Matrix.vecCons m v (Fin.succ i)) =
      Matrix.vecCons (↑g m) (fun i => ↑((fun x => g) i) (v i)) (Fin.succ i)
[PROOFSTEP]
simp
