Skip to content

Commit 0540c70

Browse files
scholzhannahxroblot
authored andcommitted
feat: generalize OpenPartialHomeomorph.Defs file to PartialHomeomorph (leanprover-community#39084)
Add `PartialHomeomorph`, which generalises `OpenPartialHomoemorph` by dropping the condition that the source and target be open. In other words, an `OpenPartialHomeomorph` is a `PartialHomeomorph` that additionally has open source and target. This generalisation should find uses for manifolds (extended charts are `PartialHomeomorph`s, but their target is not open for manifolds with boundary). For CW complexes, we will want a `ClosedPartialHomeomorph`: this allows re-using results as much as possible. This PR adds the basic definitions; future PRs will add additional material: leanprover-community#39071 indicates what the eventual result may be. Zulip discussion: [#mathlib4 > Generalizing &leanprover-community#96;PartialHomeomorph&leanprover-community#96;?](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Generalizing.20.60PartialHomeomorph.60.3F/with/536896273)
1 parent 8c946b6 commit 0540c70

13 files changed

Lines changed: 277 additions & 44 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8038,6 +8038,7 @@ public import Mathlib.Topology.Order.T5
80388038
public import Mathlib.Topology.Order.UpperLowerSetTopology
80398039
public import Mathlib.Topology.Order.WithTop
80408040
public import Mathlib.Topology.Partial
8041+
public import Mathlib.Topology.PartialHomeomorph.Defs
80418042
public import Mathlib.Topology.PartitionOfUnity
80428043
public import Mathlib.Topology.Path
80438044
public import Mathlib.Topology.Perfect

Mathlib/Geometry/Manifold/ContMDiffMFDeriv.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ lemma contMDiff_equivTangentBundleProd_symm :
455455
filter_upwards [chart_source_mem_nhds (ModelProd (ModelProd H E) (ModelProd H' E')) (a, b)]
456456
with p hp
457457
-- now we have to check that the original map coincides locally with `pM` read in target chart.
458-
simp only [prodChartedSpace_chartAt, OpenPartialHomeomorph.prod_toPartialEquiv,
458+
simp only [prodChartedSpace_chartAt, OpenPartialHomeomorph.prod_toPartialHomeomorph,
459459
PartialEquiv.prod_source, mem_prod, TangentBundle.mem_chart_source_iff] at hp
460460
let φ (x : E) := I ((chartAt H a.proj) ((chartAt H p.1.proj).symm (I.symm x)))
461461
have D0 : DifferentiableWithinAt 𝕜 φ (Set.range I) (I ((chartAt H p.1.proj) p.1.proj)) := by
@@ -494,7 +494,7 @@ lemma contMDiff_equivTangentBundleProd_symm :
494494
filter_upwards [chart_source_mem_nhds (ModelProd (ModelProd H E) (ModelProd H' E')) (a, b)]
495495
with p hp
496496
-- now we have to check that the original map coincides locally with `pM'` read in target chart.
497-
simp only [prodChartedSpace_chartAt, OpenPartialHomeomorph.prod_toPartialEquiv,
497+
simp only [prodChartedSpace_chartAt, OpenPartialHomeomorph.prod_toPartialHomeomorph,
498498
PartialEquiv.prod_source, mem_prod, TangentBundle.mem_chart_source_iff] at hp
499499
let φ (x : E') := I' ((chartAt H' b.proj) ((chartAt H' p.2.proj).symm (I'.symm x)))
500500
have D0 : DifferentiableWithinAt 𝕜 φ (Set.range I') (I' ((chartAt H' p.2.proj) p.2.proj)) := by

Mathlib/Geometry/Manifold/IsManifold/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ theorem contDiffGroupoid_prod {I : ModelWithCorners 𝕜 E H} {I' : ModelWithCor
751751
e.prod e' ∈ contDiffGroupoid n (I.prod I') := by
752752
obtain ⟨he, he_symm⟩ := he
753753
obtain ⟨he', he'_symm⟩ := he'
754-
constructor <;> simp only [PartialEquiv.prod_source, OpenPartialHomeomorph.prod_toPartialEquiv,
754+
constructor <;> simp only [OpenPartialHomeomorph.prod_toPartialHomeomorph,
755755
contDiffPregroupoid]
756756
· have h3 := ContDiffOn.prodMap he he'
757757
rw [← I.image_eq, ← I'.image_eq, prod_image_image_eq] at h3

Mathlib/Geometry/Manifold/LocalDiffeomorph.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ namespace PartialDiffeomorph
105105
variable (Φ : PartialDiffeomorph I J M N n)
106106

107107
/-- A partial diffeomorphism is also a local homeomorphism. -/
108-
@[expose, simps toPartialEquiv]
108+
@[expose, simps toPartialHomeomorph_toPartialEquiv]
109109
def toOpenPartialHomeomorph : OpenPartialHomeomorph M N where
110110
toPartialEquiv := Φ.toPartialEquiv
111111
open_source := Φ.open_source

Mathlib/Geometry/Manifold/LocalSourceTargetProperty.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ lemma prodMap [IsManifold I n M] [IsManifold I' n M'] [IsManifold J n N] [IsMani
238238
(domChart_mem_maximalAtlas hf) (domChart_mem_maximalAtlas hg)
239239
· apply IsManifold.mem_maximalAtlas_prod
240240
(codChart_mem_maximalAtlas hf) (codChart_mem_maximalAtlas hg)
241-
· simp only [OpenPartialHomeomorph.prod_toPartialEquiv, PartialEquiv.prod_source,
241+
· simp only [OpenPartialHomeomorph.prod_toPartialHomeomorph, PartialEquiv.prod_source,
242242
preimage_prod_map_prod]
243243
exact prod_mono hf.source_subset_preimage_source hg.source_subset_preimage_source
244244
· exact h hf.property hg.property

Mathlib/NumberTheory/NumberField/CanonicalEmbedding/NormLeOne.lean

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,13 @@ variable (K)
248248

249249
theorem expMap_source :
250250
expMap.source = (Set.univ : Set (realSpace K)) := by
251-
simp_rw [expMap, OpenPartialHomeomorph.pi_toPartialEquiv, PartialEquiv.pi_source, expMap_single,
252-
Set.pi_univ Set.univ]
251+
simp_rw [expMap, OpenPartialHomeomorph.pi_toPartialHomeomorph,
252+
PartialEquiv.pi_source, expMap_single, Set.pi_univ Set.univ]
253253

254254
theorem expMap_target :
255255
expMap.target = Set.univ.pi fun (_ : InfinitePlace K) ↦ Set.Ioi 0 := by
256-
simp_rw [expMap, OpenPartialHomeomorph.pi_toPartialEquiv, PartialEquiv.pi_target, expMap_single]
256+
simp_rw [expMap, OpenPartialHomeomorph.pi_toPartialHomeomorph,
257+
PartialEquiv.pi_target, expMap_single]
257258

258259
theorem injective_expMap :
259260
Function.Injective (expMap : realSpace K → realSpace K) :=

Mathlib/Topology/FiberBundle/Trivialization.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,8 @@ initialize_simps_projections Trivialization (toFun → apply, invFun → symm_ap
412412
theorem toPretrivialization_injective :
413413
Function.Injective fun e : Trivialization F proj => e.toPretrivialization := fun e e' h => by
414414
ext1
415-
exacts [OpenPartialHomeomorph.toPartialEquiv_injective
416-
(congr_arg Pretrivialization.toPartialEquiv h), congr_arg Pretrivialization.baseSet h]
415+
exacts [OpenPartialHomeomorph.toPartialEquiv_injective congr(Pretrivialization.toPartialEquiv $h),
416+
congr(Pretrivialization.baseSet $h)]
417417

418418
@[simp, mfld_simps]
419419
theorem coe_coe : ⇑e.toOpenPartialHomeomorph = e :=

Mathlib/Topology/OpenPartialHomeomorph/Basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ theorem isOpen_image_iff_of_subset_source {s : Set X} (hs : s ⊆ e.source) :
122122

123123
/-- A `PartialEquiv` with continuous open forward map and open source is a
124124
`OpenPartialHomeomorph`. -/
125-
@[simps toPartialEquiv]
125+
@[simps toPartialHomeomorph]
126126
def ofContinuousOpenRestrict (e : PartialEquiv X Y) (hc : ContinuousOn e e.source)
127127
(ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : OpenPartialHomeomorph X Y where
128128
toPartialEquiv := e
@@ -145,7 +145,7 @@ theorem coe_ofContinuousOpenRestrict_symm (e : PartialEquiv X Y) (hc : Continuou
145145

146146
/-- A `PartialEquiv` with continuous open forward map and open source is a
147147
`OpenPartialHomeomorph`. -/
148-
@[simps! toPartialEquiv]
148+
@[simps! toPartialHomeomorph]
149149
def ofContinuousOpen (e : PartialEquiv X Y) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
150150
(hs : IsOpen e.source) : OpenPartialHomeomorph X Y :=
151151
ofContinuousOpenRestrict e hc (ho.restrict hs) hs

Mathlib/Topology/OpenPartialHomeomorph/Composition.lean

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ variable (e' : OpenPartialHomeomorph Y Z)
3737

3838
/-- Composition of two open partial homeomorphisms when the target of the first and the source of
3939
the second coincide. -/
40-
@[simps! apply symm_apply toPartialEquiv, simps! -isSimp source target]
40+
@[simps! apply symm_apply toPartialHomeomorph, simps! -isSimp source target]
4141
protected def trans' (h : e.target = e'.source) : OpenPartialHomeomorph X Z where
4242
toPartialEquiv := PartialEquiv.trans' e.toPartialEquiv e'.toPartialEquiv h
4343
open_source := e.open_source
@@ -103,11 +103,11 @@ theorem trans_assoc (e'' : OpenPartialHomeomorph Z Z') :
103103

104104
@[simp, mfld_simps]
105105
theorem trans_refl : e.trans (OpenPartialHomeomorph.refl Y) = e :=
106-
toPartialEquiv_injective e.1.trans_refl
106+
toPartialHomeomorph_injective (PartialHomeomorph.toPartialEquiv_injective e.1.trans_refl)
107107

108108
@[simp, mfld_simps]
109109
theorem refl_trans : (OpenPartialHomeomorph.refl X).trans e = e :=
110-
toPartialEquiv_injective e.1.refl_trans
110+
toPartialHomeomorph_injective (PartialHomeomorph.toPartialEquiv_injective e.1.refl_trans)
111111

112112
theorem trans_ofSet {s : Set Y} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
113113
OpenPartialHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) <| by
@@ -197,7 +197,8 @@ variable (e : X ≃ₜ Y) (e' : Y ≃ₜ Z)
197197
@[simp, mfld_simps]
198198
theorem trans_toOpenPartialHomeomorph : (e.trans e').toOpenPartialHomeomorph =
199199
e.toOpenPartialHomeomorph.trans e'.toOpenPartialHomeomorph :=
200-
OpenPartialHomeomorph.toPartialEquiv_injective <| Equiv.trans_toPartialEquiv _ _
200+
OpenPartialHomeomorph.toPartialHomeomorph_injective <|
201+
PartialHomeomorph.toPartialEquiv_injective <| Equiv.trans_toPartialEquiv _ _
201202

202203
/-- Precompose an open partial homeomorphism with a homeomorphism.
203204
We modify the source and target to have better definitional behavior. -/

Mathlib/Topology/OpenPartialHomeomorph/Constructions.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ section Prod
7676

7777
/-- The product of two open partial homeomorphisms, as an open partial homeomorphism on the product
7878
space. -/
79-
@[simps! (attr := mfld_simps) -fullyApplied toPartialEquiv apply,
79+
@[simps! (attr := mfld_simps) -fullyApplied toPartialHomeomorph apply,
8080
simps! -isSimp source target symm_apply]
8181
def prod (eX : OpenPartialHomeomorph X X') (eY : OpenPartialHomeomorph Y Y') :
8282
OpenPartialHomeomorph (X × Y) (X' × Y') where
@@ -137,7 +137,7 @@ variable {ι : Type*} [Finite ι] {X Y : ι → Type*} [∀ i, TopologicalSpace
137137
[∀ i, TopologicalSpace (Y i)] (ei : ∀ i, OpenPartialHomeomorph (X i) (Y i))
138138

139139
/-- The product of a finite family of `OpenPartialHomeomorph`s. -/
140-
@[simps! toPartialEquiv apply symm_apply]
140+
@[simps! toPartialHomeomorph apply symm_apply]
141141
def pi : OpenPartialHomeomorph (∀ i, X i) (∀ i, Y i) where
142142
toPartialEquiv := PartialEquiv.pi fun i => (ei i).toPartialEquiv
143143
open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
@@ -164,7 +164,7 @@ To ensure the maps `toFun` and `invFun` are inverse of each other on the new `so
164164
the definition assumes that the sets `s` and `t` are related both by `e.is_image` and `e'.is_image`.
165165
To ensure that the new maps are continuous on `source`/`target`, it also assumes that `e.source` and
166166
`e'.source` meet `frontier s` on the same set and `e x = e' x` on this intersection. -/
167-
@[simps! -fullyApplied toPartialEquiv apply]
167+
@[simps! -fullyApplied toPartialHomeomorph apply]
168168
def piecewise (e e' : OpenPartialHomeomorph X Y) (s : Set X) (t : Set Y) [∀ x, Decidable (x ∈ s)]
169169
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
170170
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)

0 commit comments

Comments
 (0)