Zulip Chat Archive
Stream: PrimeNumberTheorem+
Topic: Duality principle
Harald Helfgott (Jan 18 2026 at 00:49):
Do we have the duality principle for Hilbert operators in Mathlib? I may be missing it, but I can’t find it under an obvious name. Here is what I mean. Here is what I mean.
Let , be Hilbert spaces, and let be a bounded linear operator. Then the operator norms of and its adjoint coincide:
This is extremely useful in analytic number theory -- in particular, it underlies an entire family of proofs for the large sieve in different forms, to the point that some call it "the principle of the large sieve". For most applications in number theory, the finite-dimensional case suffices, but one doesn't need any assumption of finite-dimensionality in the proof.
Has the duality principle been stated and proved in Lean? The basic language necessary for the task does seem to be there - I'm finding something called "ContinuousLinearMap.norm_def", for instance.
For the sake of convenience, I’m attaching a screenshot from a draft of my book where the lemma is stated and proved, preceded by some definitions, all in a few lines.
image.png
Aaron Liu (Jan 18 2026 at 00:51):
is it docs#innerSL_apply_norm
Aaron Liu (Jan 18 2026 at 00:54):
is it docs#ContinuousLinearMap.adjoint
Aaron Liu (Jan 18 2026 at 00:54):
which is bundled as a star-linear isometry equiv
Harald Helfgott (Jan 18 2026 at 00:55):
That's the adjoint I mean, yes. The point is that the operator norm of the adjoint of an operator equals the operator norm of the operator itself.
Aaron Liu (Jan 18 2026 at 00:55):
Aaron Liu (Jan 18 2026 at 00:57):
because the type of ContinuousLinearMap.adjoint is star-linear isometry equiv, and all linear isometries preserve the norm
Harald Helfgott (Jan 18 2026 at 00:57):
Is norm_map saying that the adjoint operator is an isometry, yes or no?
Aaron Liu (Jan 18 2026 at 00:57):
no, norm_map says isometries which preserve zero preserve the norm
Aaron Liu (Jan 18 2026 at 00:58):
ContinuousLinearMap.adjoint is defined as a star-linear isometry equiv
Aaron Liu (Jan 18 2026 at 00:58):
so in particular it's automatically an isometry which preserves zero
Harald Helfgott (Jan 18 2026 at 00:59):
Right, then norm_map is not the statement we want. But are you saying that the statement is hidden in a type, because the adjoint map is defined as an isometry?
Aaron Liu (Jan 18 2026 at 00:59):
yes
Aaron Liu (Jan 18 2026 at 00:59):
close enough
Aaron Liu (Jan 18 2026 at 00:59):
if you have some Lean code I can fill in a sorry
Harald Helfgott (Jan 18 2026 at 01:01):
Ah, interesting. Sounds elegant, but I wish there were a way to highlight this. Wait, is this close enough or do we really have this? Or do you mean that we ought to have a Lean statement saying exactly the same as the Lemma I posted, and that the proof would be a line or so - the Lemma would be a convenient wrapper for something that already exists?
Aaron Liu (Jan 18 2026 at 01:02):
this probably doesn't deserve its own lemma
Aaron Liu (Jan 18 2026 at 01:02):
but it sounds like you were having trouble proving it so I offered to help if you have some code
Aaron Liu (Jan 18 2026 at 01:03):
we do already have this it's a zero line proof
Harald Helfgott (Jan 18 2026 at 01:04):
I wasn't having trouble proving it (to be sincere: I was about to give a blueprint to Aristotle). I was just surprised that it didn't seem to be there. I do think it deserves to be easily findable by people who know it as "the duality principle". So, sure, a lemma with a zero-line proof and a telling name would be nice.
Harald Helfgott (Jan 18 2026 at 01:04):
Thanks.
Aaron Liu (Jan 18 2026 at 01:08):
oh no we're missing instances
Aaron Liu (Jan 18 2026 at 01:08):
so the proof I have doesn't work
Harald Helfgott (Jan 18 2026 at 01:12):
But you can give a simple proof (even simpler than what I pasted) given what is there, right? Well, I guess that does mean the statement deserves its own Lemma :)
Aaron Liu (Jan 18 2026 at 01:14):
well it didn't end up being zero lines I guess
import Mathlib.Analysis.InnerProductSpace.Adjoint
variable {𝕜 E F : Type*} [RCLike 𝕜]
[NormedAddCommGroup E] [NormedAddCommGroup F]
[InnerProductSpace 𝕜 E] [InnerProductSpace 𝕜 F]
[CompleteSpace E] [CompleteSpace F]
lemma ContinuousLinearMap.norm_adjoint (A : E →L[𝕜] F) : ‖A.adjoint‖ = ‖A‖ :=
-- can't use `_root_.norm_map` here because of missing instances
SemilinearIsometryClass.norm_map _ A
Aaron Liu (Jan 18 2026 at 01:15):
the mathematical content of the proof is in docs#ContinuousLinearMap.adjointAux_norm
Harald Helfgott (Jan 18 2026 at 01:16):
OK - thanks. I think it would be a service to everybody if this were included in Mathlib - I know it's just a wrapper, but it's now more transparent and immediately applicable.
Edward van de Meent (Jan 18 2026 at 01:34):
fwiw, ContinuousLinearMap.adjoint.norm_map A works as proof too
Last updated: Feb 28 2026 at 14:05 UTC