Skip to content

feat(Analysis/LocallyConvex/Polar): Bipolar theorem - #26345

Open
mans0954 wants to merge 304 commits into
leanprover-community:masterfrom
mans0954:mans0954/bipolar-theorem
Open

mans0954 wants to merge 304 commits into
leanprover-community:masterfrom
mans0954:mans0954/bipolar-theorem

Conversation

@mans0954

@mans0954 mans0954 commented Jun 24, 2025 •

Copy link
Copy Markdown
Contributor

The bipolar theorem states that the polar of the polar of a set s is equal to the closed absolutely convex hull of s.

The argument here follows Conway, Chapter V. 1.8.

This PR continues the work from #20843.

Original PR: #20843

mans0954 and others added 30 commits February 21, 2025 06:40
Co-authored-by: Jireh Loreaux <loreaujy@gmail.com>
Co-authored-by: Jireh Loreaux <loreaujy@gmail.com>
Co-authored-by: Jireh Loreaux <loreaujy@gmail.com>
mathlib-bors Bot pushed a commit that referenced this pull request Feb 24, 2026
…35422)

This PR uses the material in Topology/Algebra/Module/WeakBilin.lean from the unfinished PR #26345 by @mans0954.

Given a bilinear form `B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜`, every continuous functional on `E` endowed with the `σ(E, F; B)`-topology is of the form `x ↦ B(x, y)` for some `y : F`.

The result doesn't generally seem to be named, but Narici-Beckenstein's "Topological Vector Spaces" calls it the "weak representation theorem", a term we have used for the docstring.

Co-authored-by: David Gross <david.gross@thp.uni-koeln.de>
pfaffelh pushed a commit to pfaffelh/mathlib4 that referenced this pull request Mar 2, 2026
…eanprover-community#35422)

This PR uses the material in Topology/Algebra/Module/WeakBilin.lean from the unfinished PR leanprover-community#26345 by @mans0954.

Given a bilinear form `B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜`, every continuous functional on `E` endowed with the `σ(E, F; B)`-topology is of the form `x ↦ B(x, y)` for some `y : F`.

The result doesn't generally seem to be named, but Narici-Beckenstein's "Topological Vector Spaces" calls it the "weak representation theorem", a term we have used for the docstring.

Co-authored-by: David Gross <david.gross@thp.uni-koeln.de>
@j-loreaux

Copy link
Copy Markdown
Contributor

I've discussed with Filippo, and due to time constraints for him, I will take over this PR.

@github-actions github-actions Bot removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Mar 23, 2026
@mathlib-merge-conflicts mathlib-merge-conflicts Bot added the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Apr 5, 2026
@mathlib-merge-conflicts

Copy link
Copy Markdown

This pull request has conflicts, please merge master and resolve them.

map_smul' _ _ := by ext; simp

open LinearMap in
lemma dualEmbedding_injective_of_separatingRight {E F : Type*} [AddCommGroup E] [AddCommGroup F]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

shouldn't this be eval instead of dualEmbedding?

Suggested change
lemma dualEmbedding_injective_of_separatingRight {E F : Type*} [AddCommGroup E] [AddCommGroup F]
lemma eval_injective_of_separatingRight {E F : Type*} [AddCommGroup E] [AddCommGroup F]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Maybe.

The lemma got merged as #35422. We took the name from the existing PR. Should we change it? @j-loreaux?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I guess _root_.WeakBilin.eval_surjective would make sense.

@github-actions github-actions Bot removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Apr 15, 2026
@github-actions github-actions Bot removed the large-import Automatically added label for PRs with a significant increase in transitive imports label Apr 15, 2026
Comment thread Mathlib/Topology/Algebra/Module/Spaces/WeakBilin.lean Outdated
@j-loreaux j-loreaux removed awaiting-author Reply -awaiting-author to remove the label on your PR once you have addressed all comments. please-adopt Inactive PR (would be valuable to adopt) labels Apr 15, 2026

@faenuccio faenuccio left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I've left a bunch of comments, but beyond these it looks good to me.

[AddCommMonoid F] [Module 𝕜 F] [SMul 𝕝 𝕜] [Module 𝕝 E] [s : IsScalarTower 𝕝 𝕜 E]
(B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜) : IsScalarTower 𝕝 𝕜 (WeakBilin B) := s

/-- The canonical linear equivalence (over `𝕝`) between `WeakBilin (B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜)`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
/-- The canonical linear equivalence (over `𝕝`) between `WeakBilin (B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜)`
/-- The linear equivalence (over `𝕝`) between `WeakBilin (B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜)`

/-
When `B` is left-separating, the closure of the empty set is the singleton `{0}`. This is in
contrast to the closed absolutely convex hull of the empty set, which is again the empty set.
c.f. `closureOperator_polar_gc_nonempty` below.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
c.f. `closureOperator_polar_gc_nonempty` below.
cf. `closureOperator_polar_gc_nonempty` below.

contrast to the closed absolutely convex hull of the empty set, which is again the empty set.
c.f. `closureOperator_polar_gc_nonempty` below.
-/
example (B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜) (h : SeparatingLeft B) :

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why is this an example?


open WeakBilin
/-
The Bipolar Theorem: The bipolar of a set coincides with its closed absolutely convex hull.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I would add to this docstring some comment about the setting (what is 𝕜, what is E, what is B, etc) so that someone landing on the result can have a quick grasp of the situation.

Comment on lines +133 to +135
This fails when `s` is empty. Indeed, `closedAbsConvexHull (E := WeakBilin B) 𝕜 s` is the empty set,
but `B.polar_gc.closureOperator s` equals `{0}` when `B` is left separating (see example above).
-/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
This fails when `s` is empty. Indeed, `closedAbsConvexHull (E := WeakBilin B) 𝕜 s` is the empty set,
but `B.polar_gc.closureOperator s` equals `{0}` when `B` is left separating (see example above).
-/
This fails when `s` is empty. Indeed, `closedAbsConvexHull (E := WeakBilin B) 𝕜 ∅` is the empty set,
but `B.polar_gc.closureOperator ∅` equals `{0}` when `B` is left separating (see example above).
-/

RCLike.geometric_hahn_banach_closed_point (𝕜 := 𝕜)
(by rw [← convex_RCLike_iff_convex_real (K := 𝕜)]; exact absConvex_convexClosedHull.2)
isClosed_closedAbsConvexHull hx
-- `0` is in `(closedAbsConvexHull 𝕜) s` so `u` must be strictly positive

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
-- `0` is in `(closedAbsConvexHull 𝕜) s` so `u` must be strictly positive
-- `0` is in `(closedAbsConvexHull 𝕜) s` so `u` must be strictly positive.

have f_zero_lt_u : RCLike.re (f 0) < u :=
(hf₁ 0) (absConvexHull_subset_closedAbsConvexHull zero_mem_absConvexHull)
rw [map_zero, map_zero] at f_zero_lt_u
-- Rescale `f` as `g` in order that for all `a` in `(closedAbsConvexHull 𝕜) s` `Re (g a) < 1`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
-- Rescale `f` as `g` in order that for all `a` in `(closedAbsConvexHull 𝕜) s` `Re (g a) < 1`
-- Rescale `f` as `g` in order that for all `a` in `(closedAbsConvexHull 𝕜) s` `Re (g a) < 1`.

rw [fg, ContinuousLinearMap.coe_smul', Pi.smul_apply, RCLike.smul_re, one_div,
← (inv_mul_cancel₀ (lt_iff_le_and_ne.mp f_zero_lt_u).2.symm)]
exact mul_lt_mul_of_pos_left ((hf₁ _) ha) (inv_pos_of_pos f_zero_lt_u)
-- The dual embedding is surjective, let `f₀` be the element of `F` corresponding to `g`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
-- The dual embedding is surjective, let `f₀` be the element of `F` corresponding to `g`
-- The dual embedding is surjective, let `f₀` be the element of `F` corresponding to `g`:

exact mul_lt_mul_of_pos_left ((hf₁ _) ha) (inv_pos_of_pos f_zero_lt_u)
-- The dual embedding is surjective, let `f₀` be the element of `F` corresponding to `g`
obtain ⟨f₀, hf₀⟩ := (pairing B).dualEmbedding_surjective g
-- Then, by construction, `f₀` is in the polar of `s`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
-- Then, by construction, `f₀` is in the polar of `s`
-- Then, by construction, `f₀` is in the polar of `s`.

Comment on lines +121 to +126
ContinuousLinearMap.coe_smul', ContinuousLinearMap.coe_mk', Pi.smul_apply,
Algebra.mul_smul_comm]
rw [← smul_eq_mul, ← smul_assoc]
norm_cast
simp only [smul_eq_mul, mul_inv_cancel₀ (ne_of_lt f_zero_lt_u).symm, map_one, one_mul]
exact flip_apply ..

@faenuccio faenuccio Apr 19, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
ContinuousLinearMap.coe_smul', ContinuousLinearMap.coe_mk', Pi.smul_apply,
Algebra.mul_smul_comm]
rw [← smul_eq_mul, ← smul_assoc]
norm_cast
simp only [smul_eq_mul, mul_inv_cancel₀ (ne_of_lt f_zero_lt_u).symm, map_one, one_mul]
exact flip_apply ..
simp only [← RCLike.re_ofReal_mul, map_inv₀, ← u_smul_g_eq_f, ← hf₀, WeakBilin.eval, coe_mk,
AddHom.coe_mk, ContinuousLinearMap.coe_smul', ContinuousLinearMap.coe_mk', Pi.smul_apply,
Algebra.mul_smul_comm]
rw [← smul_eq_mul, ← smul_assoc]
norm_cast
simp [mul_inv_cancel₀ (ne_of_lt f_zero_lt_u).symm, flip_apply]

@faenuccio faenuccio added the awaiting-author Reply -awaiting-author to remove the label on your PR once you have addressed all comments. label Apr 19, 2026
@j-loreaux

Copy link
Copy Markdown
Contributor

I have had some ideas about how to greatly improve the statement (as well as adding additional versions), but it requires a bigger refactor, so unfortunately this will sit a while longer, but it is on my TODO list with a relatively high priority.

I will address the comments above when I finish the background changes required.

kim-em pushed a commit to roed-math/TauCeti-w2-fresh that referenced this pull request Oct 17, 2026
…ject#17829)

This PR proves the bipolar theorem for real and complex locally convex spaces. Characterize the closure of a nonempty absolutely convex set by the continuous linear functionals bounded by one on it, and identify the bipolar of any set with its closed absolutely convex hull after adjoining zero.

Advance [BanachSpaceTheory/README.md, B1, “Duality and weak topologies”](https://github.com/TauCetiProject/TauCetiRoadmap/blob/main/BanachSpaceTheory/README.md#b1-duality-and-weak-topologies), specifically “Prove the bipolar theorem for absolutely convex sets.” This directly closes that named target using the merged polar and Hahn–Banach infrastructure. After this PR, outstanding B1 work includes Goldstine (TauCetiProject#17712), the norm double-annihilator theorem (TauCetiProject#16832), and the explicit compatible metric on separable dual balls. Open-work and recent-merge scans, focused bipolar searches, and searches of pinned Mathlib and Tau Ceti found no overlapping implementation. Cooperative claim registration returned the documented exit-2 fallback because canonical claim-ref writes were denied.

Add `TauCeti/Analysis/LocallyConvex/Polar.lean` (66 lines) and `TauCeti/Analysis/LocallyConvex/Bipolar.lean` (111 lines): six theorems, with no new definitions, instances, or notation. The algebraic hull-invariance lemma works for any bilinear pairing of modules over an `RCLike` field, without topology or additive inverses. The bipolar theorems require neither completeness, separability, nor Hausdorffness. The arbitrary-set statement handles the empty set explicitly: Mathlib's absolutely convex hull of the empty set is empty, whereas a bipolar contains zero.

Reuse `LinearMap.polar_AbsConvex`, the polar Galois connection, `RCLike.geometric_hahn_banach_closed_point`, and `RCLike.exists_norm_eq_mul_self`. The bipolar module cites Megginson, §2.6, and Christopher Hoskin's [Mathlib PR #26345](leanprover-community/mathlib4#26345), consulted for the bilinear-pairing formulation requested by the roadmap. No Mathlib infrastructure or external formalization is vendored.

Read the shared protocol and all ten rubrics: scope, correctness, reuse, attribution, api-design, generality, placement, naming, documentation, and proof-quality. Self-review generalizes the algebraic hull lemma from the continuous dual to arbitrary bilinear pairings, weakens its additive assumptions to commutative monoids, and places it in the native `LinearMap` namespace in a separate polar module. The resulting API retains the separation witness, both bipolar forms, and a closed-hull membership criterion; the hull-invariance lemmas are registered for simplification. Repeated source searches found no existing replacement. Ordinary-import examples check a real open unit ball, a complex closed disk, the empty set, and a complex two-point hull.

Foreground cache retrieval, the full library build, and the axiom audit pass. All 14 default environment linters report zero errors on the six new declarations. The whole-library style wrapper hits this host's command-line length limit; its unchanged header checker and Mathlib's text-style checker pass when run directly on the two new modules.

Roadmap: BanachSpaceTheory

<!--tauceti-target:v1 {"focus":"BanachSpaceTheory","id":"bipolar-theorem"}-->

🤖 Prepared with Codex

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-author Reply -awaiting-author to remove the label on your PR once you have addressed all comments. t-analysis Analysis (normed *, calculus)

Projects

None yet

Development

Successfully merging this pull request may close these issues.