Documentation

QuantumInfo.ForMathlib.HermitianMat.Reindex

Much like Matrix.reindex and Matrix.submatrix, we can reindex a Hermitian matrix to get another Hermitian matrix; however, this only makes sense when both permutations are the same, accordingly, HermitianMat.reindex only takes one Equiv argument (as opposed to Matrix.reindex's two).

This file then gives relevant lemmas for simplifying this.

def HermitianMat.reindex {d : Type u_1} {dā‚‚ : Type u_2} {š•œ : Type u_5} [RCLike š•œ] (A : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) :
HermitianMat dā‚‚ š•œ
Equations
Instances For
    @[simp]
    theorem HermitianMat.reindex_coe {d : Type u_1} {dā‚‚ : Type u_2} {š•œ : Type u_5} [RCLike š•œ] (A : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) :
    ↑(A.reindex e) = (Matrix.reindex e e) ↑A

    Our simp-normal form for expressions involving HermitianMat.reindex is that we try to push the reindexing as far out as possible, so that it can be absorbed by HermitianMat.trace, or cancelled our in a HermitianMat.inner. In places where it commutes (like HermitianMat.inner) we push it to the right side.

    @[simp]
    @[simp]
    theorem HermitianMat.reindex_reindex {d : Type u_1} {dā‚‚ : Type u_2} {dā‚ƒ : Type u_3} (A : HermitianMat d ā„‚) (e : d ā‰ƒ dā‚‚) (f : dā‚‚ ā‰ƒ dā‚ƒ) :
    (A.reindex e).reindex f = A.reindex (e.trans f)
    @[simp]
    theorem HermitianMat.reindex_add {d : Type u_1} {dā‚‚ : Type u_2} {š•œ : Type u_5} [RCLike š•œ] (A B : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) :
    A.reindex e + B.reindex e = (A + B).reindex e
    @[simp]
    theorem HermitianMat.reindex_sub {d : Type u_1} {dā‚‚ : Type u_2} {š•œ : Type u_5} [RCLike š•œ] (A B : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) :
    A.reindex e - B.reindex e = (A - B).reindex e
    @[simp]
    theorem HermitianMat.reindex_conj {d : Type u_1} {dā‚‚ : Type u_2} {dā‚ƒ : Type u_3} {š•œ : Type u_5} [RCLike š•œ] (A : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) [Fintype dā‚‚] [Fintype d] (B : Matrix dā‚ƒ dā‚‚ š•œ) :
    (conj B) (A.reindex e) = (conj (B.submatrix id ⇑e)) A
    @[simp]
    theorem HermitianMat.conj_submatrix {d : Type u_1} {dā‚‚ : Type u_2} {dā‚ƒ : Type u_3} {dā‚„ : Type u_4} [Fintype d] (A : HermitianMat d ā„‚) (B : Matrix dā‚‚ dā‚„ ā„‚) (e : dā‚ƒ ā‰ƒ dā‚‚) (f : d → dā‚„) :
    (conj (B.submatrix (⇑e) f)) A = ((conj (B.submatrix id f)) A).reindex e.symm
    theorem HermitianMat.ker_reindex {d : Type u_1} {dā‚‚ : Type u_2} {š•œ : Type u_5} [RCLike š•œ] (A : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) [Fintype d] [Fintype dā‚‚] [DecidableEq d] [DecidableEq dā‚‚] :
    @[simp]
    theorem HermitianMat.ker_reindex_le_iff {d : Type u_1} {dā‚‚ : Type u_2} {š•œ : Type u_5} [RCLike š•œ] (A B : HermitianMat d š•œ) (e : d ā‰ƒ dā‚‚) [Fintype d] [Fintype dā‚‚] [DecidableEq d] [DecidableEq dā‚‚] :