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 VV, WW be Hilbert spaces, and let A:VWA : V \to W be a bounded linear operator. Then the operator norms of AA and its adjoint coincide:

A=A.\|A\| = \|A^*\|.

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):

docs#norm_map

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