@@ -45,6 +45,8 @@ This shortens the overall argument, as the definition of submersions has the sam
4545* `IsImmersionAtOfComplement.congr_F`, `IsImmersionOfComplement.congr_F`:
4646 being an immersion (at `x`) w.r.t. `F` is stable under
4747 replacing the complement `F` by an isomorphic copy
48+ * `IsOpen.isImmersionAtOfComplement` and `IsOpen.isImmersionAt`:
49+ the set of points where `IsImmersionAt(OfComplement)` holds is open.
4850
4951 ## Implementation notes
5052
@@ -64,7 +66,6 @@ This shortens the overall argument, as the definition of submersions has the sam
6466 ## TODO
6567* The converse to `IsImmersionAtOfComplement.congr_F` also holds: any two complements are
6668 isomorphic, as they are isomorphic to the cokernel of the differential `mfderiv I J f x`.
67- * The set where `IsImmersionAt(OfComplement)` holds is open.
6869* `IsImmersionAt.contMDiffAt`: if f is an immersion at `x`, it is `C^n` at `x`.
6970* `IsImmersion.contMDiff`: if f is an immersion, it is `C^n`.
7071* `IsImmersionAt.prodMap`: the product of two immersions is an immersion.
@@ -356,6 +357,12 @@ lemma congr_F (e : F ≃L[𝕜] F') :
356357 IsImmersionAtOfComplement F I J n f x ↔ IsImmersionAtOfComplement F' I J n f x :=
357358 ⟨fun h ↦ trans_F (e := e) h, fun h ↦ trans_F (e := e.symm) h⟩
358359
360+ /- The set of points where `IsImmersionAtOfComplement` holds is open. -/
361+ lemma _root_.IsOpen.isImmersionAtOfComplement :
362+ IsOpen {x | IsImmersionAtOfComplement F I J n f x} := by
363+ simp_rw [IsImmersionAtOfComplement_def]
364+ exact .liftSourceTargetPropertyAt
365+
359366/-- If `f` is an immersion at `x` w.r.t. some complement `F`, it is an immersion at `x`.
360367
361368Note that the proof contains a small formalisation-related subtlety: `F` can live in any universe,
@@ -515,6 +522,14 @@ lemma congr_iff (hfg : f =ᶠ[𝓝 x] g) :
515522 IsImmersionAt I J n f x ↔ IsImmersionAt I J n g x :=
516523 ⟨fun h ↦ h.congr_of_eventuallyEq hfg, fun h ↦ h.congr_of_eventuallyEq hfg.symm⟩
517524
525+ /- The set of points where `IsImmersionAt` holds is open. -/
526+ lemma _root_.IsOpen.isImmersionAt :
527+ IsOpen {x | IsImmersionAt I J n f x} := by
528+ rw [isOpen_iff_forall_mem_open]
529+ exact fun x hx ↦ ⟨{x | IsImmersionAtOfComplement hx.complement I J n f x },
530+ fun y hy ↦ hy.isImmersionAt, .isImmersionAtOfComplement,
531+ by simp [hx.isImmersionAtOfComplement_complement]⟩
532+
518533end IsImmersionAt
519534
520535variable (F I J n) in
0 commit comments