Skip to content

Commit 3ceab66

Browse files
committed
WIP: try removing non-emptiness hypotheses... harder than I thought
- my construction only makes sense if H and M are both non-empty - if both are empty, there is another construction - *if* we knew M has a charted space, we'd deduce that non-emptiness of M implies that of M. but we do not know yet... need to think!
1 parent 85cbed3 commit 3ceab66

1 file changed

Lines changed: 52 additions & 12 deletions

File tree

Mathlib/Geometry/Manifold/EmbeddedSubmanifold.lean

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -307,16 +307,15 @@ noncomputable section
307307

308308
variable [TopologicalSpace M] [IsManifold I' n M']
309309

310-
variable [Nonempty H] {φ : PartialHomeomorph M' H'} {f : M → M'}
310+
variable {φ : PartialHomeomorph M' H'} {f : M → M'}
311311

312312
-- TODO: remove non-emptiness hypotheses from this definition: if M is empty, have nothing to do
313313

314314
@[simps]
315-
noncomputable def _root_.PartialEquiv.pullback_sliceModel [Nonempty M] (φ : PartialEquiv M' H')
316-
{f : M → M'} (hf : InjOn f (f ⁻¹' φ.source))
315+
noncomputable def _root_.PartialEquiv.pullback_sliceModel_of_nonempty [Nonempty H] [Nonempty M]
316+
(φ : PartialEquiv M' H') {f : M → M'} (hf : InjOn f (f ⁻¹' φ.source))
317317
-- TODO: is hfoo the right condition to impose?
318-
(h : SliceModel F I I') (hfoo : φ.target ⊆ range h.map) : PartialEquiv M H
319-
where
318+
(h : SliceModel F I I') (hfoo : φ.target ⊆ range h.map) : PartialEquiv M H where
320319
toFun := h.inverse ∘ φ ∘ f
321320
invFun := (localInverseOn f (f ⁻¹' φ.source)) ∘ φ.symm ∘ h.map
322321
source := f ⁻¹' φ.source
@@ -350,21 +349,60 @@ noncomputable def _root_.PartialEquiv.pullback_sliceModel [Nonempty M] (φ : Par
350349
-- _ = h.inverse (h.map x) := sorry
351350
-- _ = x := sorry
352351

352+
def PartialEquiv.empty (α β : Type*) [IsEmpty α] [IsEmpty β] : PartialEquiv α β where
353+
toFun x := (IsEmpty.false x).elim
354+
invFun x := (IsEmpty.false x).elim
355+
source := univ
356+
target := univ
357+
map_source' := by simp
358+
map_target' := by simp
359+
left_inv' := by simp
360+
right_inv' := by simp
361+
362+
open scoped Classical in
363+
noncomputable def _root_.PartialEquiv.pullback_sliceModel [Nonempty H] (φ : PartialEquiv M' H')
364+
{f : M → M'} (hf : InjOn f (f ⁻¹' φ.source))
365+
-- TODO: is hfoo the right condition to impose?
366+
(h : SliceModel F I I') (hfoo : φ.target ⊆ range h.map) : PartialEquiv M H :=
367+
368+
if hM : Nonempty M then PartialEquiv.pullback_sliceModel_of_nonempty φ hf h hfoo else
369+
have : IsEmpty M := not_nonempty_iff.mp hM
370+
have : IsEmpty H := sorry -- TODO: need to think, is this automatic?
371+
PartialEquiv.empty M H
372+
373+
@[simp]
374+
lemma pullback_sliceModel_source [Nonempty H] (φ : PartialEquiv M' H') {f : M → M'}
375+
(hf : InjOn f (f ⁻¹' φ.source)) (h : SliceModel F I I')
376+
(hfoo : φ.target ⊆ range (SliceModel.map F I I')) :
377+
(φ.pullback_sliceModel hf h hfoo).source = f ⁻¹' φ.source := by
378+
by_cases h : Nonempty M
379+
· sorry -- simp fails
380+
· sorry -- simp fails
381+
382+
@[simp]
383+
lemma pullback_sliceModel_target [Nonempty H] (φ : PartialEquiv M' H') {f : M → M'}
384+
(hf : InjOn f (f ⁻¹' φ.source)) (h : SliceModel F I I')
385+
(hfoo : φ.target ⊆ range (SliceModel.map F I I')) :
386+
(φ.pullback_sliceModel hf h hfoo).target = h.map ⁻¹' φ.target := by
387+
sorry
388+
353389
variable (φ f) in
354-
noncomputable def pullback_sliceModel [Nonempty M] (h : SliceModel F I I') (hf : Continuous f)
390+
noncomputable def pullback_sliceModel [Nonempty H] (h : SliceModel F I I') (hf : Continuous f)
355391
(hf' : InjOn f (f ⁻¹' φ.source))
356392
(hfoo : φ.target ⊆ range h.map) : PartialHomeomorph M H where
357393
toPartialEquiv := φ.toPartialEquiv.pullback_sliceModel hf' h hfoo
358-
open_source := hf.isOpen_preimage _ φ.open_source
359-
open_target := h.hmap.continuous.isOpen_preimage _ φ.open_target
394+
open_source := by simp [hf.isOpen_preimage _ φ.open_source]
395+
open_target := by simp [h.hmap.continuous.isOpen_preimage _ φ.open_target]
360396
continuousOn_toFun := by
361-
simp only [PartialEquiv.pullback_sliceModel_source]
362-
change ContinuousOn (h.inverse ∘ φ ∘ f) (f ⁻¹' φ.source)
397+
simp only [pullback_sliceModel_source]
398+
by_cases hM : Nonempty M; swap
399+
· sorry -- source is empty, nothing to prove
400+
sorry /-change ContinuousOn (h.inverse ∘ φ ∘ f) (f ⁻¹' φ.source)
363401
have : ContinuousOn (φ ∘ f) (f ⁻¹' φ.source) :=
364402
φ.continuousOn_toFun.comp hf.continuousOn fun ⦃x⦄ a ↦ a
365403
apply h.continuousOn_inverse_range.comp this
366404
intro x hx
367-
apply hfoo (by simp_all)
405+
apply hfoo (by simp_all) -/
368406
continuousOn_invFun := sorry -- should be similar
369407

370408
end
@@ -449,7 +487,9 @@ noncomputable def chartedSpace (inst : IsImmersedSubmanifold M M' n (f := f) (h
449487
ChartedSpace H M where
450488
atlas := { inst.chartAt x | x : M }
451489
chartAt x := inst.chartAt x
452-
mem_chart_source x := by simp [chartAt, mem_sliceChartAt_source (f x)]
490+
mem_chart_source x := by
491+
simp
492+
simp [chartAt, mem_sliceChartAt_source (f x)]
453493
chart_mem_atlas x := by rw [mem_setOf]; use x
454494

455495
-- Cannot make an instance because Lean errors about synthesization order

0 commit comments

Comments
 (0)