@@ -20,6 +20,7 @@ the basic quantum entropy infrastructure needed for MPDO / RFP applications.
2020## Main definitions
2121
2222* `vonNeumannEntropy`: `S(ρ) = ∑ᵢ negMulLog(λᵢ)` where `λᵢ` are eigenvalues
23+ * `quantumRelativeEntropy`: `D(ρ‖σ) = Re tr(ρ(log ρ - log σ))`
2324* `traceA_ABC`, `traceC_ABC`, `traceAC_ABC`: tripartite partial traces
2425* `mutualInformation`: `I(A:B) = S(ρ_A) + S(ρ_B) - S(ρ_AB)`
2526* `IsSSAEquality`: predicate for equality in strong subadditivity
@@ -143,6 +144,64 @@ theorem vonNeumannEntropy_eq_neg_trace_mul_log
143144 rw [htr, ← Finset.sum_neg_distrib]
144145 exact Finset.sum_congr rfl fun i _ => by simp only [Real.negMulLog]; ring
145146
147+ open scoped Matrix.Norms.L2Operator in
148+ /-- **Quantum relative entropy** , in trace-log form.
149+
150+ For matrices `ρ` and `σ` of the same finite dimension, this is the totalized
151+ trace-log expression
152+ `D(ρ‖σ) = Re tr(ρ · (log ρ - log σ))`, where the logarithm is `CFC.log`.
153+ When `ρ` is a density matrix and `σ` is positive definite, this is the usual
154+ finite-dimensional Umegaki relative entropy.
155+
156+ The definition is total because Mathlib's `CFC.log` is total. The physical
157+ relative entropy domain is the positive semidefinite / positive definite one;
158+ outside that domain this declaration is only the algebraic trace-log expression.
159+
160+ Source: standard; blueprint `def:quantum_relative_entropy`. -/
161+ noncomputable def quantumRelativeEntropy
162+ (ρ σ : Matrix n n ℂ) : ℝ :=
163+ (Matrix.trace (ρ * (CFC.log ρ - CFC.log σ))).re
164+
165+ open scoped Matrix.Norms.L2Operator in
166+ /-- The trace-log form of relative entropy split into its two trace terms. -/
167+ theorem quantumRelativeEntropy_eq_trace_mul_log_sub
168+ (ρ σ : Matrix n n ℂ) :
169+ quantumRelativeEntropy ρ σ
170+ = (Matrix.trace (ρ * CFC.log ρ)).re
171+ - (Matrix.trace (ρ * CFC.log σ)).re := by
172+ simp [quantumRelativeEntropy, Matrix.mul_sub, Matrix.trace_sub]
173+
174+ open scoped Matrix.Norms.L2Operator in
175+ /-- A matrix has zero relative entropy with itself. -/
176+ @[simp] theorem quantumRelativeEntropy_self
177+ (ρ : Matrix n n ℂ) :
178+ quantumRelativeEntropy ρ ρ = 0 := by
179+ simp [quantumRelativeEntropy]
180+
181+ open scoped Matrix.Norms.L2Operator in
182+ /-- The zero left input has zero trace-log relative entropy. -/
183+ @[simp] theorem quantumRelativeEntropy_zero_left
184+ (σ : Matrix n n ℂ) :
185+ quantumRelativeEntropy 0 σ = 0 := by
186+ simp [quantumRelativeEntropy]
187+
188+ open scoped Matrix.Norms.L2Operator in
189+ /-- Relative entropy rewritten using the von Neumann entropy of the first
190+ argument.
191+
192+ For Hermitian `ρ`,
193+ `D(ρ‖σ) = -S(ρ) - Re tr(ρ log σ)`. This is the representation used when
194+ relating the trace-log relative-entropy layer to the eigenvalue definition of
195+ von Neumann entropy. -/
196+ theorem quantumRelativeEntropy_eq_neg_entropy_sub_trace_mul_log
197+ {ρ σ : Matrix n n ℂ} (hρ : ρ.IsHermitian) :
198+ quantumRelativeEntropy ρ σ
199+ = -vonNeumannEntropy ρ hρ - (Matrix.trace (ρ * CFC.log σ)).re := by
200+ rw [quantumRelativeEntropy_eq_trace_mul_log_sub]
201+ have htrace : (Matrix.trace (ρ * CFC.log ρ)).re = -vonNeumannEntropy ρ hρ := by
202+ linarith [vonNeumannEntropy_eq_neg_trace_mul_log hρ]
203+ rw [htrace]
204+
146205/-- The von Neumann entropy depends only on the characteristic polynomial: it is
147206the `negMulLog`-sum of the (real parts of the) roots of `charpoly`. -/
148207theorem vonNeumannEntropy_eq_charpoly_roots (ρ : Matrix n n ℂ) (hρ : ρ.IsHermitian) :
@@ -337,7 +396,8 @@ theorem vonNeumannEntropy_le_log_rank
337396 rw [hLHS] at hJensen
338397 -- `k⁻¹ · S ≤ negMulLog(k⁻¹) = k⁻¹ · log k`, multiply by `k`
339398 have hrhs : (k : ℝ) * Real.negMulLog ((k : ℝ)⁻¹) = Real.log k := by
340- rw [Real.negMulLog, Real.log_inv, neg_mul_neg, ← mul_assoc, mul_inv_cancel₀ hkR.ne', one_mul]
399+ rw [Real.negMulLog, Real.log_inv, neg_mul_neg, ← mul_assoc,
400+ mul_inv_cancel₀ hkR.ne', one_mul]
341401 have hlhs : (k : ℝ) * ((k : ℝ)⁻¹ * vonNeumannEntropy ρ hρ.isHermitian)
342402 = vonNeumannEntropy ρ hρ.isHermitian := by
343403 rw [← mul_assoc, mul_inv_cancel₀ hkR.ne', one_mul]
0 commit comments