@@ -3,14 +3,12 @@ Copyright (c) 2022 Oliver Nash. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Oliver Nash
5
5
-/
6
- import Mathlib.Data.Nat.Totient
6
+ import Mathlib.Algebra.Order.ToIntervalMod
7
7
import Mathlib.Algebra.Ring.AddAut
8
+ import Mathlib.Data.Nat.Totient
8
9
import Mathlib.GroupTheory.Divisible
9
- import Mathlib.GroupTheory.OrderOfElement
10
- import Mathlib.Algebra.Order.Floor
11
- import Mathlib.Algebra.Order.ToIntervalMod
12
- import Mathlib.Topology.Instances.Real
13
10
import Mathlib.Topology.Connected.PathConnected
11
+ import Mathlib.Topology.IsLocalHomeomorph
14
12
15
13
#align_import topology.instances.add_circle from "leanprover-community/mathlib" @"213b0cff7bc5ab6696ee07cceec80829ce42efec"
16
14
@@ -278,6 +276,37 @@ theorem continuousAt_equivIoc : ContinuousAt (equivIoc p a) x := by
278
276
exact (continuousAt_toIocMod hp.out a hx).codRestrict _
279
277
#align add_circle.continuous_at_equiv_Ioc AddCircle.continuousAt_equivIoc
280
278
279
+ /-- The quotient map `𝕜 → AddCircle p` as a partial homeomorphism. -/
280
+ @[simps] def partialHomeomorphCoe [DiscreteTopology (zmultiples p)] :
281
+ PartialHomeomorph 𝕜 (AddCircle p) where
282
+ toFun := (↑)
283
+ invFun := fun x ↦ equivIco p a x
284
+ source := Ioo a (a + p)
285
+ target := {↑a}ᶜ
286
+ map_source' := by
287
+ intro x hx hx'
288
+ exact hx.1 .ne' ((coe_eq_coe_iff_of_mem_Ico (Ioo_subset_Ico_self hx)
289
+ (left_mem_Ico.mpr (lt_add_of_pos_right a hp.out))).mp hx')
290
+ map_target' := by
291
+ intro x hx
292
+ exact (eq_left_or_mem_Ioo_of_mem_Ico (equivIco p a x).2 ).resolve_left
293
+ (hx ∘ ((equivIco p a).symm_apply_apply x).symm.trans ∘ congrArg _)
294
+ left_inv' :=
295
+ fun x hx ↦ congrArg _ ((equivIco p a).apply_symm_apply ⟨x, Ioo_subset_Ico_self hx⟩)
296
+ right_inv' := fun x _ ↦ (equivIco p a).symm_apply_apply x
297
+ open_source := isOpen_Ioo
298
+ open_target := isOpen_compl_singleton
299
+ continuousOn_toFun := (AddCircle.continuous_mk' p).continuousOn
300
+ continuousOn_invFun := by
301
+ exact ContinuousAt.continuousOn
302
+ (fun _ ↦ continuousAt_subtype_val.comp ∘ continuousAt_equivIco p a)
303
+
304
+ lemma isLocalHomeomorph_coe [DiscreteTopology (zmultiples p)] [DenselyOrdered 𝕜] :
305
+ IsLocalHomeomorph ((↑) : 𝕜 → AddCircle p) := by
306
+ intro a
307
+ obtain ⟨b, hb1, hb2⟩ := exists_between (sub_lt_self a hp.out)
308
+ exact ⟨partialHomeomorphCoe p b, ⟨hb2, lt_add_of_sub_right_lt hb1⟩, rfl⟩
309
+
281
310
end Continuity
282
311
283
312
/-- The image of the closed-open interval `[a, a + p)` under the quotient map `𝕜 → AddCircle p` is
@@ -328,6 +357,22 @@ theorem equivAddCircle_symm_apply_mk (hp : p ≠ 0) (hq : q ≠ 0) (x : 𝕜) :
328
357
rfl
329
358
#align add_circle.equiv_add_circle_symm_apply_mk AddCircle.equivAddCircle_symm_apply_mk
330
359
360
+ /-- The rescaling homeomorphism between additive circles with different periods. -/
361
+ def homeomorphAddCircle (hp : p ≠ 0 ) (hq : q ≠ 0 ) : AddCircle p ≃ₜ AddCircle q :=
362
+ ⟨equivAddCircle p q hp hq,
363
+ (continuous_quotient_mk'.comp (continuous_mul_right (p⁻¹ * q))).quotient_lift _,
364
+ (continuous_quotient_mk'.comp (continuous_mul_right (q⁻¹ * p))).quotient_lift _⟩
365
+
366
+ @[simp]
367
+ theorem homeomorphAddCircle_apply_mk (hp : p ≠ 0 ) (hq : q ≠ 0 ) (x : 𝕜) :
368
+ homeomorphAddCircle p q hp hq (x : 𝕜) = (x * (p⁻¹ * q) : 𝕜) :=
369
+ rfl
370
+
371
+ @[simp]
372
+ theorem homeomorphAddCircle_symm_apply_mk (hp : p ≠ 0 ) (hq : q ≠ 0 ) (x : 𝕜) :
373
+ (homeomorphAddCircle p q hp hq).symm (x : 𝕜) = (x * (q⁻¹ * p) : 𝕜) :=
374
+ rfl
375
+
331
376
variable [hp : Fact (0 < p)]
332
377
333
378
section FloorRing
0 commit comments