Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions LeanEval/Physics/StrongSubadditivity.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import EvalTools.Markers
import Mathlib.Analysis.Matrix.HermitianFunctionalCalculus
import Mathlib.LinearAlgebra.Matrix.PosDef

/-! # Strong additivity of quantum entropy
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in the header: "Strong additivity" → "Strong subadditivity".


States that `S(ρ_ABC) + S(ρ_B) ≤ S(ρ_AB) + S(ρ_C)` where S is the von Neumman entropy.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docstring has the wrong reduced state on the RHS: it says S(ρ_C), but SSA here is

S(ρ_ABC) + S(ρ_B) ≤ S(ρ_AB) + S(ρ_BC)

matching the theorem body's M_BC.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"von Neumman" → "von Neumann".


[Wikipedia article](https://en.wikipedia.org/wiki/Strong_subadditivity_of_quantum_entropy) on
the significance of this inequality.

-/

namespace LeanEval
namespace Physics

variable {A B C : Type*}
variable [Fintype A] [Fintype B] [Fintype C]
variable [DecidableEq A] [DecidableEq B] [DecidableEq C]
variable [Nonempty A] [Nonempty B] [Nonempty C]

noncomputable section

/-- Partial trace on the left of a matrix -/
def Matrix.traceLeft (M : Matrix (A × B) (A × B) ℂ) : Matrix B B ℂ :=
Matrix.of fun i j ↦ ∑ k, ∑ l, M (k, i) (l, j)

/-- Partial trace on the right of a matrix -/
def Matrix.traceRight (M : Matrix (A × B) (A × B) ℂ) : Matrix A A ℂ :=
Matrix.of fun i j ↦ ∑ k, ∑ l, M (i, k) (j, l)
Comment on lines +24 to +30
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "two copies of B" can be distinct here. Perhaps worth doing for future proofing.


/-- Von Neumann entropy of a quantum state -/
def entropy (M : Matrix A A ℂ) : ℝ :=
-Complex.re (Matrix.trace (M * cfc Real.log M))

open ComplexOrder

/-- Strong subadditivity of quantum entropy. We relax the common assumption that M is a normalized
density matrix to the simpler statement that it's PSD, which holds since normalization just produces
a positive affine transformation on the entropy. -/
@[eval_problem]
theorem strong_subadditivity (M_ABC : Matrix (A × B × C) (A × B × C) ℂ) (h : M_ABC.PosSemidef) :
let M_AB : Matrix (A × B) (A × B) ℂ :=
.traceRight <| M_ABC.reindex (.symm <| .prodAssoc ..) (.symm <| .prodAssoc ..)
let M_BC : Matrix (B × C) (B × C) ℂ := M_ABC.traceLeft
let M_B : Matrix B B ℂ := M_BC.traceRight
entropy M_ABC + entropy M_B ≤ entropy M_AB + entropy M_BC := by
sorry

end Physics
end LeanEval
7 changes: 7 additions & 0 deletions manifests/problems/strong_subadditivity.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
id = "strong_subadditivity"
title = "Strong Subadditivity of von Neumann Entropy"
test = false
module = "LeanEval.Physics"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Failing CI: the module field should be the full module path of the file, not the directory namespace. The build tries to compile LeanEval/Physics.lean, which doesn't exist (error: no such file or directory … LeanEval/Physics.lean). Should be:

module = "LeanEval.Physics.StrongSubadditivity"

(cf. LeanEval.Geometry.LiouvilleArnoldLeanEval/Geometry/LiouvilleArnold.lean.)

holes = ["strong_subadditivity"]
submitter = "Alex Meiburg"
notes = "This fact is 'equivalent' to other facts such as the joint convexity of quantum relative entropy. This formulation states the problem for all PSD matrices (over non-empty, finite index types) instead of unnecessarily restricting to normalized matrices of trace one. First proved in 1973 by E.H. Lieb and M.B. Ruskai, but at least half-a-dozen alternate proofs have been published, with varied techniques."
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small correction to the reasoning in notes: relaxing to PSD is valid, but not because "normalization just produces a positive affine transformation on the entropy." S(t·σ) = t·S(σ) − t·log t is affine in S(σ) only for a fixed t, and can't be applied per-term independently unless the same trace t is shared by every term. That's exactly what holds here: a genuine (trace-preserving) partial trace gives all four reduced states the common trace t, so with two entropy terms on each side the −t·log t corrections cancel and you recover normalized SSA scaled by t ≥ 0 (and t = 0 ⇒ ρ = 0, trivial). Worth rewording so a solver isn't pointed at the wrong argument — and note this depends on the partial traces being trace-preserving.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional, for consistency with the other problems: consider adding a source field and an informal_solution sketch. Both are optional in the parser so CI won't complain without them, but most manifests carry them. Suggested source:

E. H. Lieb and M. B. Ruskai, "Proof of the strong subadditivity of quantum-mechanical entropy," J. Math. Phys. 14(12), 1938–1941 (1973), doi:10.1063/1.1666274.

Loading