ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Matrix.kroneckerMap_diagonal_left
theorem kroneckerMap_diagonal_left [Zero α] [Zero γ] [DecidableEq l] (f : α → β → γ)
    (hf : ∀ b, f 0 b = 0) (a : l → α) (B : Matrix m n β) :
    kroneckerMap f (diagonal a) B =
      Matrix.reindex (Equiv.prodComm _ _) (Equiv.prodComm _ _)
        (blockDiagonal fun i => B.map fun b => f (a i) b) 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} [Zero α] [Zero γ] [DecidableEq l] (f : α → β → γ) (hf : ∀ (b : β), f 0 b = 0) (a : l → α) (B : Matrix m n β)
Goal: Matrix.kroneckerMap f (Matrix.diagonal a) B =
  (Matrix.reindex (Equiv.prodComm m l) (Equiv.prodComm n l)) (Matrix.blockDiagonal fun i => B.map fun b => f (a i) b)
-- Matrix.kroneckerMap_one_one
@[simp]
theorem kroneckerMap_one_one [Zero α] [Zero β] [Zero γ] [One α] [One β] [One γ] [DecidableEq m]
    [DecidableEq n] (f : α → β → γ) (hf₁ : ∀ b, f 0 b = 0) (hf₂ : ∀ a, f a 0 = 0)
    (hf₃ : f 1 1 = 1) : kroneckerMap f (1 : Matrix m m α) (1 : Matrix n n β) = 1 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {m : Type u_9} {n : Type u_10} [Zero α] [Zero β] [Zero γ] [One α] [One β] [One γ] [DecidableEq m] [DecidableEq n] (f : α → β → γ) (hf₁ : ∀ (b : β), f 0 b = 0) (hf₂ : ∀ (a : α), f a 0 = 0) (hf₃ : f 1 1 = 1)
Goal: Matrix.kroneckerMap f 1 1 = 1
-- Matrix.kroneckerMap_reindex
theorem kroneckerMap_reindex (f : α → β → γ) (el : l ≃ l') (em : m ≃ m') (en : n ≃ n') (ep : p ≃ p')
    (M : Matrix l m α) (N : Matrix n p β) :
    kroneckerMap f (reindex el em M) (reindex en ep N) =
      reindex (el.prodCongr en) (em.prodCongr ep) (kroneckerMap f M N) 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} {l' : Type u_14} {m' : Type u_15} {n' : Type u_16} {p' : Type u_17} (f : α → β → γ) (el : l ≃ l') (em : m ≃ m') (en : n ≃ n') (ep : p ≃ p') (M : Matrix l m α) (N : Matrix n p β)
Goal: Matrix.kroneckerMap f ((Matrix.reindex el em) M) ((Matrix.reindex en ep) N) =
  (Matrix.reindex (el.prodCongr en) (em.prodCongr ep)) (Matrix.kroneckerMap f M N)
-- Matrix.kroneckerMap_reindex_left
theorem kroneckerMap_reindex_left (f : α → β → γ) (el : l ≃ l') (em : m ≃ m') (M : Matrix l m α)
    (N : Matrix n n' β) :
    kroneckerMap f (Matrix.reindex el em M) N =
      reindex (el.prodCongr (Equiv.refl _)) (em.prodCongr (Equiv.refl _)) (kroneckerMap f M N) 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {l' : Type u_14} {m' : Type u_15} {n' : Type u_16} (f : α → β → γ) (el : l ≃ l') (em : m ≃ m') (M : Matrix l m α) (N : Matrix n n' β)
Goal: Matrix.kroneckerMap f ((Matrix.reindex el em) M) N =
  (Matrix.reindex (el.prodCongr (Equiv.refl n)) (em.prodCongr (Equiv.refl n'))) (Matrix.kroneckerMap f M N)
-- Matrix.kroneckerMap_reindex_right
theorem kroneckerMap_reindex_right (f : α → β → γ) (em : m ≃ m') (en : n ≃ n') (M : Matrix l l' α)
    (N : Matrix m n β) :
    kroneckerMap f M (reindex em en N) =
      reindex ((Equiv.refl _).prodCongr em) ((Equiv.refl _).prodCongr en) (kroneckerMap f M N) 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {l' : Type u_14} {m' : Type u_15} {n' : Type u_16} (f : α → β → γ) (em : m ≃ m') (en : n ≃ n') (M : Matrix l l' α) (N : Matrix m n β)
Goal: Matrix.kroneckerMap f M ((Matrix.reindex em en) N) =
  (Matrix.reindex ((Equiv.refl l).prodCongr em) ((Equiv.refl l').prodCongr en)) (Matrix.kroneckerMap f M N)
-- Matrix.kroneckerMap_assoc
theorem kroneckerMap_assoc {δ ξ ω ω' : Type*} (f : α → β → γ) (g : γ → δ → ω) (f' : α → ξ → ω')
    (g' : β → δ → ξ) (A : Matrix l m α) (B : Matrix n p β) (D : Matrix q r δ) (φ : ω ≃ ω')
    (hφ : ∀ a b d, φ (g (f a b) d) = f' a (g' b d)) :
    (reindex (Equiv.prodAssoc l n q) (Equiv.prodAssoc m p r)).trans (Equiv.mapMatrix φ)
        (kroneckerMap g (kroneckerMap f A B) D) =
      kroneckerMap f' A (kroneckerMap g' B D) 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} {q : Type u_12} {r : Type u_13} {δ : Type u_18} {ξ : Type u_19} {ω : Type u_20} {ω' : Type u_21} (f : α → β → γ) (g : γ → δ → ω) (f' : α → ξ → ω') (g' : β → δ → ξ) (A : Matrix l m α) (B : Matrix n p β) (D : Matrix q r δ) (φ : ω ≃ ω') (hφ : ∀ (a : α) (b : β) (d : δ), φ (g (f a b) d) = f' a (g' b d))
Goal: ((Matrix.reindex (Equiv.prodAssoc l n q) (Equiv.prodAssoc m p r)).trans φ.mapMatrix)
    (Matrix.kroneckerMap g (Matrix.kroneckerMap f A B) D) =
  Matrix.kroneckerMap f' A (Matrix.kroneckerMap g' B D)
-- Matrix.kroneckerMap_assoc₁
theorem kroneckerMap_assoc₁ {δ ξ ω : Type*} (f : α → β → γ) (g : γ → δ → ω) (f' : α → ξ → ω)
    (g' : β → δ → ξ) (A : Matrix l m α) (B : Matrix n p β) (D : Matrix q r δ)
    (h : ∀ a b d, g (f a b) d = f' a (g' b d)) :
    reindex (Equiv.prodAssoc l n q) (Equiv.prodAssoc m p r)
        (kroneckerMap g (kroneckerMap f A B) D) =
      kroneckerMap f' A (kroneckerMap g' B D) 
Arguments: {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} {q : Type u_12} {r : Type u_13} {δ : Type u_18} {ξ : Type u_19} {ω : Type u_20} (f : α → β → γ) (g : γ → δ → ω) (f' : α → ξ → ω) (g' : β → δ → ξ) (A : Matrix l m α) (B : Matrix n p β) (D : Matrix q r δ) (h : ∀ (a : α) (b : β) (d : δ), g (f a b) d = f' a (g' b d))
Goal: (Matrix.reindex (Equiv.prodAssoc l n q) (Equiv.prodAssoc m p r)) (Matrix.kroneckerMap g (Matrix.kroneckerMap f A B) D) =
  Matrix.kroneckerMap f' A (Matrix.kroneckerMap g' B D)
-- Matrix.kroneckerMapBilinear_apply_apply
@[simps!]
def kroneckerMapBilinear [CommSemiring R] [AddCommMonoid α] [AddCommMonoid β] [AddCommMonoid γ]
    [Module R α] [Module R β] [Module R γ] (f : α →ₗ[R] β →ₗ[R] γ) :
    Matrix l m α →ₗ[R] Matrix n p β →ₗ[R] Matrix (l × n) (m × p) γ 
Arguments: {R : Type u_1} {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [AddCommMonoid β] [AddCommMonoid γ] [Module R α] [Module R β] [Module R γ] (f : α →ₗ[R] β →ₗ[R] γ)
Goal: ∀ (m_1 : Matrix l m α) (B : Matrix n p β),
  ((Matrix.kroneckerMapBilinear f) m_1) B = Matrix.kroneckerMap (fun r s => (f r) s) m_1 B
-- Matrix.kroneckerMapBilinear_mul_mul
theorem kroneckerMapBilinear_mul_mul [CommSemiring R] [Fintype m] [Fintype m']
    [NonUnitalNonAssocSemiring α] [NonUnitalNonAssocSemiring β] [NonUnitalNonAssocSemiring γ]
    [Module R α] [Module R β] [Module R γ] (f : α →ₗ[R] β →ₗ[R] γ)
    (h_comm : ∀ a b a' b', f (a * b) (a' * b') = f a a' * f b b') (A : Matrix l m α)
    (B : Matrix m n α) (A' : Matrix l' m' β) (B' : Matrix m' n' β) :
    kroneckerMapBilinear f (A * B) (A' * B') =
      kroneckerMapBilinear f A A' * kroneckerMapBilinear f B B' 
Arguments: {R : Type u_1} {α : Type u_2} {β : Type u_4} {γ : Type u_6} {l : Type u_8} {m : Type u_9} {n : Type u_10} {l' : Type u_14} {m' : Type u_15} {n' : Type u_16} [CommSemiring R] [Fintype m] [Fintype m'] [NonUnitalNonAssocSemiring α] [NonUnitalNonAssocSemiring β] [NonUnitalNonAssocSemiring γ] [Module R α] [Module R β] [Module R γ] (f : α →ₗ[R] β →ₗ[R] γ) (h_comm : ∀ (a b : α) (a' b' : β), (f (a * b)) (a' * b') = (f a) a' * (f b) b') (A : Matrix l m α) (B : Matrix m n α) (A' : Matrix l' m' β) (B' : Matrix m' n' β)
Goal: ((Matrix.kroneckerMapBilinear f) (A * B)) (A' * B') =
  ((Matrix.kroneckerMapBilinear f) A) A' * ((Matrix.kroneckerMapBilinear f) B) B'
-- Matrix.trace_kroneckerMapBilinear
theorem trace_kroneckerMapBilinear [CommSemiring R] [Fintype m] [Fintype n] [AddCommMonoid α]
    [AddCommMonoid β] [AddCommMonoid γ] [Module R α] [Module R β] [Module R γ]
    (f : α →ₗ[R] β →ₗ[R] γ) (A : Matrix m m α) (B : Matrix n n β) :
    trace (kroneckerMapBilinear f A B) = f (trace A) (trace B) 
Arguments: {R : Type u_1} {α : Type u_2} {β : Type u_4} {γ : Type u_6} {m : Type u_9} {n : Type u_10} [CommSemiring R] [Fintype m] [Fintype n] [AddCommMonoid α] [AddCommMonoid β] [AddCommMonoid γ] [Module R α] [Module R β] [Module R γ] (f : α →ₗ[R] β →ₗ[R] γ) (A : Matrix m m α) (B : Matrix n n β)
Goal: (((Matrix.kroneckerMapBilinear f) A) B).trace = (f A.trace) B.trace
-- Matrix.det_kroneckerMapBilinear
theorem det_kroneckerMapBilinear [CommSemiring R] [Fintype m] [Fintype n] [DecidableEq m]
    [DecidableEq n] [CommRing α] [CommRing β] [CommRing γ] [Module R α] [Module R β] [Module R γ]
    (f : α →ₗ[R] β →ₗ[R] γ) (h_comm : ∀ a b a' b', f (a * b) (a' * b') = f a a' * f b b')
    (A : Matrix m m α) (B : Matrix n n β) :
    det (kroneckerMapBilinear f A B) =
      det (A.map fun a => f a 1) ^ Fintype.card n * det (B.map fun b => f 1 b) ^ Fintype.card m 
Arguments: {R : Type u_1} {α : Type u_2} {β : Type u_4} {γ : Type u_6} {m : Type u_9} {n : Type u_10} [CommSemiring R] [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] [CommRing α] [CommRing β] [CommRing γ] [Module R α] [Module R β] [Module R γ] (f : α →ₗ[R] β →ₗ[R] γ) (h_comm : ∀ (a b : α) (a' b' : β), (f (a * b)) (a' * b') = (f a) a' * (f b) b') (A : Matrix m m α) (B : Matrix n n β)
Goal: (((Matrix.kroneckerMapBilinear f) A) B).det =
  (A.map fun a => (f a) 1).det ^ Fintype.card n * (B.map fun b => (f 1) b).det ^ Fintype.card m
-- Matrix.kronecker_apply
@[simp]
theorem kronecker_apply [Mul α] (A : Matrix l m α) (B : Matrix n p α) (i₁ i₂ j₁ j₂) :
    (A ⊗ₖ B) (i₁, i₂) (j₁, j₂) = A i₁ j₁ * B i₂ j₂ 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [Mul α] (A : Matrix l m α) (B : Matrix n p α) (i₁ : l) (i₂ : n) (j₁ : m) (j₂ : p)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A B (i₁, i₂) (j₁, j₂) = A i₁ j₁ * B i₂ j₂
-- Matrix.zero_kronecker
theorem zero_kronecker [MulZeroClass α] (B : Matrix n p α) : (0 : Matrix l m α) ⊗ₖ B = 0 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [MulZeroClass α] (B : Matrix n p α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) 0 B = 0
-- Matrix.kronecker_zero
theorem kronecker_zero [MulZeroClass α] (A : Matrix l m α) : A ⊗ₖ (0 : Matrix n p α) = 0 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [MulZeroClass α] (A : Matrix l m α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A 0 = 0
-- Matrix.add_kronecker
theorem add_kronecker [Distrib α] (A₁ A₂ : Matrix l m α) (B : Matrix n p α) :
    (A₁ + A₂) ⊗ₖ B = A₁ ⊗ₖ B + A₂ ⊗ₖ B 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [Distrib α] (A₁ A₂ : Matrix l m α) (B : Matrix n p α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (A₁ + A₂) B =
  Matrix.kroneckerMap (fun x x_1 => x * x_1) A₁ B + Matrix.kroneckerMap (fun x x_1 => x * x_1) A₂ B
-- Matrix.kronecker_add
theorem kronecker_add [Distrib α] (A : Matrix l m α) (B₁ B₂ : Matrix n p α) :
    A ⊗ₖ (B₁ + B₂) = A ⊗ₖ B₁ + A ⊗ₖ B₂ 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [Distrib α] (A : Matrix l m α) (B₁ B₂ : Matrix n p α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A (B₁ + B₂) =
  Matrix.kroneckerMap (fun x x_1 => x * x_1) A B₁ + Matrix.kroneckerMap (fun x x_1 => x * x_1) A B₂
-- Matrix.smul_kronecker
theorem smul_kronecker [Monoid R] [Monoid α] [MulAction R α] [IsScalarTower R α α] (r : R)
    (A : Matrix l m α) (B : Matrix n p α) : (r • A) ⊗ₖ B = r • A ⊗ₖ B 
Arguments: {R : Type u_1} {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [Monoid R] [Monoid α] [MulAction R α] [IsScalarTower R α α] (r : R) (A : Matrix l m α) (B : Matrix n p α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (r • A) B = r • Matrix.kroneckerMap (fun x x_1 => x * x_1) A B
-- Matrix.kronecker_smul
theorem kronecker_smul [Monoid R] [Monoid α] [MulAction R α] [SMulCommClass R α α] (r : R)
    (A : Matrix l m α) (B : Matrix n p α) : A ⊗ₖ (r • B) = r • A ⊗ₖ B 
Arguments: {R : Type u_1} {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [Monoid R] [Monoid α] [MulAction R α] [SMulCommClass R α α] (r : R) (A : Matrix l m α) (B : Matrix n p α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A (r • B) = r • Matrix.kroneckerMap (fun x x_1 => x * x_1) A B
-- Matrix.diagonal_kronecker_diagonal
theorem diagonal_kronecker_diagonal [MulZeroClass α] [DecidableEq m] [DecidableEq n] (a : m → α)
    (b : n → α) : diagonal a ⊗ₖ diagonal b = diagonal fun mn => a mn.1 * b mn.2 
Arguments: {α : Type u_2} {m : Type u_9} {n : Type u_10} [MulZeroClass α] [DecidableEq m] [DecidableEq n] (a : m → α) (b : n → α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (Matrix.diagonal a) (Matrix.diagonal b) =
  Matrix.diagonal fun mn => a mn.1 * b mn.2
-- Matrix.kronecker_diagonal
theorem kronecker_diagonal [MulZeroClass α] [DecidableEq n] (A : Matrix l m α) (b : n → α) :
    A ⊗ₖ diagonal b = blockDiagonal fun i => A <• b i 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [MulZeroClass α] [DecidableEq n] (A : Matrix l m α) (b : n → α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A (Matrix.diagonal b) =
  Matrix.blockDiagonal fun i => MulOpposite.op (b i) • A
-- Matrix.diagonal_kronecker
theorem diagonal_kronecker [MulZeroClass α] [DecidableEq l] (a : l → α) (B : Matrix m n α) :
    diagonal a ⊗ₖ B =
      Matrix.reindex (Equiv.prodComm _ _) (Equiv.prodComm _ _) (blockDiagonal fun i => a i • B) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [MulZeroClass α] [DecidableEq l] (a : l → α) (B : Matrix m n α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (Matrix.diagonal a) B =
  (Matrix.reindex (Equiv.prodComm m l) (Equiv.prodComm n l)) (Matrix.blockDiagonal fun i => a i • B)
-- Matrix.natCast_kronecker_natCast
@[simp]
theorem natCast_kronecker_natCast [NonAssocSemiring α] [DecidableEq m] [DecidableEq n] (a b : ℕ) :
    (a : Matrix m m α) ⊗ₖ (b : Matrix n n α) = ↑(a * b) 
Arguments: {α : Type u_2} {m : Type u_9} {n : Type u_10} [NonAssocSemiring α] [DecidableEq m] [DecidableEq n] (a b : ℕ)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) ↑a ↑b = ↑(a * b)
-- Matrix.kronecker_natCast
theorem kronecker_natCast [NonAssocSemiring α] [DecidableEq n] (A : Matrix l m α) (b : ℕ) :
    A ⊗ₖ (b : Matrix n n α) = blockDiagonal fun _ => b • A 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [NonAssocSemiring α] [DecidableEq n] (A : Matrix l m α) (b : ℕ)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A ↑b = Matrix.blockDiagonal fun x => b • A
-- Matrix.natCast_kronecker
theorem natCast_kronecker [NonAssocSemiring α] [DecidableEq l] (a : ℕ) (B : Matrix m n α) :
    (a : Matrix l l α) ⊗ₖ B =
      Matrix.reindex (Equiv.prodComm _ _) (Equiv.prodComm _ _) (blockDiagonal fun _ => a • B) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [NonAssocSemiring α] [DecidableEq l] (a : ℕ) (B : Matrix m n α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (↑a) B =
  (Matrix.reindex (Equiv.prodComm m l) (Equiv.prodComm n l)) (Matrix.blockDiagonal fun x => a • B)
-- Matrix.kronecker_ofNat
theorem kronecker_ofNat [Semiring α] [DecidableEq n] (A : Matrix l m α) (b : ℕ) [b.AtLeastTwo] :
    A ⊗ₖ (no_index (OfNat.ofNat b) : Matrix n n α) =
      blockDiagonal fun _ => A <• (OfNat.ofNat b : α) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [Semiring α] [DecidableEq n] (A : Matrix l m α) (b : ℕ) [b.AtLeastTwo]
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A (OfNat.ofNat b) =
  Matrix.blockDiagonal fun x => MulOpposite.op (OfNat.ofNat b) • A
-- Matrix.ofNat_kronecker
theorem ofNat_kronecker [Semiring α] [DecidableEq l] (a : ℕ) [a.AtLeastTwo] (B : Matrix m n α) :
    (no_index (OfNat.ofNat a) : Matrix l l α) ⊗ₖ B =
      Matrix.reindex (.prodComm _ _) (.prodComm _ _)
        (blockDiagonal fun _ => (OfNat.ofNat a : α) • B) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [Semiring α] [DecidableEq l] (a : ℕ) [a.AtLeastTwo] (B : Matrix m n α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (OfNat.ofNat a) B =
  (Matrix.reindex (Equiv.prodComm m l) (Equiv.prodComm n l)) (Matrix.blockDiagonal fun x => OfNat.ofNat a • B)
-- Matrix.one_kronecker_one
theorem one_kronecker_one [MulZeroOneClass α] [DecidableEq m] [DecidableEq n] :
    (1 : Matrix m m α) ⊗ₖ (1 : Matrix n n α) = 1 
Arguments: {α : Type u_2} {m : Type u_9} {n : Type u_10} [MulZeroOneClass α] [DecidableEq m] [DecidableEq n]
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) 1 1 = 1
-- Matrix.kronecker_one
theorem kronecker_one [MulZeroOneClass α] [DecidableEq n] (A : Matrix l m α) :
    A ⊗ₖ (1 : Matrix n n α) = blockDiagonal fun _ => A 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [MulZeroOneClass α] [DecidableEq n] (A : Matrix l m α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) A 1 = Matrix.blockDiagonal fun x => A
-- Matrix.one_kronecker
theorem one_kronecker [MulZeroOneClass α] [DecidableEq l] (B : Matrix m n α) :
    (1 : Matrix l l α) ⊗ₖ B =
      Matrix.reindex (Equiv.prodComm _ _) (Equiv.prodComm _ _) (blockDiagonal fun _ => B) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} [MulZeroOneClass α] [DecidableEq l] (B : Matrix m n α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) 1 B =
  (Matrix.reindex (Equiv.prodComm m l) (Equiv.prodComm n l)) (Matrix.blockDiagonal fun x => B)
-- Matrix.mul_kronecker_mul
theorem mul_kronecker_mul [Fintype m] [Fintype m'] [CommSemiring α] (A : Matrix l m α)
    (B : Matrix m n α) (A' : Matrix l' m' α) (B' : Matrix m' n' α) :
    (A * B) ⊗ₖ (A' * B') = A ⊗ₖ A' * B ⊗ₖ B' 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {l' : Type u_14} {m' : Type u_15} {n' : Type u_16} [Fintype m] [Fintype m'] [CommSemiring α] (A : Matrix l m α) (B : Matrix m n α) (A' : Matrix l' m' α) (B' : Matrix m' n' α)
Goal: Matrix.kroneckerMap (fun x x_1 => x * x_1) (A * B) (A' * B') =
  Matrix.kroneckerMap (fun x x_1 => x * x_1) A A' * Matrix.kroneckerMap (fun x x_1 => x * x_1) B B'
-- Matrix.kronecker_assoc
theorem kronecker_assoc [Semigroup α] (A : Matrix l m α) (B : Matrix n p α) (C : Matrix q r α) :
    reindex (Equiv.prodAssoc l n q) (Equiv.prodAssoc m p r) (A ⊗ₖ B ⊗ₖ C) = A ⊗ₖ (B ⊗ₖ C) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} {q : Type u_12} {r : Type u_13} [Semigroup α] (A : Matrix l m α) (B : Matrix n p α) (C : Matrix q r α)
Goal: (Matrix.reindex (Equiv.prodAssoc l n q) (Equiv.prodAssoc m p r))
    (Matrix.kroneckerMap (fun x x_1 => x * x_1) (Matrix.kroneckerMap (fun x x_1 => x * x_1) A B) C) =
  Matrix.kroneckerMap (fun x x_1 => x * x_1) A (Matrix.kroneckerMap (fun x x_1 => x * x_1) B C)
-- Matrix.kronecker_assoc'
@[simp]
theorem kronecker_assoc' [Semigroup α] (A : Matrix l m α) (B : Matrix n p α) (C : Matrix q r α) :
    submatrix (A ⊗ₖ B ⊗ₖ C) (Equiv.prodAssoc l n q).symm (Equiv.prodAssoc m p r).symm =
    A ⊗ₖ (B ⊗ₖ C) 
Arguments: {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} {q : Type u_12} {r : Type u_13} [Semigroup α] (A : Matrix l m α) (B : Matrix n p α) (C : Matrix q r α)
Goal: (Matrix.kroneckerMap (fun x x_1 => x * x_1) (Matrix.kroneckerMap (fun x x_1 => x * x_1) A B) C).submatrix
    ⇑(Equiv.prodAssoc l n q).symm ⇑(Equiv.prodAssoc m p r).symm =
  Matrix.kroneckerMap (fun x x_1 => x * x_1) A (Matrix.kroneckerMap (fun x x_1 => x * x_1) B C)
-- Matrix.trace_kronecker
theorem trace_kronecker [Fintype m] [Fintype n] [Semiring α] (A : Matrix m m α) (B : Matrix n n α) :
    trace (A ⊗ₖ B) = trace A * trace B 
Arguments: {α : Type u_2} {m : Type u_9} {n : Type u_10} [Fintype m] [Fintype n] [Semiring α] (A : Matrix m m α) (B : Matrix n n α)
Goal: (Matrix.kroneckerMap (fun x x_1 => x * x_1) A B).trace = A.trace * B.trace
-- Matrix.det_kronecker
theorem det_kronecker [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] [CommRing R]
    (A : Matrix m m R) (B : Matrix n n R) :
    det (A ⊗ₖ B) = det A ^ Fintype.card n * det B ^ Fintype.card m 
Arguments: {R : Type u_1} {m : Type u_9} {n : Type u_10} [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] [CommRing R] (A : Matrix m m R) (B : Matrix n n R)
Goal: (Matrix.kroneckerMap (fun x x_1 => x * x_1) A B).det = A.det ^ Fintype.card n * B.det ^ Fintype.card m
-- Matrix.inv_kronecker
theorem inv_kronecker [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] [CommRing R]
    (A : Matrix m m R) (B : Matrix n n R) : (A ⊗ₖ B)⁻¹ = A⁻¹ ⊗ₖ B⁻¹ 
Arguments: {R : Type u_1} {m : Type u_9} {n : Type u_10} [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] [CommRing R] (A : Matrix m m R) (B : Matrix n n R)
Goal: (Matrix.kroneckerMap (fun x x_1 => x * x_1) A B)⁻¹ = Matrix.kroneckerMap (fun x x_1 => x * x_1) A⁻¹ B⁻¹
-- Matrix.kroneckerTMul_apply
@[simp]
theorem kroneckerTMul_apply (A : Matrix l m α) (B : Matrix n p β) (i₁ i₂ j₁ j₂) :
    (A ⊗ₖₜ B) (i₁, i₂) (j₁, j₂) = A i₁ j₁ ⊗ₜ[R] B i₂ j₂ 
Arguments: (R : Type u_1) {α : Type u_2} {β : Type u_4} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [AddCommMonoid β] [Module R α] [Module R β] (A : Matrix l m α) (B : Matrix n p β) (i₁ : l) (i₂ : n) (j₁ : m) (j₂ : p)
Goal: Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A B (i₁, i₂) (j₁, j₂) = A i₁ j₁ ⊗ₜ[R] B i₂ j₂
-- Matrix.zero_kroneckerTMul
theorem zero_kroneckerTMul (B : Matrix n p β) : (0 : Matrix l m α) ⊗ₖₜ[R] B = 0 
Arguments: (R : Type u_1) {α : Type u_2} {β : Type u_4} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [AddCommMonoid β] [Module R α] [Module R β] (B : Matrix n p β)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) 0 B = 0
-- Matrix.kroneckerTMul_zero
theorem kroneckerTMul_zero (A : Matrix l m α) : A ⊗ₖₜ[R] (0 : Matrix n p β) = 0 
Arguments: (R : Type u_1) {α : Type u_2} {β : Type u_4} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [AddCommMonoid β] [Module R α] [Module R β] (A : Matrix l m α)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) A 0 = 0
-- Matrix.add_kroneckerTMul
theorem add_kroneckerTMul (A₁ A₂ : Matrix l m α) (B : Matrix n p α) :
    (A₁ + A₂) ⊗ₖₜ[R] B = A₁ ⊗ₖₜ B + A₂ ⊗ₖₜ B 
Arguments: (R : Type u_1) {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [Module R α] (A₁ A₂ : Matrix l m α) (B : Matrix n p α)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) (A₁ + A₂) B =
  Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A₁ B + Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A₂ B
-- Matrix.kroneckerTMul_add
theorem kroneckerTMul_add (A : Matrix l m α) (B₁ B₂ : Matrix n p α) :
    A ⊗ₖₜ[R] (B₁ + B₂) = A ⊗ₖₜ B₁ + A ⊗ₖₜ B₂ 
Arguments: (R : Type u_1) {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [Module R α] (A : Matrix l m α) (B₁ B₂ : Matrix n p α)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) A (B₁ + B₂) =
  Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A B₁ + Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A B₂
-- Matrix.smul_kroneckerTMul
theorem smul_kroneckerTMul (r : R) (A : Matrix l m α) (B : Matrix n p α) :
    (r • A) ⊗ₖₜ[R] B = r • A ⊗ₖₜ B 
Arguments: (R : Type u_1) {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [Module R α] (r : R) (A : Matrix l m α) (B : Matrix n p α)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) (r • A) B = r • Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A B
-- Matrix.kroneckerTMul_smul
theorem kroneckerTMul_smul (r : R) (A : Matrix l m α) (B : Matrix n p α) :
    A ⊗ₖₜ[R] (r • B) = r • A ⊗ₖₜ B 
Arguments: (R : Type u_1) {α : Type u_2} {l : Type u_8} {m : Type u_9} {n : Type u_10} {p : Type u_11} [CommSemiring R] [AddCommMonoid α] [Module R α] (r : R) (A : Matrix l m α) (B : Matrix n p α)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) A (r • B) = r • Matrix.kroneckerMap (fun x x_1 => x ⊗ₜ[R] x_1) A B
-- Matrix.diagonal_kroneckerTMul_diagonal
theorem diagonal_kroneckerTMul_diagonal [DecidableEq m] [DecidableEq n] (a : m → α) (b : n → α) :
    diagonal a ⊗ₖₜ[R] diagonal b = diagonal fun mn => a mn.1 ⊗ₜ b mn.2 
Arguments: (R : Type u_1) {α : Type u_2} {m : Type u_9} {n : Type u_10} [CommSemiring R] [AddCommMonoid α] [Module R α] [DecidableEq m] [DecidableEq n] (a : m → α) (b : n → α)
Goal: Matrix.kroneckerMap (TensorProduct.tmul R) (Matrix.diagonal a) (Matrix.diagonal b) =
  Matrix.diagonal fun mn => a mn.1 ⊗ₜ[R] b mn.2