@@ -38,6 +38,9 @@ representation; see the status note below.
3838 block-diagonal matrix yields the weighted sum of reciprocals.
3939- `povm_resolvent_inv_le`: the finite-POVM resolvent inequality, the key
4040 algebraic step toward the concave real-power Jensen inequality.
41+ - `positiveMap_resolvent_inv_le`: the corresponding resolvent inequality for
42+ a positive subunital map, obtained from the spectral projections of the input
43+ matrix and `povm_resolvent_inv_le`.
4144- `integral_nonneg_matrix_of_ae`: matrix-valued Bochner integrals preserve
4245 almost-everywhere positive semidefiniteness.
4346
@@ -55,13 +58,16 @@ and `CFC.concaveOn_cfc_rpowIntegrand₀₁` records the operator concavity of ea
5558integrand together with the resolvent form
5659`cfc (Real.rpowIntegrand₀₁ p t) a = t ^ (p - 1) • 1 - t ^ p • (t • 1 + a)⁻¹`.
5760
58- The remaining unfinished step is therefore the operator Jensen inequality for a
59- positive subunital map `T` applied to a single integrand,
60- `T(cfc (Real.rpowIntegrand₀₁ p t) A) ≤ cfc (Real.rpowIntegrand₀₁ p t) (T A)`,
61- together with the spectral reduction to `povm_resolvent_inv_le`. The
62- matrix-valued positive-integral step is now packaged below from Mathlib's
63- ordered Bochner integral API and the local closed Loewner-order topology on
64- finite matrices; order monotonicity itself is Mathlib's `integral_mono_ae`.
61+ This file now also proves the positive-map resolvent estimate obtained from
62+ the spectral projections of the input matrix and `povm_resolvent_inv_le`. The
63+ remaining unfinished step is therefore to rewrite the single-integrand Jensen
64+ difference
65+ `cfc (Real.rpowIntegrand₀₁ p t) (T A) - T(cfc (Real.rpowIntegrand₀₁ p t) A)`
66+ using that resolvent estimate and then integrate the resulting pointwise
67+ positive-semidefinite bound. The matrix-valued positive-integral step is
68+ packaged below from Mathlib's ordered Bochner integral API and the local closed
69+ Loewner-order topology on finite matrices; order monotonicity itself is
70+ Mathlib's `integral_mono_ae`.
6571-/
6672
6773open scoped Matrix ComplexOrder MatrixOrder
@@ -372,4 +378,319 @@ lemma povm_resolvent_inv_le
372378
373379end POVM
374380
381+ section PositiveMapResolvent
382+
383+ variable {D : ℕ}
384+
385+ local notation "MatD" => Matrix (Fin D) (Fin D) ℂ
386+
387+ private def spectralProjection (A : MatD) (hA : A.IsHermitian) (i : Fin D) : MatD :=
388+ (↑hA.eigenvectorUnitary : MatD) * Matrix.single i i (1 : ℂ) *
389+ (↑hA.eigenvectorUnitary : MatD)ᴴ
390+
391+ private lemma spectralProjection_posSemidef {A : MatD} (hA : A.IsHermitian) (i : Fin D) :
392+ (spectralProjection A hA i).PosSemidef := by
393+ classical
394+ have hdiag : (Matrix.single i i (1 : ℂ) : MatD).PosSemidef := by
395+ rw [← Matrix.diagonal_single]
396+ refine Matrix.PosSemidef.diagonal ?_
397+ intro j
398+ by_cases hji : j = i
399+ · subst hji
400+ simp
401+ · simp [Pi.single, hji]
402+ simpa [spectralProjection, Matrix.mul_assoc] using
403+ hdiag.mul_mul_conjTranspose_same (B := (↑hA.eigenvectorUnitary : MatD))
404+
405+ private lemma spectralProjection_sum_one {A : MatD} (hA : A.IsHermitian) :
406+ (∑ i, spectralProjection A hA i) = (1 : MatD) := by
407+ classical
408+ let U : MatD := ↑hA.eigenvectorUnitary
409+ have hsum_single : (∑ i : Fin D, Matrix.single i i (1 : ℂ)) = (1 : MatD) := by
410+ rw [Matrix.sum_single_eq_diagonal]
411+ exact Matrix.diagonal_one
412+ calc
413+ (∑ i, spectralProjection A hA i)
414+ = U * (∑ i : Fin D, Matrix.single i i (1 : ℂ)) * Uᴴ := by
415+ simp [spectralProjection, U, Finset.mul_sum, Finset.sum_mul]
416+ _ = U * 1 * Uᴴ := by rw [hsum_single]
417+ _ = 1 := by
418+ simpa [U, Matrix.star_eq_conjTranspose] using
419+ Unitary.mul_star_self_of_mem hA.eigenvectorUnitary.prop
420+
421+ private lemma spectral_sum_eq {A : MatD} (hA : A.IsHermitian) :
422+ (∑ i, hA.eigenvalues i • spectralProjection A hA i) = A := by
423+ classical
424+ let U : MatD := ↑hA.eigenvectorUnitary
425+ have hdiag_sum :
426+ (∑ i : Fin D, hA.eigenvalues i • Matrix.single i i (1 : ℂ)) =
427+ Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) := by
428+ calc
429+ (∑ i : Fin D, hA.eigenvalues i • Matrix.single i i (1 : ℂ))
430+ = ∑ i : Fin D, Matrix.single i i ((hA.eigenvalues i : ℂ)) := by
431+ refine Finset.sum_congr rfl ?_
432+ intro i _
433+ ext r s
434+ simp [Matrix.smul_apply, Matrix.single]
435+ _ = Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) := by
436+ rw [Matrix.sum_single_eq_diagonal]
437+ rfl
438+ have hterm :
439+ (∑ i, hA.eigenvalues i • spectralProjection A hA i) =
440+ ∑ i : Fin D,
441+ U * Matrix.single i i ((hA.eigenvalues i : ℂ)) * Uᴴ := by
442+ refine Finset.sum_congr rfl ?_
443+ intro i _
444+ change hA.eigenvalues i • (U * Matrix.single i i (1 : ℂ) * Uᴴ) =
445+ U * Matrix.single i i ((hA.eigenvalues i : ℂ)) * Uᴴ
446+ rw [← show hA.eigenvalues i • Matrix.single i i (1 : ℂ) =
447+ Matrix.single i i ((hA.eigenvalues i : ℂ)) by
448+ ext r s
449+ simp [Matrix.smul_apply, Matrix.single]]
450+ rw [Matrix.mul_smul, Matrix.smul_mul]
451+ calc
452+ (∑ i, hA.eigenvalues i • spectralProjection A hA i)
453+ = ∑ i : Fin D,
454+ U * Matrix.single i i ((hA.eigenvalues i : ℂ)) * Uᴴ := hterm
455+ _ = U * (∑ i : Fin D, Matrix.single i i ((hA.eigenvalues i : ℂ))) * Uᴴ := by
456+ rw [Matrix.mul_sum, Matrix.sum_mul]
457+ _ = U * Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) * Uᴴ := by
458+ rw [Matrix.sum_single_eq_diagonal]
459+ rfl
460+ _ = A := by
461+ simpa [U, Unitary.conjStarAlgAut_apply, Matrix.star_eq_conjTranspose] using
462+ hA.spectral_theorem.symm
463+
464+ private lemma spectral_shift_eq {A : MatD} (hA : A.IsHermitian) (t : ℝ) :
465+ A + t • (1 : MatD) =
466+ (↑hA.eigenvectorUnitary : MatD) *
467+ Matrix.diagonal (fun i => ((hA.eigenvalues i + t : ℝ) : ℂ)) *
468+ (↑hA.eigenvectorUnitary : MatD)ᴴ := by
469+ classical
470+ let U : MatD := ↑hA.eigenvectorUnitary
471+ have hU : U * Uᴴ = (1 : MatD) := by
472+ simpa [U, Matrix.star_eq_conjTranspose] using
473+ Unitary.mul_star_self_of_mem hA.eigenvectorUnitary.prop
474+ have hscalar_conj : U * (t • (1 : MatD)) * Uᴴ = t • (1 : MatD) := by
475+ rw [Matrix.mul_smul, Matrix.smul_mul, Matrix.mul_one, hU]
476+ have hspectral :
477+ A = U * Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) * Uᴴ := by
478+ simpa [U, Unitary.conjStarAlgAut_apply, Matrix.star_eq_conjTranspose] using
479+ hA.spectral_theorem
480+ calc
481+ A + t • (1 : MatD)
482+ = U * Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) * Uᴴ +
483+ t • (1 : MatD) := by
484+ exact congrArg (fun M : MatD => M + t • (1 : MatD)) hspectral
485+ _ = U * Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) * Uᴴ +
486+ U * (t • (1 : MatD)) * Uᴴ := by
487+ rw [hscalar_conj]
488+ _ = U *
489+ (Matrix.diagonal (RCLike.ofReal ∘ hA.eigenvalues) + t • (1 : MatD)) *
490+ Uᴴ := by
491+ simp [Matrix.mul_add, Matrix.add_mul, Matrix.mul_assoc]
492+ _ = U * Matrix.diagonal (fun i => ((hA.eigenvalues i + t : ℝ) : ℂ)) * Uᴴ := by
493+ congr 2
494+ ext i j
495+ by_cases hij : i = j
496+ · subst hij
497+ simp [Matrix.smul_apply, Complex.ofReal_add]
498+ · simp [Matrix.smul_apply, hij]
499+
500+ private lemma spectral_shift_inv_sum {A : MatD} (hA : A.PosSemidef) {t : ℝ}
501+ (ht : 0 < t) :
502+ (A + t • (1 : MatD))⁻¹ =
503+ ∑ i, (hA.1 .eigenvalues i + t)⁻¹ • spectralProjection A hA.1 i := by
504+ classical
505+ let U : MatD := ↑hA.1 .eigenvectorUnitary
506+ let d : Fin D → ℂ := fun i => ((hA.1 .eigenvalues i + t : ℝ) : ℂ)
507+ let e : Fin D → ℂ := fun i => (((hA.1 .eigenvalues i + t)⁻¹ : ℝ) : ℂ)
508+ have hU_star : Uᴴ * U = (1 : MatD) := by
509+ simpa [U, Matrix.star_eq_conjTranspose] using
510+ Unitary.star_mul_self_of_mem hA.1 .eigenvectorUnitary.prop
511+ have hU_mul : U * Uᴴ = (1 : MatD) := by
512+ simpa [U, Matrix.star_eq_conjTranspose] using
513+ Unitary.mul_star_self_of_mem hA.1 .eigenvectorUnitary.prop
514+ have hde : Matrix.diagonal d * Matrix.diagonal e = (1 : MatD) := by
515+ rw [Matrix.diagonal_mul_diagonal, ← Matrix.diagonal_one]
516+ congr 1
517+ funext i
518+ have hne : hA.1 .eigenvalues i + t ≠ 0 := by
519+ linarith [hA.eigenvalues_nonneg i, ht]
520+ dsimp [d, e]
521+ rw [← Complex.ofReal_mul, mul_inv_cancel₀ hne, Complex.ofReal_one]
522+ have hsum :
523+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • spectralProjection A hA.1 i) =
524+ U * Matrix.diagonal e * Uᴴ := by
525+ have hdiag_e :
526+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ)) =
527+ Matrix.diagonal e := by
528+ calc
529+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ))
530+ = ∑ i, Matrix.single i i (e i) := by
531+ refine Finset.sum_congr rfl ?_
532+ intro i _
533+ ext r s
534+ simp [Matrix.smul_apply, Matrix.single, e]
535+ _ = Matrix.diagonal e := by
536+ rw [Matrix.sum_single_eq_diagonal]
537+ have hterm :
538+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • spectralProjection A hA.1 i) =
539+ U * (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ)) *
540+ Uᴴ := by
541+ calc
542+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • spectralProjection A hA.1 i)
543+ = ∑ i,
544+ U * ((hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ)) * Uᴴ := by
545+ refine Finset.sum_congr rfl ?_
546+ intro i _
547+ change (hA.1 .eigenvalues i + t)⁻¹ •
548+ (U * Matrix.single i i (1 : ℂ) * Uᴴ) =
549+ U * ((hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ)) * Uᴴ
550+ rw [Matrix.mul_smul, Matrix.smul_mul]
551+ _ = U * (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ)) *
552+ Uᴴ := by
553+ rw [Matrix.mul_sum, Matrix.sum_mul]
554+ calc
555+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • spectralProjection A hA.1 i)
556+ = U * (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • Matrix.single i i (1 : ℂ)) *
557+ Uᴴ := hterm
558+ _ = U * Matrix.diagonal e * Uᴴ := by
559+ rw [hdiag_e]
560+ refine Matrix.inv_eq_right_inv ?_
561+ rw [spectral_shift_eq hA.1 t, hsum]
562+ calc
563+ (U * Matrix.diagonal d * Uᴴ) * (U * Matrix.diagonal e * Uᴴ)
564+ = U * Matrix.diagonal d * (Uᴴ * U) * Matrix.diagonal e * Uᴴ := by
565+ noncomm_ring
566+ _ = U * Matrix.diagonal d * 1 * Matrix.diagonal e * Uᴴ := by rw [hU_star]
567+ _ = U * (Matrix.diagonal d * Matrix.diagonal e) * Uᴴ := by noncomm_ring
568+ _ = U * 1 * Uᴴ := by rw [hde]
569+ _ = 1 := by simp [hU_mul]
570+
571+ /-- Spectral resolution of a positive semidefinite matrix, packaged as a finite
572+ family of positive projectors with nonnegative weights and sum one. -/
573+ lemma posSemidef_spectral_resolution {A : MatD} (hA : A.PosSemidef) :
574+ ∃ P : Fin D → MatD,
575+ (∀ i, (P i).PosSemidef) ∧
576+ (∑ i, P i = (1 : MatD)) ∧
577+ (∀ i, 0 ≤ hA.1 .eigenvalues i) ∧
578+ (A = ∑ i, hA.1 .eigenvalues i • P i) := by
579+ refine ⟨spectralProjection A hA.1 , ?_, ?_, ?_, ?_⟩
580+ · exact spectralProjection_posSemidef hA.1
581+ · exact spectralProjection_sum_one hA.1
582+ · exact hA.eigenvalues_nonneg
583+ · exact (spectral_sum_eq hA.1 ).symm
584+
585+ private lemma sqrt_mul_conjTranspose_sqrt {M : MatD} (hM : M.PosSemidef) :
586+ CFC.sqrt M * (CFC.sqrt M)ᴴ = M := by
587+ have hM_nonneg : 0 ≤ M := (Matrix.nonneg_iff_posSemidef).mpr hM
588+ have hsquare : CFC.sqrt M * CFC.sqrt M = M :=
589+ CFC.sqrt_mul_sqrt_self M hM_nonneg
590+ have hstar : (CFC.sqrt M)ᴴ = CFC.sqrt M := by
591+ simpa [Matrix.star_eq_conjTranspose] using
592+ (CFC.sqrt_nonneg (a := M)).isSelfAdjoint.star_eq
593+ rw [hstar, hsquare]
594+
595+ /-- Resolvent form of Jensen's inequality for a positive subunital map, reduced
596+ to the finite-POVM resolvent inequality through the spectral projectors of `A`.
597+
598+ For a positive subunital map `T`, positive semidefinite `A`, and `t > 0`,
599+ `((T A) + t • 1)⁻¹ ≤ T ((A + t • 1)⁻¹) + t⁻¹ • (1 - T 1)`.
600+
601+ This is the pointwise inequality used in the Löwner-integral proof of the
602+ concave real-power operator Jensen inequality. -/
603+ lemma positiveMap_resolvent_inv_le
604+ {T : MatD →ₗ[ℂ] MatD} (hT : IsPositiveMap T)
605+ (hSub : T 1 ≤ (1 : MatD)) {A : MatD} (hA : A.PosSemidef)
606+ {t : ℝ} (ht : 0 < t) :
607+ ((T A) + t • (1 : MatD))⁻¹ ≤
608+ T ((A + t • (1 : MatD))⁻¹) + t⁻¹ • (1 - T 1 ) := by
609+ classical
610+ let P : Fin D → MatD := spectralProjection A hA.1
611+ let B : Fin D → MatD := fun i => T (P i)
612+ let C : Fin D → MatD := fun i => CFC.sqrt (B i)
613+ let S : MatD := CFC.sqrt (1 - ∑ i, B i)
614+ have hP_pos : ∀ i, (P i).PosSemidef := by
615+ intro i
616+ exact spectralProjection_posSemidef hA.1 i
617+ have hP_sum : (∑ i, P i) = (1 : MatD) :=
618+ spectralProjection_sum_one hA.1
619+ have hA_sum : A = ∑ i, hA.1 .eigenvalues i • P i := by
620+ simpa [P] using (spectral_sum_eq hA.1 ).symm
621+ have hB_pos : ∀ i, (B i).PosSemidef := by
622+ intro i
623+ exact hT (P i) (hP_pos i)
624+ have hB_sum : (∑ i, B i) = T 1 := by
625+ calc
626+ (∑ i, B i) = T (∑ i, P i) := by
627+ simp [B, map_sum]
628+ _ = T 1 := by rw [hP_sum]
629+ have hdef_pos : (1 - ∑ i, B i).PosSemidef := by
630+ rw [hB_sum]
631+ rw [Matrix.le_iff] at hSub
632+ simpa using hSub
633+ have hC_fac : ∀ i, C i * (C i)ᴴ = B i := by
634+ intro i
635+ exact sqrt_mul_conjTranspose_sqrt (hB_pos i)
636+ have hS_fac : S * Sᴴ = 1 - ∑ i, B i :=
637+ sqrt_mul_conjTranspose_sqrt hdef_pos
638+ have hdef : S * Sᴴ = 1 - ∑ i, C i * (C i)ᴴ := by
639+ rw [hS_fac]
640+ congr 1
641+ exact Finset.sum_congr rfl fun i _ => (hC_fac i).symm
642+ have hTA_sum : (∑ i, hA.1 .eigenvalues i • B i) = T A := by
643+ calc
644+ (∑ i, hA.1 .eigenvalues i • B i)
645+ = ∑ i, T (hA.1 .eigenvalues i • P i) := by
646+ refine Finset.sum_congr rfl ?_
647+ intro i _
648+ simp [B, LinearMap.map_smul_of_tower]
649+ _ = T (∑ i, hA.1 .eigenvalues i • P i) := by
650+ simp [map_sum]
651+ _ = T A := congrArg T hA_sum.symm
652+ have hTA_c :
653+ (∑ i, hA.1 .eigenvalues i • (C i * (C i)ᴴ)) = T A := by
654+ calc
655+ (∑ i, hA.1 .eigenvalues i • (C i * (C i)ᴴ))
656+ = ∑ i, hA.1 .eigenvalues i • B i := by
657+ refine Finset.sum_congr rfl ?_
658+ intro i _
659+ rw [hC_fac i]
660+ _ = T A := hTA_sum
661+ have hInv_sum :
662+ (A + t • (1 : MatD))⁻¹ =
663+ ∑ i, (hA.1 .eigenvalues i + t)⁻¹ • P i := by
664+ simpa [P] using spectral_shift_inv_sum hA ht
665+ have hTInv_sum :
666+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • B i) =
667+ T ((A + t • (1 : MatD))⁻¹) := by
668+ calc
669+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • B i)
670+ = ∑ i, T ((hA.1 .eigenvalues i + t)⁻¹ • P i) := by
671+ refine Finset.sum_congr rfl ?_
672+ intro i _
673+ simp [B, LinearMap.map_smul_of_tower]
674+ _ = T (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • P i) := by
675+ simp [map_sum]
676+ _ = T ((A + t • (1 : MatD))⁻¹) := by rw [← hInv_sum]
677+ have hTInv_c :
678+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • (C i * (C i)ᴴ)) =
679+ T ((A + t • (1 : MatD))⁻¹) := by
680+ calc
681+ (∑ i, (hA.1 .eigenvalues i + t)⁻¹ • (C i * (C i)ᴴ))
682+ = ∑ i, (hA.1 .eigenvalues i + t)⁻¹ • B i := by
683+ refine Finset.sum_congr rfl ?_
684+ intro i _
685+ rw [hC_fac i]
686+ _ = T ((A + t • (1 : MatD))⁻¹) := hTInv_sum
687+ have hS_def_T : S * Sᴴ = 1 - T 1 := by
688+ rw [hS_fac, hB_sum]
689+ have hpovm := povm_resolvent_inv_le
690+ (C := C) (S := S) (wgt := hA.1 .eigenvalues)
691+ (fun i => hA.eigenvalues_nonneg i) t ht hdef
692+ simpa [hTA_c, hTInv_c, hS_def_T] using hpovm
693+
694+ end PositiveMapResolvent
695+
375696end TNLean.OperatorJensen
0 commit comments