Theorem: MultilinearMap.domCoprod_alternization
File: Mathlib/LinearAlgebra/Alternating.lean

tactic: apply coe_multilinearMap_injective
state_before: R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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)

tactic: rw [domCoprod_coe, MultilinearMap.alternatization_coe,
  Finset.sum_partition (QuotientGroup.leftRel (Perm.sumCongrHom ιa ιb).range)]
state_before: case a
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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))

tactic: congr 1
state_before: case a
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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) σ

tactic: ext1 σ
state_before: case a.e_f
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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) σ

tactic: refine Quotient.inductionOn' σ fun σ => ?_
state_before: case a.e_f.h
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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) σ

tactic: 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 := σ)]
state_before: case a.e_f.h
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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'' σ)

tactic: rw [← Finset.map_univ_equiv (Equiv.mulLeft σ), Finset.filter_map, Finset.sum_map]
state_before: case a.e_f.h
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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'' σ)

tactic: rw [domCoprod.summand_mk'', MultilinearMap.domCoprod_alternization_coe, ← Finset.sum_product',
  Finset.univ_product_univ, ← MultilinearMap.domDomCongrEquiv_apply, _root_.map_sum,
  Finset.smul_sum]
state_before: case a.e_f.h
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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'' σ)

tactic: congr 1
state_before: case a.e_f.h
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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))

tactic: ext1 ⟨al, ar⟩
state_before: case a.e_f.h.e_f
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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))

tactic: dsimp only
state_before: case a.e_f.h.e_f.h.mk
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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))

tactic: 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]
state_before: case a.e_f.h.e_f.h.mk
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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))

tactic: rw [MultilinearMap.domDomCongr_mul, Perm.sign_mul, Perm.sumCongrHom_apply,
  MultilinearMap.domCoprod_domDomCongr_sumCongr, Perm.sign_sumCongr, mul_smul, mul_smul]
state_before: case a.e_f.h.e_f.h.mk
R : Type ?u.1140652
inst✝²¹ : Semiring R
M : Type ?u.1140658
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
N : Type ?u.1140690
inst✝¹⁸ : AddCommMonoid N
inst✝¹⁷ : Module R N
P : Type ?u.1140720
inst✝¹⁶ : AddCommMonoid P
inst✝¹⁵ : Module R P
M' : Type ?u.1140750
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : Module R M'
N' : Type ?u.1141138
inst✝¹² : AddCommGroup N'
inst✝¹¹ : Module R N'
ι : Type ?u.1141526
ι' : Type ?u.1141529
ι'' : Type ?u.1141532
ιa : Type u_1
ιb : Type u_2
inst✝¹⁰ : Fintype ιa
inst✝⁹ : Fintype ιb
R' : Type u_3
Mᵢ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
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))