Physlib Documentation

QuantumInfo.ForMathlib.HermitianMat.Basic

def HermitianMat (n : Type u_1) (α : Type u_2) [AddGroup α] [StarAddMonoid α] :
Type (max u_1 u_2)

The type of Hermitian matrices, as a Subtype. Equivalent to a Matrix n n α bundled with the fact that Matrix.IsHermitian.

Equations
Instances For
    theorem HermitianMat.eq_IsHermitian {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] :
    def HermitianMat.mat {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] :
    HermitianMat n αMatrix n n α
    Equations
    Instances For
      @[simp]
      theorem HermitianMat.val_eq_coe {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (A : HermitianMat n α) :
      A = A
      @[simp]
      theorem HermitianMat.mat_mk {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (x : Matrix n n α) (h : x selfAdjoint (Matrix n n α)) :
      x, h = x
      @[simp]
      theorem HermitianMat.mk_mat {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] {A : HermitianMat n α} (h : (↑A).IsHermitian) :
      A, h = A
      theorem HermitianMat.H {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (A : HermitianMat n α) :

      Alias for HermitianMat.property or HermitianMat.2, this gets the fact that the value is actually IsHermitian.

      theorem HermitianMat.ext {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] {A B : HermitianMat n α} :
      A = BA = B
      theorem HermitianMat.ext_iff {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] {A B : HermitianMat n α} :
      A = B A = B
      instance HermitianMat.instFun {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] :
      FunLike (HermitianMat n α) n (nα)
      Equations
      @[simp]
      theorem HermitianMat.mat_apply {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] {A : HermitianMat n α} {i j : n} :
      A i j = A i j
      @[simp]
      theorem HermitianMat.conjTranspose_mat {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (A : HermitianMat n α) :
      (↑A).conjTranspose = A
      instance HermitianMat.instUniqueOfIsEmpty {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] [IsEmpty n] :
      Equations
      @[simp]
      theorem HermitianMat.mat_zero {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] :
      0 = 0
      @[simp]
      theorem HermitianMat.mk_zero {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (h : Matrix.IsHermitian 0) :
      0, h = 0
      @[simp]
      theorem HermitianMat.zero_apply {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] (i j : n) :
      0 i j = 0
      @[simp]
      theorem HermitianMat.mat_add {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (A B : HermitianMat n α) :
      ↑(A + B) = A + B
      @[simp]
      theorem HermitianMat.mat_sub {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (A B : HermitianMat n α) :
      ↑(A - B) = A - B
      @[simp]
      theorem HermitianMat.mat_neg {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] (A : HermitianMat n α) :
      ↑(-A) = -A
      instance HermitianMat.instSMul {α : Type u_1} {R : Type u_2} {n : Type u_5} [Star R] [TrivialStar R] [AddGroup α] [StarAddMonoid α] [SMul R α] [StarModule R α] :
      Equations
      @[simp]
      theorem HermitianMat.mat_smul {α : Type u_1} {R : Type u_2} {n : Type u_5} [Star R] [TrivialStar R] [AddGroup α] [StarAddMonoid α] [SMul R α] [StarModule R α] (c : R) (A : HermitianMat n α) :
      ↑(c A) = c A
      @[simp]
      theorem HermitianMat.smul_apply {α : Type u_1} {R : Type u_2} {n : Type u_5} [Star R] [TrivialStar R] [AddGroup α] [StarAddMonoid α] [SMul R α] [StarModule R α] (c : R) (A : HermitianMat n α) (i j : n) :
      (c A) i j = c A i j
      theorem HermitianMat.continuousOn_iff_coe {α : Type u_1} {n : Type u_5} [AddGroup α] [StarAddMonoid α] [TopologicalSpace α] {X : Type u_6} [TopologicalSpace X] {s : Set X} (f : XHermitianMat n α) :
      ContinuousOn f s ContinuousOn (fun (x : X) => (f x)) s
      instance HermitianMat.instT3Space {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] :
      @[simp]
      theorem HermitianMat.mat_finset_sum {α : Type u_1} {n : Type u_5} [AddCommGroup α] [StarAddMonoid α] {ι : Type u_6} (f : ιHermitianMat n α) (s : Finset ι) :
      (∑ is, f i) = is, (f i)
      instance HermitianMat.instModule {α : Type u_1} {R : Type u_2} {n : Type u_5} [Star R] [TrivialStar R] [AddCommGroup α] [StarAddMonoid α] [Semiring R] [Module R α] [StarModule R α] :
      Equations
      def HermitianMat.matₗ {α : Type u_1} {R : Type u_2} {n : Type u_5} [Star R] [TrivialStar R] [AddCommGroup α] [StarAddMonoid α] [Semiring R] [Module R α] [StarModule R α] [TopologicalSpace α] :

      The projection from HermitianMat to Matrix, as a continuous linear map.

      Equations
      Instances For
        @[simp]
        theorem HermitianMat.matₗ_apply {α : Type u_1} {R : Type u_2} {n : Type u_5} [Star R] [TrivialStar R] [AddCommGroup α] [StarAddMonoid α] [Semiring R] [Module R α] [StarModule R α] [TopologicalSpace α] (a✝ : HermitianMat n α) :
        matₗ a✝ = a✝
        instance HermitianMat.instOne {α : Type u_1} {n : Type u_5} [NonAssocRing α] [StarRing α] [DecidableEq n] :
        Equations
        @[simp]
        theorem HermitianMat.mat_one {α : Type u_1} {n : Type u_5} [NonAssocRing α] [StarRing α] [DecidableEq n] :
        1 = 1
        @[simp]
        theorem HermitianMat.mk_one {α : Type u_1} {n : Type u_5} [NonAssocRing α] [StarRing α] [DecidableEq n] (h : Matrix.IsHermitian 1) :
        1, h = 1
        @[simp]
        theorem HermitianMat.one_apply {α : Type u_1} {n : Type u_5} [NonAssocRing α] [StarRing α] [DecidableEq n] (i j : n) :
        1 i j = 1 i j
        noncomputable instance HermitianMat.instAddCommMonoidWithOne {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [DecidableEq n] :
        Equations
        • One or more equations did not get rendered due to their size.
        instance HermitianMat.instNeZeroOfNatOfNonempty {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [DecidableEq n] [i : Nonempty n] :
        noncomputable instance HermitianMat.instInv {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] :
        Equations
        @[simp]
        theorem HermitianMat.mat_inv {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        A⁻¹ = (↑A)⁻¹
        @[simp]
        theorem HermitianMat.zero_inv {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] :
        0⁻¹ = 0
        @[simp]
        theorem HermitianMat.one_inv {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] :
        1⁻¹ = 1
        noncomputable instance HermitianMat.instPow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] :
        Equations
        @[simp]
        theorem HermitianMat.mat_pow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) (n : ) :
        ↑(A ^ n) = A ^ n
        @[simp]
        theorem HermitianMat.pow_zero {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        A ^ 0 = 1
        @[simp]
        theorem HermitianMat.zero_pow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (n : ) (hn : n 0) :
        0 ^ n = 0
        @[simp]
        theorem HermitianMat.one_pow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (n : ) :
        1 ^ n = 1
        noncomputable instance HermitianMat.instZPow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] :
        Equations
        @[simp]
        theorem HermitianMat.mat_zpow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) (z : ) :
        ↑(A ^ z) = A ^ z
        @[simp]
        theorem HermitianMat.zpow_natCast {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) (n : ) :
        A ^ n = A ^ n
        @[simp]
        theorem HermitianMat.zpow_zero {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        A ^ 0 = 1
        @[simp]
        theorem HermitianMat.zpow_one {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        A ^ 1 = A
        @[simp]
        theorem HermitianMat.one_zpow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (z : ) :
        1 ^ z = 1
        @[simp]
        theorem HermitianMat.zpow_neg_one {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        A ^ (-1) = A⁻¹
        @[simp]
        theorem HermitianMat.inv_zpow {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) (z : ) :
        A⁻¹ ^ z = (A ^ z)⁻¹
        theorem Matrix.inv_commute {m : Type u_4} [DecidableEq m] [Fintype m] {α : Type u_6} {A : Matrix m m α} [CommRing α] :
        theorem HermitianMat.commute_inv_self {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        Commute A⁻¹ A
        theorem HermitianMat.commute_self_inv {α : Type u_1} {m : Type u_4} [CommRing α] [StarRing α] [DecidableEq m] [Fintype m] (A : HermitianMat m α) :
        Commute A A⁻¹
        @[simp]
        theorem HermitianMat.im_diag_eq_zero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] (A : HermitianMat n 𝕜) (x : n) :
        RCLike.im (A x x) = 0
        @[simp]
        theorem HermitianMat.complex_im_eq_zero {n : Type u_5} (A : HermitianMat n ) (x : n) :
        (A x x).im = 0
        def HermitianMat.conj {α : Type u_1} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] {m : Type u_6} (B : Matrix m n α) :

        The Hermitian matrix given by conjugating by a (possibly rectangular) Matrix. If we required B to be square, this would apply to any Semigroup+StarMul (as proved by IsSelfAdjoint.conjugate). But this lets us conjugate to other sizes too, as is done in e.g. Kraus operators. That is, it's a heterogeneous conjguation.

        Equations
        Instances For
          theorem HermitianMat.conj_apply {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (B : Matrix m n α) (A : HermitianMat n α) :
          (conj B) A = B * A * B.conjTranspose,
          @[simp]
          theorem HermitianMat.conj_apply_mat {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (B : Matrix m n α) (A : HermitianMat n α) :
          ((conj B) A) = B * A * B.conjTranspose
          theorem HermitianMat.conj_conj {α : Type u_1} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (A : HermitianMat n α) {m : Type u_6} {l : Type u_7} [Fintype m] (B : Matrix m n α) (C : Matrix l m α) :
          (conj C) ((conj B) A) = (conj (C * B)) A
          @[simp]
          theorem HermitianMat.conj_zero {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (A : HermitianMat n α) [DecidableEq n] :
          (conj 0) A = 0
          @[simp]
          theorem HermitianMat.conj_one {α : Type u_1} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (A : HermitianMat n α) [DecidableEq n] :
          (conj 1) A = A
          @[simp]
          theorem HermitianMat.conj_one_unitary {α : Type u_1} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] [DecidableEq n] (U : (Matrix.unitaryGroup n α)) :
          (conj U) 1 = 1
          def HermitianMat.conjLinear {α : Type u_1} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (R : Type u_6) [Star R] [TrivialStar R] [CommSemiring R] [Algebra R α] [StarModule R α] {m : Type u_7} (B : Matrix m n α) :

          HermitianMat.conj as an R-linear map, where R is the ring of relevant reals.

          Equations
          Instances For
            @[simp]
            theorem HermitianMat.conjLinear_apply {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [Fintype n] (A : HermitianMat n α) (R : Type u_6) [Star R] [TrivialStar R] [CommSemiring R] [Algebra R α] [StarModule R α] (B : Matrix m n α) :
            (conjLinear R B) A = (conj B) A
            theorem HermitianMat.continuous_conj {𝕜 : Type u_3} {m : Type u_4} {n : Type u_5} [RCLike 𝕜] [Fintype n] (ρ : HermitianMat n 𝕜) :
            Continuous fun (x : Matrix m n 𝕜) => (conj x) ρ
            def HermitianMat.lin {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :

            The continuous linear map associated with a Hermitian matrix.

            Equations
            Instances For
              @[simp]
              theorem HermitianMat.isSymmetric {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :
              @[simp]
              theorem HermitianMat.lin_zero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] :
              lin 0 = 0
              @[simp]
              theorem HermitianMat.lin_one {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] :
              lin 1 = 1
              noncomputable def HermitianMat.eigenspace {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) (μ : 𝕜) :
              Equations
              Instances For
                def HermitianMat.ker {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :

                The kernel of a Hermitian matrix A as a submodule of Euclidean space, defined by LinearMap.ker A.toMat.toEuclideanLin. Equivalently, the zero-eigenspace.

                Equations
                Instances For
                  theorem HermitianMat.mem_ker_iff_mulVec_zero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) (x : EuclideanSpace 𝕜 n) :
                  x A.ker (↑A).mulVec x.ofLp = 0
                  theorem HermitianMat.ker_eq_eigenspace_zero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :

                  The kernel of a Hermitian matrix is its zero eigenspace.

                  @[simp]
                  theorem HermitianMat.ker_zero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] :
                  @[simp]
                  theorem HermitianMat.ker_one {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] :
                  theorem HermitianMat.ker_pos_smul {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) {c : } (hc : c 0) :
                  (c A).ker = A.ker
                  def HermitianMat.support {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :

                  The support of a Hermitian matrix A as a submodule of Euclidean space, defined by LinearMap.range A.toMat.toEuclideanLin. Equivalently, the sum of all nonzero eigenspaces.

                  Equations
                  Instances For
                    theorem HermitianMat.support_eq_sup_eigenspace_nonzero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :
                    A.support = ⨆ (μ : 𝕜), ⨆ (_ : μ 0), A.eigenspace μ

                    The support of a Hermitian matrix is the sum of its nonzero eigenspaces.

                    @[simp]
                    theorem HermitianMat.support_zero {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] :
                    @[simp]
                    theorem HermitianMat.support_one {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] :
                    @[simp]
                    theorem HermitianMat.ker_orthogonal_eq_support {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :
                    @[simp]
                    theorem HermitianMat.support_orthogonal_eq_range {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :
                    def HermitianMat.diagonal {n : Type u_5} (𝕜 : Type u_6) [RCLike 𝕜] [DecidableEq n] (f : n) :
                    Equations
                    Instances For
                      @[simp]
                      theorem HermitianMat.diagonal_mat {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] (f : n) :
                      (diagonal 𝕜 f) = Matrix.diagonal fun (x : n) => (f x)
                      @[simp]
                      theorem HermitianMat.diagonal_zero {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] :
                      diagonal 𝕜 0 = 0
                      @[simp]
                      theorem HermitianMat.diagonal_one {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] :
                      diagonal 𝕜 1 = 1
                      theorem HermitianMat.diagonal_add {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] (f g : n) :
                      diagonal 𝕜 (f + g) = diagonal 𝕜 f + diagonal 𝕜 g
                      theorem HermitianMat.diagonal_add_apply {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] (f g : n) :
                      (diagonal 𝕜 fun (x : n) => f x + g x) = diagonal 𝕜 f + diagonal 𝕜 g
                      theorem HermitianMat.diagonal_sub {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] (f g : n) :
                      diagonal 𝕜 (f - g) = diagonal 𝕜 f - diagonal 𝕜 g
                      theorem HermitianMat.diagonal_mul {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] (f : n) (c : ) :
                      (diagonal 𝕜 fun (x : n) => c * f x) = c diagonal 𝕜 f
                      theorem HermitianMat.diagonal_conj_diagonal {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] (f g : n) [Fintype n] :
                      (conj (diagonal 𝕜 g)) (diagonal 𝕜 f) = diagonal 𝕜 fun (i : n) => f i * g i ^ 2
                      theorem HermitianMat.eq_conj_diagonal {n : Type u_5} {𝕜 : Type u_6} [RCLike 𝕜] [DecidableEq n] [Fintype n] (A : HermitianMat n 𝕜) :

                      A Hermitian matrix is equal to its diagonalization conjugated by its eigenvector unitary matrix.

                      def HermitianMat.kronecker {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] (A : HermitianMat m α) (B : HermitianMat n α) :
                      HermitianMat (m × n) α

                      The kronecker product of two HermitianMats, see Matrix.kroneckerMap.

                      Equations
                      Instances For

                        The kronecker product of two HermitianMats, see Matrix.kroneckerMap.

                        Equations
                        Instances For
                          @[simp]
                          theorem HermitianMat.kronecker_mat {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] (A : HermitianMat m α) (B : HermitianMat n α) :
                          (A.kronecker B) = Matrix.kroneckerMap (fun (x1 x2 : α) => x1 * x2) A B
                          @[simp]
                          theorem HermitianMat.zero_kronecker {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] (A : HermitianMat m α) :
                          kronecker 0 A = 0
                          @[simp]
                          theorem HermitianMat.kronecker_zero {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] (A : HermitianMat m α) :
                          A.kronecker 0 = 0
                          @[simp]
                          theorem HermitianMat.kronecker_one_one {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [DecidableEq m] [DecidableEq n] :
                          kronecker 1 1 = 1
                          theorem HermitianMat.add_kronecker {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] (A B : HermitianMat m α) (C : HermitianMat n α) :
                          (A + B).kronecker C = A.kronecker C + B.kronecker C
                          theorem HermitianMat.kronecker_add {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] (A : HermitianMat m α) (B C : HermitianMat n α) :
                          A.kronecker (B + C) = A.kronecker B + A.kronecker C
                          theorem HermitianMat.kronecker_diagonal {𝕜 : Type u_3} {m : Type u_4} {n : Type u_5} [RCLike 𝕜] [DecidableEq m] [DecidableEq n] (d₁ : m) (d₂ : n) :
                          (diagonal 𝕜 d₁).kronecker (diagonal 𝕜 d₂) = diagonal 𝕜 fun (i : m × n) => d₁ i.1 * d₂ i.2
                          theorem HermitianMat.kron_commute {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] {A C : HermitianMat m α} {B D : HermitianMat n α} (hAC : Commute A C) (hBD : Commute B D) :
                          Commute (A.kronecker B) (C.kronecker D)

                          A ⊗ₖ B always commutes with C ⊗ₖ D if the pairs commute.

                          theorem HermitianMat.kron_id_commute_id_kro {α : Type u_1} {m : Type u_4} {n : Type u_5} [CommRing α] [StarRing α] [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n] (A : HermitianMat m α) (B : HermitianMat n α) :
                          Commute (A.kronecker 1) (kronecker 1 B)

                          A ⊗ₖ 1 always commutes with 1 ⊗ₖ B

                          theorem HermitianMat.kronecker_conj {α : Type u_1} {m : Type u_4} {n : Type u_5} {p : Type u_6} {q : Type u_7} [CommRing α] [StarRing α] [Fintype m] [Fintype n] (A : HermitianMat m α) (B : HermitianMat n α) (C : Matrix p m α) (D : Matrix q n α) :
                          (conj (Matrix.kroneckerMap (fun (x1 x2 : α) => x1 * x2) C D)) (A.kronecker B) = ((conj C) A).kronecker ((conj D) B)
                          theorem HermitianMat.range_le_ker_imp_zero {𝕜 : Type u_3} [RCLike 𝕜] {d : Type u_6} [Fintype d] [DecidableEq d] {A : HermitianMat d 𝕜} (h : (Matrix.toEuclideanLin A).range (Matrix.toEuclideanLin A).ker) :
                          A = 0
                          theorem Matrix.range_mul_conjTranspose_of_ker_le_ker {𝕜 : Type u_3} [RCLike 𝕜] {d : Type u_6} {d₂ : Type u_7} [Fintype d] [DecidableEq d] [Fintype d₂] [DecidableEq d₂] {A : Matrix d d 𝕜} {M : Matrix d₂ d 𝕜} (h : (toEuclideanLin M).ker (toEuclideanLin A).ker) :

                          If ker M ⊆ ker A, then range (A Mᴴ) = range A.

                          theorem HermitianMat.conj_ne_zero {𝕜 : Type u_3} [RCLike 𝕜] {d : Type u_6} {d₂ : Type u_7} [Fintype d] [DecidableEq d] [Fintype d₂] [DecidableEq d₂] {A : HermitianMat d 𝕜} {M : Matrix d₂ d 𝕜} (hA : A 0) (h : (Matrix.toEuclideanLin M).ker A.ker) :
                          (conj M) A 0
                          theorem HermitianMat.conj_ne_zero_iff {𝕜 : Type u_3} [RCLike 𝕜] {d : Type u_6} {d₂ : Type u_7} [Fintype d] [DecidableEq d] [Fintype d₂] [DecidableEq d₂] {A : HermitianMat d 𝕜} {M : Matrix d₂ d 𝕜} (h : (Matrix.toEuclideanLin M).ker A.ker) :
                          (conj M) A 0 A 0
                          theorem Matrix.IsHermitian.spectrum_rcLike {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] {A : Matrix n n 𝕜} (hA : A.IsHermitian) :
                          @[simp]
                          theorem HermitianMat.spectrum_rcLike {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :

                          We fix a simp-normal form that, for HermitianMat, we always work in terms of the real spectrum.

                          theorem HermitianMat.ne_zero_iff_ne_zero_spectrum {𝕜 : Type u_3} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] (A : HermitianMat n 𝕜) :
                          A 0 xspectrum A, x 0
                          theorem HermitianMat.spectrum_prod {𝕜 : Type u_3} {m : Type u_4} {n : Type u_5} [RCLike 𝕜] [Fintype n] [DecidableEq n] [Fintype m] [DecidableEq m] {A : HermitianMat m 𝕜} {B : HermitianMat n 𝕜} :