@@ -12,8 +12,26 @@ public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Restrict
1212/-!
1313# Continuous linear equivalences
1414
15+ ## Notation
1516Continuous semilinear / linear / star-linear equivalences between topological modules are denoted
1617by `M ≃SL[σ] M₂`, `M ≃L[R] M₂` and `M ≃L⋆[R] M₂`.
18+
19+ ## Main Definitions
20+ * `toHomeomorph` is the homeomorphism induced by a continuous (semi)linear equivalence.
21+ * `symm` is the inverse of a continuous linear equivalence as a continuous linear equivalence.
22+ * `equivOfInverse` creates a `ContinuousLinearEquiv` from two `ContinuousLinearMap`s that are
23+ inverse of each other (as functions). See also `equivOfInverse'` when they're inverse to each
24+ other as continuous linear maps.
25+ * `ofUnit` is the `ContinuousLinearEquiv` corresponding to a unit in the ring of continuous
26+ endomorphisms. See `toUnit` for the inverse direction.
27+ * `IsInvertible`: a continuous linear map is invertible if it is the forward direction of a
28+ continuous linear equivalence.
29+ * `ofIsHomeomorph`: a linear equivalence that is a homeomorphism is a continuous linear equivalence.
30+
31+ ## Main Results
32+ * `prodComm`: the product of topological modules is commutative up to continuous linear isomorphism.
33+ * `LinearEquiv.isHomeomorph_iff`: A linear equivalence between topological modules is a
34+ homeomorphism if and only if it is continuous in both directions.
1735 -/
1836
1937@[expose] public section
@@ -26,8 +44,6 @@ open scoped Ring
2644
2745universe u v w u'
2846
29- section
30-
3147/-- Continuous linear equivalences between modules. We only put the type classes that are necessary
3248for the definition, although in applications `M` and `M₂` will be topological modules over the
3349topological semiring `R`. -/
@@ -223,7 +239,6 @@ theorem isClosed_image (e : M₁ ≃SL[σ₁₂] M₂) {s : Set M₁} : IsClosed
223239theorem map_nhds_eq (e : M₁ ≃SL[σ₁₂] M₂) (x : M₁) : map e (𝓝 x) = 𝓝 (e x) :=
224240 e.toHomeomorph.map_nhds_eq x
225241
226- -- Make some straightforward lemmas available to `simp`.
227242theorem map_zero (e : M₁ ≃SL[σ₁₂] M₂) : e (0 : M₁) = 0 :=
228243 (e : M₁ →SL[σ₁₂] M₂).map_zero
229244
@@ -280,10 +295,6 @@ def toContinuousAddEquiv (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ M :=
280295@[simp]
281296lemma toContinuousAddEquiv_coe (e : M₁ ≃L[R₁] M) : ⇑e.toContinuousAddEquiv = e := rfl
282297
283- end
284-
285- section
286-
287298variable (R₁ M₁)
288299
289300/-- The identity map as a continuous linear equivalence. -/
@@ -378,7 +389,7 @@ theorem prodCongr_symm [Module R₁ M₂] [Module R₁ M₃] [Module R₁ M₄]
378389variable (R₁ M₁ M₂)
379390
380391set_option backward.defeqAttrib.useBackward true in
381- /-- Product of modules is commutative up to continuous linear isomorphism. -/
392+ /-- Product of topological modules is commutative up to continuous linear isomorphism. -/
382393@ [simps! apply toLinearEquiv]
383394def prodComm [Module R₁ M₂] : (M₁ × M₂) ≃L[R₁] M₂ × M₁ where
384395 __ := LinearEquiv.prodComm R₁ M₁ M₂
@@ -611,7 +622,8 @@ protected theorem _root_.LinearEquiv.isUniformEmbedding {E₁ E₂ : Type*} [Uni
611622 E₁ ≃SL[σ₁₂] E₂)
612623
613624/-- Create a `ContinuousLinearEquiv` from two `ContinuousLinearMap`s that are
614- inverse of each other. See also `equivOfInverse'`. -/
625+ inverse of each other. See also `equivOfInverse'`.
626+ *ToDo* : Improve the naiming to make it match `LinearMap.ofLinear`. -/
615627def equivOfInverse (f₁ : M₁ →SL[σ₁₂] M₂) (f₂ : M₂ →SL[σ₂₁] M₁) (h₁ : Function.LeftInverse f₂ f₁)
616628 (h₂ : Function.RightInverse f₂ f₁) : M₁ ≃SL[σ₁₂] M₂ :=
617629 { f₁ with
@@ -630,7 +642,8 @@ theorem symm_equivOfInverse (f₁ : M₁ →SL[σ₁₂] M₂) (f₂ h₁ h₂)
630642 rfl
631643
632644/-- Create a `ContinuousLinearEquiv` from two `ContinuousLinearMap`s that are
633- inverse of each other, in the `ContinuousLinearMap.comp` sense. See also `equivOfInverse`. -/
645+ inverse of each other, in the `ContinuousLinearMap.comp` sense. See also `equivOfInverse`.
646+ *ToDo* : Improve the naiming to make it match `LinearMap.ofLinear` -/
634647def equivOfInverse' (f₁ : M₁ →SL[σ₁₂] M₂) (f₂ : M₂ →SL[σ₂₁] M₁)
635648 (h₁ : f₁.comp f₂ = .id R₂ M₂) (h₂ : f₂.comp f₁ = .id R₁ M₁) : M₁ ≃SL[σ₁₂] M₂ :=
636649 equivOfInverse f₁ f₂
@@ -1412,15 +1425,34 @@ theorem smul_trans [SMulCommClass R S V] [IsScalarTower S R G] (α : Sˣ) (e : G
14121425theorem trans_smul [IsScalarTower S R G] (α : Sˣ) (e : G ≃L[R] V) (f : V ≃L[R] W) :
14131426 e.trans (α • f) = α • (e.trans f) := by ext; simp
14141427
1415- end ContinuousLinearEquiv
1428+ section IsHomeomorph
1429+
1430+ variable {S₁ M M₁ : Type *} [Semiring S₁] {σ : S →+* S₁} {σ' : S₁ →+* S}
1431+ [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] [TopologicalSpace M] [AddCommMonoid M] [Module S M]
1432+ [TopologicalSpace M₁] [AddCommMonoid M₁] [Module S₁ M₁]
1433+
1434+ /-- A linear equivalence that is a homeomorphism is a continuous linear equivalence. -/
1435+ def ofIsHomeomorph (f : M ≃ₛₗ[σ] M₁) (hf : IsHomeomorph f) : M ≃SL[σ] M₁ where
1436+ __ := f
1437+ continuous_toFun := hf.continuous
1438+ continuous_invFun := (f.isHomeomorph_iff.mp hf).2
1439+
1440+ theorem isHomeomorph (f : M ≃SL[σ] M₁) : IsHomeomorph f := ⟨f.continuous, isOpenMap f, f.bijective⟩
1441+
1442+ variable {f : M ≃ₛₗ[σ] M₁} (hf : IsHomeomorph f)
1443+
1444+ @[simp]
1445+ lemma toLinearquiv_ofIsHomeomorph : (ofIsHomeomorph f hf).toLinearEquiv = f := by
1446+ dsimp only [ofIsHomeomorph]
1447+
1448+ @[simp]
1449+ lemma coe_ofIsHomeomorph : (ofIsHomeomorph f hf : M → M₁) = f := by dsimp [ofIsHomeomorph]
14161450
14171451/-- A linear equivalence between topological modules is a homeomorphism if and only if it is
14181452continuous in both directions. -/
1419- theorem LinearEquiv.isHomeomorph_iff {R S : Type *} [Semiring R] [Semiring S]
1420- {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ]
1421- {M : Type *} [TopologicalSpace M] [AddCommMonoid M] [Module R M]
1422- {N : Type *} [TopologicalSpace N] [AddCommMonoid N] [Module S N]
1423- (e : M ≃ₛₗ[σ] N) : IsHomeomorph e ↔ Continuous e ∧ Continuous e.symm :=
1424- e.toEquiv.isHomeomorph_iff
1453+ theorem _root_.LinearEquiv.isHomeomorph_iff (e : M ≃ₛₗ[σ] M₁) :
1454+ IsHomeomorph e ↔ Continuous e ∧ Continuous e.symm := e.toEquiv.isHomeomorph_iff
14251455
1426- end
1456+ end IsHomeomorph
1457+
1458+ end ContinuousLinearEquiv
0 commit comments