Theorem: Matrix.det_kroneckerMapBilinear
File: Mathlib/Data/Matrix/Kronecker.lean

tactic: rw [← kroneckerMapBilinear_mul_mul f h_comm, Matrix.mul_one, Matrix.one_mul]
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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 (↑(↑(kroneckerMapBilinear f) A) 1 ⬝ ↑(↑(kroneckerMapBilinear f) 1) B)

tactic: rw [det_mul, ← diagonal_one, ← diagonal_one, kroneckerMapBilinear_apply_apply,
  kroneckerMap_diagonal_right _ fun _ => _, kroneckerMapBilinear_apply_apply,
  kroneckerMap_diagonal_left _ fun _ => _, det_reindex_self]
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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) 1 ⬝ ↑(↑(kroneckerMapBilinear f) 1) B) =
    det (blockDiagonal fun x => map A fun a => ↑(↑f a) 1) * det (blockDiagonal fun x => map B fun b => ↑(↑f 1) b)

tactic: intro
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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 β
⊢ ∀ (x : β), ↑(↑f 0) x = 0

tactic: exact LinearMap.map_zero₂ _ _
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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 β
x✝ : β
⊢ ↑(↑f 0) x✝ = 0

tactic: intro
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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 β
⊢ ∀ (x : α), ↑(↑f x) 0 = 0

tactic: exact map_zero _
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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 β
x✝ : α
⊢ ↑(↑f x✝) 0 = 0

tactic: simp_rw [det_blockDiagonal, Finset.prod_const, Finset.card_univ]
state_before: R : Type u_1
α : Type u_4
α' : Type ?u.61413
β : Type u_5
β' : Type ?u.61419
γ : Type u_6
γ' : Type ?u.61425
l : Type ?u.61428
m : Type u_2
n : Type u_3
p : Type ?u.61437
q : Type ?u.61440
r : Type ?u.61443
l' : Type ?u.61446
m' : Type ?u.61449
n' : Type ?u.61452
p' : Type ?u.61455
inst✝¹⁰ : CommSemiring R
inst✝⁹ : Fintype m
inst✝⁸ : Fintype n
inst✝⁷ : DecidableEq m
inst✝⁶ : DecidableEq n
inst✝⁵ : CommRing α
inst✝⁴ : CommRing β
inst✝³ : CommRing γ
inst✝² : Module R α
inst✝¹ : Module R β
inst✝ : 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 (blockDiagonal fun x => map A fun a => ↑(↑f a) 1) * det (blockDiagonal fun x => map B fun b => ↑(↑f 1) b) =
    det (map A fun a => ↑(↑f a) 1) ^ Fintype.card n * det (map B fun b => ↑(↑f 1) b) ^ Fintype.card m