@@ -307,16 +307,15 @@ noncomputable section
307307
308308variable [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+
353389variable (φ 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
370408end
@@ -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