Skip to content

Commit b5f56a6

Browse files
committed
feat(Mathlib.Topology.Algebra.Module.Equiv): add results on IsHomeomorph (leanprover-community#39476)
Add the construction of a `ContinuousLinearEquiv` from a `LinearEquiv` that `IsHomeomorph`, and two basic API lemmas. Also remove a `simp` tag from a lemma in about `Function.Bijective`, and change its signature a bit. Co-authored-by: faenuccio <filippo.nuccio@univ-st-etienne.fr>
1 parent 9ca31d8 commit b5f56a6

1 file changed

Lines changed: 50 additions & 18 deletions

File tree

Mathlib/Topology/Algebra/Module/Equiv.lean

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,26 @@ public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Restrict
1212
/-!
1313
# Continuous linear equivalences
1414
15+
## Notation
1516
Continuous semilinear / linear / star-linear equivalences between topological modules are denoted
1617
by `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

2745
universe u v w u'
2846

29-
section
30-
3147
/-- Continuous linear equivalences between modules. We only put the type classes that are necessary
3248
for the definition, although in applications `M` and `M₂` will be topological modules over the
3349
topological semiring `R`. -/
@@ -223,7 +239,6 @@ theorem isClosed_image (e : M₁ ≃SL[σ₁₂] M₂) {s : Set M₁} : IsClosed
223239
theorem 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`.
227242
theorem 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]
281296
lemma toContinuousAddEquiv_coe (e : M₁ ≃L[R₁] M) : ⇑e.toContinuousAddEquiv = e := rfl
282297

283-
end
284-
285-
section
286-
287298
variable (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₄]
378389
variable (R₁ M₁ M₂)
379390

380391
set_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]
383394
def 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`. -/
615627
def 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` -/
634647
def 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
14121425
theorem 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
14181452
continuous 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

Comments
 (0)