Frobenius equations #
This file contains the proof of the Frobenius equations.
noncomputable
def
module.dual.tensor_mul
{n : Type u_1}
{p : Type u_2}
(φ₁ : module.dual ℂ (matrix n n ℂ))
(φ₂ : module.dual ℂ (matrix p p ℂ)) :
module.dual ℂ (tensor_product ℂ (matrix n n ℂ) (matrix p p ℂ))
Equations
- φ₁.tensor_mul φ₂ = ↑(tensor_product.lid ℂ ℂ).comp (tensor_product.map φ₁ φ₂)
theorem
module.dual.tensor_mul_apply
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
(φ₁ : module.dual ℂ (matrix n n ℂ))
(φ₂ : module.dual ℂ (matrix p p ℂ))
(x : matrix n n ℂ)
(y : matrix p p ℂ) :
theorem
module.dual.tensor_mul_apply'
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
(φ₁ : module.dual ℂ (matrix n n ℂ))
(φ₂ : module.dual ℂ (matrix p p ℂ))
(x : tensor_product ℂ (matrix n n ℂ) (matrix p p ℂ)) :
⇑(φ₁.tensor_mul φ₂) x = finset.univ.sum (λ (i : n), finset.univ.sum (λ (j : n), finset.univ.sum (λ (k : p), finset.univ.sum (λ (l : p), ⇑tensor_product.to_kronecker x (i, k) (j, l) * (⇑φ₁ (matrix.std_basis_matrix i j 1) * ⇑φ₂ (matrix.std_basis_matrix k l 1))))))
theorem
module.dual.tensor_mul_apply''
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
(φ₁ : module.dual ℂ (matrix n n ℂ))
(φ₂ : module.dual ℂ (matrix p p ℂ))
(a : matrix (n × p) (n × p) ℂ) :
⇑(linear_map.comp (φ₁.tensor_mul φ₂) matrix.kronecker_to_tensor_product) a = ((matrix.kronecker_map has_mul.mul φ₁.matrix φ₂.matrix).mul a).trace
theorem
module.dual.tensor_mul_matrix
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
(φ₁ : module.dual ℂ (matrix n n ℂ))
(φ₂ : module.dual ℂ (matrix p p ℂ)) :
@[instance]
def
module.dual.is_faithful_pos_map.tensor_mul
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
{φ₁ : module.dual ℂ (matrix n n ℂ)}
{φ₂ : module.dual ℂ (matrix p p ℂ)}
[hφ₁ : fact φ₁.is_faithful_pos_map]
[hφ₂ : fact φ₂.is_faithful_pos_map] :
theorem
matrix.kronecker_to_tensor_product_adjoint
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
{φ : module.dual ℂ (matrix n n ℂ)}
{ψ : module.dual ℂ (matrix p p ℂ)}
[hφ : fact φ.is_faithful_pos_map]
[hψ : fact ψ.is_faithful_pos_map] :
theorem
tensor_product.to_kronecker_adjoint
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p]
{φ : module.dual ℂ (matrix n n ℂ)}
{ψ : module.dual ℂ (matrix p p ℂ)}
[hφ : fact φ.is_faithful_pos_map]
[hψ : fact ψ.is_faithful_pos_map] :
theorem
matrix.kronecker_to_tensor_product_comp_to_kronecker
{n : Type u_1}
{p : Type u_2}
[fintype n]
[fintype p]
[decidable_eq n]
[decidable_eq p] :
theorem
frobenius_equation
{n : Type u_1}
[fintype n]
[decidable_eq n]
{φ : module.dual ℂ (matrix n n ℂ)}
[hφ : fact φ.is_faithful_pos_map] :
(tensor_product.map (linear_map.mul' ℂ (matrix n n ℂ)) 1).comp (↑((tensor_product.assoc ℂ (matrix n n ℂ) (matrix n n ℂ) (matrix n n ℂ)).symm).comp (tensor_product.map 1 (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))))) = (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))).comp (linear_map.mul' ℂ (matrix n n ℂ))
noncomputable
def
matrix_direct_sum_from_to
{k : Type u_3}
[fintype k]
[decidable_eq k]
{s : k → Type u_4}
[Π (i : k), fintype (s i)]
[Π (i : k), decidable_eq (s i)]
(i j : k) :
Equations
theorem
matrix_direct_sum_from_to_same
{k : Type u_3}
[fintype k]
[decidable_eq k]
{s : k → Type u_4}
[Π (i : k), fintype (s i)]
[Π (i : k), decidable_eq (s i)]
(i : k) :
matrix_direct_sum_from_to i i = 1
theorem
linear_map.pi_mul'_apply_include_block'
{k : Type u_3}
[fintype k]
[decidable_eq k]
{s : k → Type u_4}
[Π (i : k), fintype (s i)]
[Π (i : k), decidable_eq (s i)]
{i j : k} :
(linear_map.mul' ℂ (Π (i : k), matrix (s i) (s i) ℂ)).comp (tensor_product.map matrix.include_block matrix.include_block) = ite (i = j) (matrix.include_block.comp ((linear_map.mul' ℂ (matrix (s j) (s j) ℂ)).comp (tensor_product.map (matrix_direct_sum_from_to i j) 1))) 0
noncomputable
def
direct_sum_tensor_matrix
{k : Type u_3}
[fintype k]
[decidable_eq k]
{s : k → Type u_4}
[Π (i : k), fintype (s i)]
[Π (i : k), decidable_eq (s i)] :
Equations
noncomputable
def
direct_sum_tensor_to_kronecker
{k : Type u_3}
[fintype k]
[decidable_eq k]
{s : k → Type u_4}
[Π (i : k), fintype (s i)]
[Π (i : k), decidable_eq (s i)] :
Equations
- direct_sum_tensor_to_kronecker = {to_fun := λ (x : tensor_product ℂ (Π (i : k), matrix (s i) (s i) ℂ) (Π (i : k), matrix (s i) (s i) ℂ)) (i : k × k), ⇑tensor_product.to_kronecker (⇑direct_sum_tensor_matrix x i), map_add' := _, map_smul' := _, inv_fun := λ (x : Π (i : k × k), matrix (s i.fst × s i.snd) (s i.fst × s i.snd) ℂ), ⇑(direct_sum_tensor_matrix.symm) (λ (i : k × k), ⇑matrix.kronecker_to_tensor_product (x i)), left_inv := _, right_inv := _}
theorem
frobenius_equation_direct_sum_aux
{k : Type u_3}
[fintype k]
[decidable_eq k]
{s : k → Type u_4}
[Π (i : k), fintype (s i)]
[Π (i : k), decidable_eq (s i)]
{θ : Π (i : k), module.dual ℂ (matrix (s i) (s i) ℂ)}
[hθ : ∀ (i : k), fact (θ i).is_faithful_pos_map]
(x y : Π (i : k), matrix (s i) (s i) ℂ)
(i j : k) :
⇑((tensor_product.map (linear_map.mul' ℂ (Π (i : k), matrix (s i) (s i) ℂ)) 1).comp (↑((tensor_product.assoc ℂ (Π (i : k), matrix (s i) (s i) ℂ) (Π (i : k), matrix (s i) (s i) ℂ) (Π (i : k), matrix (s i) (s i) ℂ)).symm).comp (tensor_product.map 1 (⇑linear_map.adjoint (linear_map.mul' ℂ (Π (i : k), matrix (s i) (s i) ℂ)))))) (⇑matrix.include_block (x i) ⊗ₜ[ℂ] ⇑matrix.include_block (y j)) = ite (i = j) (⇑((tensor_product.map matrix.include_block matrix.include_block).comp ((⇑linear_map.adjoint (linear_map.mul' ℂ (matrix (s j) (s j) ℂ))).comp (linear_map.mul' ℂ (matrix (s j) (s j) ℂ)))) (x j ⊗ₜ[ℂ] y j)) 0
theorem
frobenius_equation'
{n : Type u_1}
[fintype n]
[decidable_eq n]
{φ : module.dual ℂ (matrix n n ℂ)}
[hφ : fact φ.is_faithful_pos_map] :
(tensor_product.map 1 (linear_map.mul' ℂ (matrix n n ℂ))).comp (↑(tensor_product.assoc ℂ (matrix n n ℂ) (matrix n n ℂ) (matrix n n ℂ)).comp (tensor_product.map (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))) 1)) = (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))).comp (linear_map.mul' ℂ (matrix n n ℂ))
theorem
linear_map.mul'_assoc
{n : Type u_1}
[fintype n]
[decidable_eq n] :
(linear_map.mul' ℂ (matrix n n ℂ)).comp (tensor_product.map (linear_map.mul' ℂ (matrix n n ℂ)) 1) = (linear_map.mul' ℂ (matrix n n ℂ)).comp ((tensor_product.map 1 (linear_map.mul' ℂ (matrix n n ℂ))).comp ↑(tensor_product.assoc ℂ (matrix n n ℂ) (matrix n n ℂ) (matrix n n ℂ)))
theorem
linear_map.mul'_coassoc
{n : Type u_1}
[fintype n]
[decidable_eq n]
{φ : module.dual ℂ (matrix n n ℂ)}
[hφ : fact φ.is_faithful_pos_map] :
(tensor_product.map (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))) 1).comp (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))) = ↑((tensor_product.assoc ℂ (matrix n n ℂ) (matrix n n ℂ) (matrix n n ℂ)).symm).comp ((tensor_product.map 1 (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ)))).comp (⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))))
theorem
linear_map.mul'_comp_unit_map_id_eq_lid
{n : Type u_1}
[fintype n]
[decidable_eq n] :
(linear_map.mul' ℂ (matrix n n ℂ)).comp (tensor_product.map (algebra.linear_map ℂ (matrix n n ℂ)) 1) = ↑(tensor_product.lid ℂ (matrix n n ℂ))
theorem
linear_map.mul'_comp_id_map_unit_assoc_eq_lid
{n : Type u_1}
[fintype n]
[decidable_eq n] :
(linear_map.mul' ℂ (matrix n n ℂ)).comp ((tensor_product.map 1 (algebra.linear_map ℂ (matrix n n ℂ))).comp ↑((tensor_product.comm ℂ (matrix n n ℂ) ℂ).symm)) = ↑(tensor_product.lid ℂ (matrix n n ℂ))
theorem
linear_map.mul'_adjoint_eq'
{n : Type u_1}
[fintype n]
[decidable_eq n]
{φ : module.dual ℂ (matrix n n ℂ)}
[hφ : fact φ.is_faithful_pos_map] :
(tensor_product.map (linear_map.mul' ℂ (matrix n n ℂ)) 1).comp (↑((tensor_product.assoc ℂ (matrix n n ℂ) (matrix n n ℂ) (matrix n n ℂ)).symm).comp ((tensor_product.map 1 ((⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))).comp (algebra.linear_map ℂ (matrix n n ℂ)))).comp (↑((tensor_product.comm ℂ (matrix n n ℂ) ℂ).symm).comp ↑((tensor_product.lid ℂ (matrix n n ℂ)).symm)))) = ⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))
theorem
linear_map.mul'_adjoint_eq''
{n : Type u_1}
[fintype n]
[decidable_eq n]
{φ : module.dual ℂ (matrix n n ℂ)}
[hφ : fact φ.is_faithful_pos_map] :
(tensor_product.map 1 (linear_map.mul' ℂ (matrix n n ℂ))).comp (↑(tensor_product.assoc ℂ (matrix n n ℂ) (matrix n n ℂ) (matrix n n ℂ)).comp ((tensor_product.map ((⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))).comp (algebra.linear_map ℂ (matrix n n ℂ))) 1).comp ↑((tensor_product.lid ℂ (matrix n n ℂ)).symm))) = ⇑linear_map.adjoint (linear_map.mul' ℂ (matrix n n ℂ))