Skip to content

Commit 29b5976

Browse files
feat(Geometry/Convex/Cone): Rename PointedCone.span to PointedCone.hull (leanprover-community#36953)
Rename `PointedCone.span` to `PointedCone.hull`. Also adjusting cone lemma names and doc-strings. This PR is the outcome of the discussion here: [#mathlib4 > Design for positive cones @ 💬](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Design.20for.20positive.20cones/near/580814590) Co-authored-by: Martin Winter <martin.winter.math@gmail.com>
1 parent a624dbd commit 29b5976

4 files changed

Lines changed: 34 additions & 25 deletions

File tree

Mathlib/Geometry/Convex/Cone/Dual.lean

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,19 @@ variable (s) in
103103

104104
set_option backward.isDefEq.respectTransparency false in
105105
@[simp]
106-
lemma dual_span (s : Set M) : dual p (span R s) = dual p s := by
106+
lemma dual_hull (s : Set M) : dual p (hull R s) = dual p s := by
107107
refine le_antisymm (dual_anti Submodule.subset_span) (fun x hx y hy => ?_)
108108
induction hy using Submodule.span_induction with
109109
| mem _y h => exact hx h
110110
| zero => simp
111111
| add y z _hy _hz hy hz => rw [map_add, add_apply]; exact add_nonneg hy hz
112112
| smul t y _hy hy => rw [map_smul_of_tower, Nonneg.mk_smul, smul_apply]; exact mul_nonneg t.2 hy
113113

114+
@[deprecated "`PointedCone.span` was renamed to `PointedCone.hull`" (since := "2026-03-22")]
115+
alias dual_span := dual_hull
116+
114117
@[simp] lemma dual_sup (C D : PointedCone R M) : dual p (C ⊔ D : PointedCone R M) = dual p (C ∪ D)
115-
:= by simp [← dual_span]
118+
:= by simp [← dual_hull]
116119

117120
variable {M' : Type*} [AddCommGroup M'] [Module R M']
118121

Mathlib/Geometry/Convex/Cone/Pointed.lean

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,25 @@ lemma mem_ofSubmodule_iff {S : Submodule R E} {x : E} : x ∈ (S : PointedCone R
5555

5656
set_option backward.isDefEq.respectTransparency false in
5757
lemma ofSubmodule_inj {S T : Submodule R E} : ofSubmodule S = ofSubmodule T ↔ S = T :=
58-
Submodule.restrictScalars_inj ..
58+
restrictScalars_inj ..
5959

6060
set_option backward.isDefEq.respectTransparency false in
6161
/-- Coercion from submodules to pointed cones as an order embedding. -/
6262
abbrev ofSubmoduleEmbedding : Submodule R E ↪o PointedCone R E :=
63-
Submodule.restrictScalarsEmbedding ..
63+
restrictScalarsEmbedding ..
6464

6565
set_option backward.isDefEq.respectTransparency false in
6666
/-- Coercion from submodules to pointed cones as a lattice homomorphism. -/
6767
abbrev ofSubmoduleLatticeHom : CompleteLatticeHom (Submodule R E) (PointedCone R E) :=
68-
Submodule.restrictScalarsLatticeHom ..
68+
restrictScalarsLatticeHom ..
6969

7070
set_option backward.isDefEq.respectTransparency false in
7171
lemma ofSubmodule_inf (S T : Submodule R E) : S ⊓ T = (S ⊓ T : PointedCone R E) :=
72-
Submodule.restrictScalars_inf _ _ _
72+
restrictScalars_inf _ _ _
7373

7474
set_option backward.isDefEq.respectTransparency false in
7575
lemma ofSubmodule_sup (S T : Submodule R E) : S ⊔ T = (S ⊔ T : PointedCone R E) :=
76-
Submodule.restrictScalars_sup _ _ _
76+
restrictScalars_sup _ _ _
7777

7878
lemma ofSubmodule_sInf (s : Set (Submodule R E)) : sInf s = sInf (ofSubmodule '' s) :=
7979
ofSubmoduleLatticeHom.map_sInf' s
@@ -170,24 +170,30 @@ def ofConeComb (C : Set E) (nonempty : C.Nonempty)
170170
.ofLinearComb C nonempty fun x hx y hy ⟨a, ha⟩ ⟨b, hb⟩ => coneComb x hx y hy a ha b hb
171171

172172
variable (R) in
173-
/-- The span of a set `s` is the smallest pointed cone that contains `s`.
173+
/-- The cone hull of a set `s` is the smallest pointed cone that contains `s`.
174174
175-
Pointed cones being defined as submodules over nonnegative scalars, this is exactly the
176-
submodule span of `s` w.r.t. nonnegative scalars. -/
177-
abbrev span (s : Set E) : PointedCone R E := Submodule.span R≥0 s
175+
Pointed cones being defined as submodules over nonnegative scalars, this is implemented as
176+
the submodule span of `s` w.r.t. nonnegative scalars. -/
177+
abbrev hull (s : Set E) : PointedCone R E := span R≥0 s
178178

179-
lemma subset_span {s : Set E} : s ⊆ PointedCone.span R s := Submodule.subset_span
179+
lemma subset_hull {s : Set E} : s ⊆ PointedCone.hull R s := subset_span
180+
181+
@[deprecated "`PointedCone.span` was renamed to `PointedCone.hull`" (since := "2026-03-22")]
182+
alias subset_span := subset_hull
180183

181184
/-- Elements of the cone hull are expressible as conical combination of elements from s. -/
182-
lemma mem_span_set {s : Set E} : x ∈ span R s ↔
185+
lemma mem_hull_set {s : Set E} : x ∈ hull R s ↔
183186
∃ c : E →₀ R, ↑c.support ⊆ s ∧ (∀ y, 0 ≤ c y) ∧ c.sum (fun m r => r • m) = x := by
184-
rw [Submodule.mem_span_set]
187+
rw [mem_span_set]
185188
constructor
186189
· rintro ⟨c, hc, rfl⟩
187190
exact ⟨⟨c.support, Subtype.val ∘ c, by simp [← Subtype.val_inj]⟩, hc, fun y ↦ (c y).2, rfl⟩
188191
· rintro ⟨c, hc, hc₀, rfl⟩
189192
exact ⟨⟨c.support, fun y ↦ ⟨c y, hc₀ _⟩, by simp⟩, hc, rfl⟩
190193

194+
@[deprecated "`PointedCone.span` was renamed to `PointedCone.hull`" (since := "2026-03-22")]
195+
alias mem_span_set := mem_hull_set
196+
191197
end Definitions
192198

193199
section Maps

Mathlib/Geometry/Convex/Cone/Simplicial.lean

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ public import Mathlib.Geometry.Convex.Cone.Pointed
1010
/-!
1111
# Simplicial cones
1212
13-
A **simplicial cone** is a pointed convex cone that equals the conic span of a finite linearly
13+
A **simplicial cone** is a pointed convex cone that equals the conic hull of a finite linearly
1414
independent set of vectors. We do not require that the generators span the ambient module.
1515
However, when the cone is also generating, its generators linearly span the module.
1616
1717
## Main definitions
1818
19-
* `PointedCone.IsSimplicial`: A pointed cone is simplicial if it equals the conic span of a finite
19+
* `PointedCone.IsSimplicial`: A pointed cone is simplicial if it equals the conic hull of a finite
2020
linearly independent set.
2121
2222
## Results
2323
24-
* `PointedCone.IsSimplicial.span`: The conic span of a linearly independent finite set is
24+
* `PointedCone.IsSimplicial.span`: The conic hull of a linearly independent finite set is
2525
simplicial.
2626
2727
## References
@@ -38,16 +38,16 @@ variable (C : PointedCone R M)
3838

3939
namespace PointedCone
4040

41-
/-- A pointed cone is simplicial if it equals the conic span of a finite set that is linearly
41+
/-- A pointed cone is simplicial if it equals the conic hull of a finite set that is linearly
4242
independent over `R`. -/
4343
def IsSimplicial : Prop :=
44-
∃ s : Set M, s.Finite ∧ LinearIndepOn R id s ∧ span R s = C
44+
∃ s : Set M, s.Finite ∧ LinearIndepOn R id s ∧ hull R s = C
4545

4646
namespace IsSimplicial
4747

48-
/-- The conic span of a finite linearly independent set is simplicial. -/
49-
protected theorem span {s : Set M} (hs : s.Finite) (hli : LinearIndepOn R id s) :
50-
(PointedCone.span R s).IsSimplicial := ⟨s, hs, hli, rfl⟩
48+
/-- The conic hull of a finite linearly independent set is simplicial. -/
49+
protected theorem hull {s : Set M} (hs : s.Finite) (hli : LinearIndepOn R id s) :
50+
(PointedCone.hull R s).IsSimplicial := ⟨s, hs, hli, rfl⟩
5151

5252
end IsSimplicial
5353

Mathlib/Geometry/Convex/Cone/TensorProduct.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ namespace PointedCone
5858
tensor products `x ⊗ₜ y` with `x ∈ C₁` and `y ∈ C₂`. -/
5959
noncomputable def minTensorProduct (C₁ : PointedCone R G) (C₂ : PointedCone R H) :
6060
PointedCone R (G ⊗[R] H) :=
61-
.span R (.image2 (· ⊗ₜ[R] ·) C₁ C₂)
61+
.hull R (.image2 (· ⊗ₜ[R] ·) C₁ C₂)
6262

6363
/-- The maximal tensor product of two cones is the dual (pointed cone) of the minimal tensor product
6464
of the dual cones. -/
@@ -75,7 +75,7 @@ theorem mem_maxTensorProduct {C₁ : PointedCone R G} {C₂ : PointedCone R H} {
7575
∀ φ ∈ PointedCone.dual (dualPairing R G).flip C₁,
7676
∀ ψ ∈ PointedCone.dual (dualPairing R H).flip C₂,
7777
0 ≤ dualDistrib R G H (φ ⊗ₜ[R] ψ) z := by
78-
simp only [maxTensorProduct, minTensorProduct, dual_span, mem_dual, Set.forall_mem_image2,
78+
simp only [maxTensorProduct, minTensorProduct, dual_hull, mem_dual, Set.forall_mem_image2,
7979
SetLike.mem_coe, mem_dual, LinearMap.flip_apply, dualPairing_apply]
8080

8181
/-- Elementary tensors are members of the maximal tensor product. -/
@@ -110,7 +110,7 @@ variable {C₁ C₁' : PointedCone R G} {C₂ C₂' : PointedCone R H} {z : G
110110
@[simp]
111111
theorem minTensorProduct_comm :
112112
(minTensorProduct C₁ C₂).map (TensorProduct.comm R G H) = minTensorProduct C₂ C₁ := by
113-
simp [minTensorProduct, map, span, Submodule.map_span, Set.image_image2,
113+
simp [minTensorProduct, map, hull, Submodule.map_span, Set.image_image2,
114114
Set.image2_swap (· ⊗ₜ[R] · : H → G → _)]
115115

116116
/-- The maximal tensor product is commutative. -/

0 commit comments

Comments
 (0)