Documentation

Mathlib.Topology.Instances.AddCircle.Defs

The additive circle #

We define the additive circle AddCircle p as the quotient ๐•œ โงธ โ„ค โˆ™ p for some period p : ๐•œ.

See also Circle and Real.Angle. For the normed group structure on AddCircle, see AddCircle.NormedAddCommGroup in a later file.

Main definitions and results: #

Implementation notes: #

Although the most important case is ๐•œ = โ„ we wish to support other types of scalars, such as the rational circle AddCircle (1 : โ„š), and so we set things up more generally.

TODO #

theorem eventuallyEq_toIcoDiv_nhdsGE {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :
toIcoDiv hp a =แถ [nhdsWithin x (Set.Ici x)] fun (x_1 : ๐•œ) => toIcoDiv hp a x

toIcoDiv is eventually constant on the right at every point.

theorem continuousWithinAt_toIcoDiv_Ici {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :

toIcoDiv is continuous on the right at every point.

In fact, a stronger statement is true: it's eventually constant on the right, see eventuallyEq_toIcoDiv_nhdsGE.

theorem eventuallyEq_toIocDiv_nhdsLE {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :
toIocDiv hp a =แถ [nhdsWithin x (Set.Iic x)] fun (x_1 : ๐•œ) => toIocDiv hp a x

toIocDiv is eventually constant on the left at every point.

theorem continuousWithinAt_toIocDiv_Iic {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :

toIocDiv is continuous on the left at every point.

In fact, a stronger statement is true: it's eventually constant on the left, see eventuallyEq_toIocDiv_nhdsLE.

theorem continuousWithinAt_toIcoMod_Ici {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :

toIcoMod is continuous on the right at every point.

@[deprecated continuousWithinAt_toIcoMod_Ici (since := "2026-01-04")]
theorem continuous_right_toIcoMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :

Alias of continuousWithinAt_toIcoMod_Ici.


toIcoMod is continuous on the right at every point.

theorem continuousWithinAt_toIocMod_Iic {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :

toIocMod is continuous on the right at every point.

@[deprecated continuousWithinAt_toIocMod_Iic (since := "2026-01-04")]
theorem continuous_left_toIocMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :

Alias of continuousWithinAt_toIocMod_Iic.


toIocMod is continuous on the right at every point.

theorem eventuallyEq_toIcoDiv_nhdsLT {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :
toIcoDiv hp a =แถ [nhdsWithin x (Set.Iio x)] fun (x_1 : ๐•œ) => toIocDiv hp a x

At every point x, for all y < x sufficiently close to x, we have toIcoDiv hp a y = toIocDiv hp a x.

Note that we use different functions on the LHS and on the RHS.

theorem eventuallyEq_toIocDiv_nhdsGT {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a x : ๐•œ) :
toIocDiv hp a =แถ [nhdsWithin x (Set.Ioi x)] fun (x_1 : ๐•œ) => toIcoDiv hp a x

At every point x, for all y > x sufficiently close to x, we have toIocDiv hp a y = toIcoDiv hp a x.

Note that we use different functions on the LHS and on the RHS.

theorem eventuallyEq_toIcoDiv_nhds {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :
toIcoDiv hp a =แถ [nhds x] fun (x_1 : ๐•œ) => toIcoDiv hp a x

If x is not congruent to a modulo p, then toIcoDiv is locally constant near x.

theorem continuousAt_toIcoDiv {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :

If x is not congruent to a modulo p, then toIcoDiv is continuous at x.

In fact, it is locally near x, see eventuallyEq_toIcoDiv_nhds.

theorem continuousOn_toIcoDiv {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) :
ContinuousOn (toIcoDiv hp a) {x : ๐•œ | ยฌx โ‰ก a [PMOD p]}

toIcoDiv is continuous on the set of points that are not congruent to a modulo p.

theorem eventuallyEq_toIocDiv_nhds {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :
toIocDiv hp a =แถ [nhds x] fun (x_1 : ๐•œ) => toIocDiv hp a x

If x is not congruent to a modulo p, then toIocDiv is locally constant near x.

theorem continuousAt_toIocDiv {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :

If x is not congruent to a modulo p, then toIocDiv is continuous at x.

In fact, it is locally near x, see eventuallyEq_toIocDiv_nhds.

theorem continuousOn_toIocDiv {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) :
ContinuousOn (toIocDiv hp a) {x : ๐•œ | ยฌx โ‰ก a [PMOD p]}

toIocDiv is continuous on the set of points that aren't congruent to the endpoint modulo the period.

theorem toIcoMod_eventuallyEq_toIocMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :
theorem continuousAt_toIcoMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :
theorem continuousAt_toIocMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {p : ๐•œ} (hp : 0 < p) (a : ๐•œ) {x : ๐•œ} (hx : ยฌx โ‰ก a [PMOD p]) :
@[reducible, inline]
abbrev AddCircle {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) :
Type u_1

The "additive circle": ๐•œ โงธ โ„ค โˆ™ p. See also Circle and Real.Angle.

Equations
    Instances For
      theorem AddCircle.coe_nsmul {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) {n : โ„•} {x : ๐•œ} :
      โ†‘(n โ€ข x) = n โ€ข โ†‘x
      theorem AddCircle.coe_zsmul {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) {n : โ„ค} {x : ๐•œ} :
      โ†‘(n โ€ข x) = n โ€ข โ†‘x
      theorem AddCircle.coe_add {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p x y : ๐•œ) :
      โ†‘(x + y) = โ†‘x + โ†‘y
      theorem AddCircle.coe_sub {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p x y : ๐•œ) :
      โ†‘(x - y) = โ†‘x - โ†‘y
      theorem AddCircle.coe_neg {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) {x : ๐•œ} :
      โ†‘(-x) = -โ†‘x
      theorem AddCircle.coe_zero {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) :
      โ†‘0 = 0
      theorem AddCircle.coe_eq_zero_iff {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) {x : ๐•œ} :
      โ†‘x = 0 โ†” โˆƒ (n : โ„ค), n โ€ข p = x
      theorem AddCircle.coe_period {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) :
      โ†‘p = 0
      theorem AddCircle.coe_add_period {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p x : ๐•œ) :
      โ†‘(x + p) = โ†‘x
      theorem AddCircle.continuous_mk' {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [TopologicalSpace ๐•œ] :
      theorem AddCircle.card_torsion_le_of_isSMulRegular {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) (n : โ„•) (h0 : n โ‰  0) (hn : IsSMulRegular ๐•œ n) :
      {x : AddCircle p | n โ€ข x = 0}.encard โ‰ค โ†‘n
      theorem AddCircle.finite_torsion_of_isSMulRegular {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) (n : โ„•) (hn : IsSMulRegular ๐•œ n) :
      theorem AddCircle.card_torsion_le_of_isSMulRegular_int {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) (n : โ„ค) (h0 : n โ‰  0) (hn : IsSMulRegular ๐•œ n) :
      theorem AddCircle.finite_torsion_of_isSMulRegular_int {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) (n : โ„ค) (hn : IsSMulRegular ๐•œ n) :
      theorem AddCircle.finite_torsion {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {n : โ„•} (hn : 0 < n) :
      theorem AddCircle.finite_setOf_addOrderOf_eq {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {n : โ„•} (hn : 0 < n) :
      theorem AddCircle.coe_eq_zero_of_pos_iff {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] (hp : 0 < p) {x : ๐•œ} (hx : 0 < x) :
      โ†‘x = 0 โ†” โˆƒ (n : โ„•), n โ€ข p = x
      def AddCircle.equivIco {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] :
      AddCircle p โ‰ƒ โ†‘(Set.Ico a (a + p))

      The equivalence between AddCircle p and the half-open interval [a, a + p), whose inverse is the natural quotient map.

      Equations
        Instances For
          def AddCircle.equivIoc {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] :
          AddCircle p โ‰ƒ โ†‘(Set.Ioc a (a + p))

          The equivalence between AddCircle p and the half-open interval (a, a + p], whose inverse is the natural quotient map.

          Equations
            Instances For
              def AddCircle.liftIco {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] (f : ๐•œ โ†’ B) :
              AddCircle p โ†’ B

              Given a function on ๐•œ, return the unique function on AddCircle p agreeing with f on [a, a + p).

              Equations
                Instances For
                  def AddCircle.liftIoc {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] (f : ๐•œ โ†’ B) :
                  AddCircle p โ†’ B

                  Given a function on ๐•œ, return the unique function on AddCircle p agreeing with f on (a, a + p].

                  Equations
                    Instances For
                      theorem AddCircle.equivIco_coe_eq {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} [Archimedean ๐•œ] {x : ๐•œ} (hx : x โˆˆ Set.Ico a (a + p)) :
                      (equivIco p a) โ†‘x = โŸจx, hxโŸฉ
                      theorem AddCircle.equivIoc_coe_eq {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} [Archimedean ๐•œ] {x : ๐•œ} (hx : x โˆˆ Set.Ioc a (a + p)) :
                      (equivIoc p a) โ†‘x = โŸจx, hxโŸฉ
                      theorem AddCircle.coe_eq_coe_iff_of_mem_Ico {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} [Archimedean ๐•œ] {x y : ๐•œ} (hx : x โˆˆ Set.Ico a (a + p)) (hy : y โˆˆ Set.Ico a (a + p)) :
                      โ†‘x = โ†‘y โ†” x = y
                      theorem AddCircle.liftIco_coe_apply {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} [Archimedean ๐•œ] {f : ๐•œ โ†’ B} {x : ๐•œ} (hx : x โˆˆ Set.Ico a (a + p)) :
                      liftIco p a f โ†‘x = f x
                      theorem AddCircle.liftIoc_coe_apply {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} [Archimedean ๐•œ] {f : ๐•œ โ†’ B} {x : ๐•œ} (hx : x โˆˆ Set.Ioc a (a + p)) :
                      liftIoc p a f โ†‘x = f x
                      theorem AddCircle.liftIco_comp_apply {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] [Archimedean ๐•œ] {ฮฑ : Type u_3} {ฮฒ : Type u_4} {f : ๐•œ โ†’ ฮฑ} {g : ฮฑ โ†’ ฮฒ} {a : ๐•œ} {x : AddCircle p} :
                      liftIco p a (g โˆ˜ f) x = g (liftIco p a f x)
                      theorem AddCircle.liftIoc_comp_apply {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] [Archimedean ๐•œ] {ฮฑ : Type u_3} {ฮฒ : Type u_4} {f : ๐•œ โ†’ ฮฑ} {g : ฮฑ โ†’ ฮฒ} {a : ๐•œ} {x : AddCircle p} :
                      liftIoc p a (g โˆ˜ f) x = g (liftIoc p a f x)
                      theorem AddCircle.eq_coe_Ico {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] [Archimedean ๐•œ] (a : AddCircle p) :
                      โˆƒ b โˆˆ Set.Ico 0 p, โ†‘b = a
                      theorem AddCircle.coe_eq_zero_iff_of_mem_Ico {๐•œ : Type u_1} [AddCommGroup ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} [Archimedean ๐•œ] (ha : a โˆˆ Set.Ico 0 p) :
                      โ†‘a = 0 โ†” a = 0
                      theorem AddCircle.continuous_equivIco_symm {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] :
                      Continuous โ‡‘(equivIco p a).symm
                      theorem AddCircle.continuous_equivIoc_symm {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] :
                      Continuous โ‡‘(equivIoc p a).symm
                      theorem AddCircle.continuousAt_equivIco {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {x : AddCircle p} (hx : x โ‰  โ†‘a) :
                      ContinuousAt (โ‡‘(equivIco p a)) x
                      theorem AddCircle.continuousAt_equivIoc {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] {x : AddCircle p} (hx : x โ‰  โ†‘a) :
                      ContinuousAt (โ‡‘(equivIoc p a)) x
                      def AddCircle.openPartialHomeomorphCoe {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [DiscreteTopology โ†ฅ(AddSubgroup.zmultiples p)] :

                      The quotient map ๐•œ โ†’ AddCircle p as an open partial homeomorphism.

                      Equations
                        Instances For
                          @[simp]
                          theorem AddCircle.openPartialHomeomorphCoe_symm_apply {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [DiscreteTopology โ†ฅ(AddSubgroup.zmultiples p)] (x : AddCircle p) :
                          โ†‘(openPartialHomeomorphCoe p a).symm x = โ†‘((equivIco p a) x)
                          @[simp]
                          theorem AddCircle.openPartialHomeomorphCoe_source {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [DiscreteTopology โ†ฅ(AddSubgroup.zmultiples p)] :
                          @[simp]
                          theorem AddCircle.openPartialHomeomorphCoe_target {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [DiscreteTopology โ†ฅ(AddSubgroup.zmultiples p)] :
                          @[simp]
                          theorem AddCircle.openPartialHomeomorphCoe_apply {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [DiscreteTopology โ†ฅ(AddSubgroup.zmultiples p)] (aโœ : ๐•œ) :
                          โ†‘(openPartialHomeomorphCoe p a) aโœ = โ†‘aโœ
                          @[deprecated AddCircle.openPartialHomeomorphCoe (since := "2025-08-29")]
                          def AddCircle.partialHomeomorphCoe {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [DiscreteTopology โ†ฅ(AddSubgroup.zmultiples p)] :

                          Alias of AddCircle.openPartialHomeomorphCoe.


                          The quotient map ๐•œ โ†’ AddCircle p as an open partial homeomorphism.

                          Equations
                            Instances For
                              @[simp]
                              theorem AddCircle.coe_image_Ico_eq {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] :

                              The image of the closed-open interval [a, a + p) under the quotient map ๐•œ โ†’ AddCircle p is the entire space.

                              @[simp]
                              theorem AddCircle.coe_image_Ioc_eq {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] :

                              The image of the closed-open interval [a, a + p) under the quotient map ๐•œ โ†’ AddCircle p is the entire space.

                              @[simp]
                              theorem AddCircle.coe_image_Icc_eq {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] (a : ๐•œ) [Archimedean ๐•œ] :

                              The image of the closed interval [0, p] under the quotient map ๐•œ โ†’ AddCircle p is the entire space.

                              theorem AddCircle.Ico_ext {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] [Archimedean ๐•œ] {ฮฑ : Type u_3} {f g : AddCircle p โ†’ ฮฑ} (a : ๐•œ) (h : โˆ€ x โˆˆ Set.Ico a (a + p), f โ†‘x = g โ†‘x) :
                              f = g

                              If functions on AddCircle agree on the image of the interval [a, a + p) then they are equal

                              theorem AddCircle.Ioc_ext {๐•œ : Type u_1} [AddCommGroup ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] [hp : Fact (0 < p)] [Archimedean ๐•œ] {ฮฑ : Type u_3} {f g : AddCircle p โ†’ ฮฑ} (a : ๐•œ) (h : โˆ€ x โˆˆ Set.Ioc a (a + p), f โ†‘x = g โ†‘x) :
                              f = g

                              If functions on AddCircle agree on the image of the interval (a, a + p] then they are equal

                              def AddCircle.equivAddCircle {๐•œ : Type u_1} [Field ๐•œ] (p q : ๐•œ) (hp : p โ‰  0) (hq : q โ‰  0) :

                              The rescaling equivalence between additive circles with different periods.

                              Equations
                                Instances For
                                  @[simp]
                                  theorem AddCircle.equivAddCircle_apply_mk {๐•œ : Type u_1} [Field ๐•œ] (p q : ๐•œ) (hp : p โ‰  0) (hq : q โ‰  0) (x : ๐•œ) :
                                  (equivAddCircle p q hp hq) โ†‘x = โ†‘(x * (pโปยน * q))
                                  @[simp]
                                  theorem AddCircle.equivAddCircle_symm_apply_mk {๐•œ : Type u_1} [Field ๐•œ] (p q : ๐•œ) (hp : p โ‰  0) (hq : q โ‰  0) (x : ๐•œ) :
                                  (equivAddCircle p q hp hq).symm โ†‘x = โ†‘(x * (qโปยน * p))
                                  def AddCircle.homeomorphAddCircle {๐•œ : Type u_1} [Field ๐•œ] (p q : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] (hp : p โ‰  0) (hq : q โ‰  0) :

                                  The rescaling homeomorphism between additive circles with different periods.

                                  Equations
                                    Instances For
                                      @[simp]
                                      theorem AddCircle.homeomorphAddCircle_apply_mk {๐•œ : Type u_1} [Field ๐•œ] (p q : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] (hp : p โ‰  0) (hq : q โ‰  0) (x : ๐•œ) :
                                      (homeomorphAddCircle p q hp hq) โ†‘x = โ†‘(x * (pโปยน * q))
                                      @[simp]
                                      theorem AddCircle.homeomorphAddCircle_symm_apply_mk {๐•œ : Type u_1} [Field ๐•œ] (p q : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] (hp : p โ‰  0) (hq : q โ‰  0) (x : ๐•œ) :
                                      (homeomorphAddCircle p q hp hq).symm โ†‘x = โ†‘(x * (qโปยน * p))
                                      theorem AddCircle.natCast_div_mul_eq_nsmul {๐•œ : Type u_1} [Field ๐•œ] (p q r : ๐•œ) (m : โ„•) :
                                      โ†‘(โ†‘m / q * r) = m โ€ข โ†‘(r / q)
                                      theorem AddCircle.intCast_div_mul_eq_zsmul {๐•œ : Type u_1} [Field ๐•œ] (p q r : ๐•œ) (m : โ„ค) :
                                      โ†‘(โ†‘m / q * r) = m โ€ข โ†‘(r / q)
                                      @[simp]
                                      theorem AddCircle.coe_equivIco_mk_apply {๐•œ : Type u_1} [Field ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] [FloorRing ๐•œ] (x : ๐•œ) :
                                      โ†‘((equivIco p 0) โ†‘x) = Int.fract (x / p) * p
                                      instance AddCircle.instDivisibleByInt {๐•œ : Type u_1} [Field ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] [FloorRing ๐•œ] :
                                      Equations
                                        @[simp]
                                        theorem AddCircle.coe_fract {๐•œ : Type u_1} [Field ๐•œ] [LinearOrder ๐•œ] [FloorRing ๐•œ] (x : ๐•œ) :
                                        โ†‘(Int.fract x) = โ†‘x
                                        theorem AddCircle.addOrderOf_period_div {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {n : โ„•} (h : 0 < n) :
                                        addOrderOf โ†‘(p / โ†‘n) = n
                                        theorem AddCircle.gcd_mul_addOrderOf_div_eq {๐•œ : Type u_1} [Field ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {n : โ„•} (m : โ„•) (hn : 0 < n) :
                                        m.gcd n * addOrderOf โ†‘(โ†‘m / โ†‘n * p) = n
                                        theorem AddCircle.addOrderOf_div_of_gcd_eq_one {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {m n : โ„•} (hn : 0 < n) (h : m.gcd n = 1) :
                                        addOrderOf โ†‘(โ†‘m / โ†‘n * p) = n
                                        theorem AddCircle.addOrderOf_div_of_gcd_eq_one' {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {m : โ„ค} {n : โ„•} (hn : 0 < n) (h : m.natAbs.gcd n = 1) :
                                        addOrderOf โ†‘(โ†‘m / โ†‘n * p) = n
                                        theorem AddCircle.addOrderOf_coe_rat {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {q : โ„š} :
                                        addOrderOf โ†‘(โ†‘q * p) = q.den
                                        theorem AddCircle.nsmul_eq_zero_iff {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {u : AddCircle p} {n : โ„•} (h : 0 < n) :
                                        n โ€ข u = 0 โ†” โˆƒ m < n, โ†‘(โ†‘m / โ†‘n * p) = u
                                        theorem AddCircle.addOrderOf_eq_pos_iff {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {u : AddCircle p} {n : โ„•} (h : 0 < n) :
                                        addOrderOf u = n โ†” โˆƒ m < n, m.gcd n = 1 โˆง โ†‘(โ†‘m / โ†‘n * p) = u
                                        theorem AddCircle.exists_gcd_eq_one_of_isOfFinAddOrder {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {u : AddCircle p} (h : IsOfFinAddOrder u) :
                                        โˆƒ (m : โ„•), m.gcd (addOrderOf u) = 1 โˆง m < addOrderOf u โˆง โ†‘(โ†‘m / โ†‘(addOrderOf u) * p) = u
                                        theorem AddCircle.not_isOfFinAddOrder_iff_forall_rat_ne_div {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} :
                                        ยฌIsOfFinAddOrder โ†‘a โ†” โˆ€ (q : โ„š), โ†‘q โ‰  a / p
                                        theorem AddCircle.isOfFinAddOrder_iff_exists_rat_eq_div {๐•œ : Type u_1} [Field ๐•œ] {p : ๐•œ} [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {a : ๐•œ} :
                                        IsOfFinAddOrder โ†‘a โ†” โˆƒ (q : โ„š), โ†‘q = a / p
                                        def AddCircle.setAddOrderOfEquiv {๐•œ : Type u_1} [Field ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {n : โ„•} (hn : 0 < n) :
                                        โ†‘{u : AddCircle p | addOrderOf u = n} โ‰ƒ โ†‘{m : โ„• | m < n โˆง m.gcd n = 1}

                                        The natural bijection between points of order n and natural numbers less than and coprime to n. The inverse of the map sends m โ†ฆ (m/n * p : AddCircle p) where m is coprime to n and satisfies 0 โ‰ค m < n.

                                        Equations
                                          Instances For
                                            @[simp]
                                            theorem AddCircle.card_addOrderOf_eq_totient {๐•œ : Type u_1} [Field ๐•œ] (p : ๐•œ) [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [hp : Fact (0 < p)] {n : โ„•} :

                                            This section proves that for any a, the natural map from [a, a + p] โŠ‚ ๐•œ to AddCircle p gives an identification of AddCircle p, as a topological space, with the quotient of [a, a + p] by the equivalence relation identifying the endpoints.

                                            inductive AddCircle.EndpointIdent {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] (p a : ๐•œ) [hp : Fact (0 < p)] :
                                            โ†‘(Set.Icc a (a + p)) โ†’ โ†‘(Set.Icc a (a + p)) โ†’ Prop

                                            The relation identifying the endpoints of Icc a (a + p).

                                            Instances For
                                              def AddCircle.equivIccQuot {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] (p a : ๐•œ) [hp : Fact (0 < p)] [Archimedean ๐•œ] :

                                              The equivalence between AddCircle p and the quotient of [a, a + p] by the relation identifying the endpoints.

                                              Equations
                                                Instances For
                                                  theorem AddCircle.equivIccQuot_comp_mk_eq_toIcoMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] (p a : ๐•œ) [hp : Fact (0 < p)] [Archimedean ๐•œ] :
                                                  โ‡‘(equivIccQuot p a) โˆ˜ Quotient.mk'' = fun (x : ๐•œ) => Quot.mk (EndpointIdent p a) โŸจtoIcoMod โ‹ฏ a x, โ‹ฏโŸฉ
                                                  theorem AddCircle.equivIccQuot_comp_mk_eq_toIocMod {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] (p a : ๐•œ) [hp : Fact (0 < p)] [Archimedean ๐•œ] :
                                                  โ‡‘(equivIccQuot p a) โˆ˜ Quotient.mk'' = fun (x : ๐•œ) => Quot.mk (EndpointIdent p a) โŸจtoIocMod โ‹ฏ a x, โ‹ฏโŸฉ
                                                  def AddCircle.homeoIccQuot {๐•œ : Type u_1} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] (p a : ๐•œ) [hp : Fact (0 < p)] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] :

                                                  The natural map from [a, a + p] โŠ‚ ๐•œ with endpoints identified to ๐•œ / โ„ค โ€ข p, as a homeomorphism of topological spaces.

                                                  Equations
                                                    Instances For

                                                      We now show that a continuous function on [a, a + p] satisfying f a = f (a + p) is the pullback of a continuous function on AddCircle p, by first showing that various lifts are equivalent.

                                                      theorem AddCircle.liftIoc_eq_liftIco {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p a : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] {f : ๐•œ โ†’ B} (hf : f a = f (a + p)) :
                                                      liftIoc p a f = liftIco p a f
                                                      theorem AddCircle.liftIco_eq_lift_Icc {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p a : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] {f : ๐•œ โ†’ B} (h : f a = f (a + p)) :
                                                      liftIco p a f = Quot.lift ((Set.Icc a (a + p)).restrict f) โ‹ฏ โˆ˜ โ‡‘(equivIccQuot p a)
                                                      theorem AddCircle.liftIoc_eq_lift_Icc {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p a : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] {f : ๐•œ โ†’ B} (h : f a = f (a + p)) :
                                                      liftIoc p a f = Quot.lift ((Set.Icc a (a + p)).restrict f) โ‹ฏ โˆ˜ โ‡‘(equivIccQuot p a)
                                                      theorem AddCircle.liftIco_zero_coe_apply {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] {f : ๐•œ โ†’ B} {x : ๐•œ} (hx : x โˆˆ Set.Ico 0 p) :
                                                      liftIco p 0 f โ†‘x = f x
                                                      theorem AddCircle.liftIoc_zero_coe_apply {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] {f : ๐•œ โ†’ B} {x : ๐•œ} (hx : x โˆˆ Set.Ioc 0 p) :
                                                      liftIoc p 0 f โ†‘x = f x
                                                      theorem AddCircle.liftIco_continuous {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p a : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [TopologicalSpace B] {f : ๐•œ โ†’ B} (hf : f a = f (a + p)) (hc : ContinuousOn f (Set.Icc a (a + p))) :
                                                      theorem AddCircle.liftIco_zero_continuous {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [TopologicalSpace B] {f : ๐•œ โ†’ B} (hf : f 0 = f p) (hc : ContinuousOn f (Set.Icc 0 p)) :
                                                      theorem AddCircle.liftIoc_continuous {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p a : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [TopologicalSpace B] {f : ๐•œ โ†’ B} (hf : f a = f (a + p)) (hc : ContinuousOn f (Set.Icc a (a + p))) :
                                                      theorem AddCircle.liftIoc_zero_continuous {๐•œ : Type u_1} {B : Type u_2} [AddCommGroup ๐•œ] [LinearOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : ๐•œ} [hp : Fact (0 < p)] [Archimedean ๐•œ] [TopologicalSpace ๐•œ] [OrderTopology ๐•œ] [TopologicalSpace B] {f : ๐•œ โ†’ B} (hf : f 0 = f p) (hc : ContinuousOn f (Set.Icc 0 p)) :