Documentation

Mathlib.Dynamics.Circle.RotationNumber.TranslationNumber

Translation number of a monotone real map that commutes with x ↦ x + 1 #

Let f : ℝ → ℝ be a monotone map such that f (x + 1) = f x + 1 for all x. Then the limit $$ \tau(f)=\lim_{n\to\infty}{f^n(x)-x}{n} $$ exists and does not depend on x. This number is called the translation number of f. Different authors use different notation for this number: τ, ρ, rot, etc

In this file we define a structure CircleDeg1Lift for bundled maps with these properties, define translation number of f : CircleDeg1Lift, prove some estimates relating f^n(x)-x to τ(f). In case of a continuous map f we also prove that f admits a point x such that f^n(x)=x+m if and only if τ(f)=m/n.

Maps of this type naturally appear as lifts of orientation preserving circle homeomorphisms. More precisely, let f be an orientation preserving homeomorphism of the circle $S^1=ℝ/ℤ$, and consider a real number a such that ⟦a⟧ = f 0, where ⟦⟧ means the natural projection ℝ → ℝ/ℤ. Then there exists a unique continuous function F : ℝ → ℝ such that F 0 = a and ⟦F x⟧ = f ⟦x⟧ for all x (this fact is not formalized yet). This function is strictly monotone, continuous, and satisfies F (x + 1) = F x + 1. The number ⟦τ F⟧ : ℝ / ℤ is called the rotation number of f. It does not depend on the choice of a.

Main definitions #

Main statements #

We prove the following properties of CircleDeg1Lift.translationNumber.

Notation #

We use a local notation τ for the translation number of f : CircleDeg1Lift.

Implementation notes #

We define the translation number of f : CircleDeg1Lift to be the limit of the sequence (f ^ (2 ^ n)) 0 / (2 ^ n), then prove that ((f ^ n) x - x) / n tends to this number for any x. This way it is much easier to prove that the limit exists and basic properties of the limit.

We define translation number for a wider class of maps f : ℝ → ℝ instead of lifts of orientation preserving circle homeomorphisms for two reasons:

References #

TODO #

Here are some short-term goals.

Tags #

circle homeomorphism, rotation number

Definition and monoid structure #

structure CircleDeg1Liftextends →o :

A lift of a monotone degree one map S¹ → S¹.

Instances For
    @[simp]
    theorem CircleDeg1Lift.coe_mk (f : →o ) (h : ∀ (x : ), f.toFun (x + 1) = f.toFun x + 1) :
    { toOrderHom := f, map_add_one' := h } = f
    @[simp]
    theorem CircleDeg1Lift.coe_toOrderHom (f : CircleDeg1Lift) :
    f.toOrderHom = f
    theorem CircleDeg1Lift.mono (f : CircleDeg1Lift) {x y : } (h : x y) :
    f x f y
    @[simp]
    theorem CircleDeg1Lift.map_add_one (f : CircleDeg1Lift) (x : ) :
    f (x + 1) = f x + 1
    @[simp]
    theorem CircleDeg1Lift.map_one_add (f : CircleDeg1Lift) (x : ) :
    f (1 + x) = 1 + f x
    theorem CircleDeg1Lift.ext ⦃f g : CircleDeg1Lift (h : ∀ (x : ), f x = g x) :
    f = g
    @[simp]
    theorem CircleDeg1Lift.coe_mul (f g : CircleDeg1Lift) :
    (f * g) = f g
    theorem CircleDeg1Lift.mul_apply (f g : CircleDeg1Lift) (x : ) :
    (f * g) x = f (g x)
    @[simp]
    theorem CircleDeg1Lift.coe_one :
    1 = id
    @[simp]
    @[simp]

    If a lift of a circle map is bijective, then it is an order automorphism of the line.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[simp]
      theorem CircleDeg1Lift.coe_toOrderIso (f : CircleDeg1Liftˣ) :
      (CircleDeg1Lift.toOrderIso f) = f
      @[simp]
      theorem CircleDeg1Lift.coe_toOrderIso_symm (f : CircleDeg1Liftˣ) :
      (CircleDeg1Lift.toOrderIso f).symm = f⁻¹
      @[simp]
      theorem CircleDeg1Lift.coe_toOrderIso_inv (f : CircleDeg1Liftˣ) :
      (CircleDeg1Lift.toOrderIso f)⁻¹ = f⁻¹
      theorem CircleDeg1Lift.coe_pow (f : CircleDeg1Lift) (n : ) :
      (f ^ n) = (⇑f)^[n]
      theorem CircleDeg1Lift.semiconjBy_iff_semiconj {f g₁ g₂ : CircleDeg1Lift} :
      SemiconjBy f g₁ g₂ Function.Semiconj f g₁ g₂

      Translate by a constant #

      The map y ↦ x + y as a CircleDeg1Lift. More precisely, we define a homomorphism from Multiplicative to CircleDeg1Liftˣ, so the translation by x is translation (Multiplicative.ofAdd x).

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem CircleDeg1Lift.translate_apply (x y : ) :
        (CircleDeg1Lift.translate (Multiplicative.ofAdd x)) y = x + y
        @[simp]
        theorem CircleDeg1Lift.translate_inv_apply (x y : ) :
        (CircleDeg1Lift.translate (Multiplicative.ofAdd x))⁻¹ y = -x + y
        @[simp]
        theorem CircleDeg1Lift.translate_zpow (x : ) (n : ) :
        CircleDeg1Lift.translate (Multiplicative.ofAdd x) ^ n = CircleDeg1Lift.translate (Multiplicative.ofAdd (n * x))
        @[simp]
        theorem CircleDeg1Lift.translate_pow (x : ) (n : ) :
        CircleDeg1Lift.translate (Multiplicative.ofAdd x) ^ n = CircleDeg1Lift.translate (Multiplicative.ofAdd (n * x))
        @[simp]
        theorem CircleDeg1Lift.translate_iterate (x : ) (n : ) :
        (⇑(CircleDeg1Lift.translate (Multiplicative.ofAdd x)))^[n] = (CircleDeg1Lift.translate (Multiplicative.ofAdd (n * x)))

        Commutativity with integer translations #

        In this section we prove that f commutes with translations by an integer number. First we formulate these statements (for a natural or an integer number, addition on the left or on the right, addition or subtraction) using Function.Commute, then reformulate as simp lemmas map_int_add etc.

        theorem CircleDeg1Lift.commute_nat_add (f : CircleDeg1Lift) (n : ) :
        Function.Commute f fun (x : ) => n + x
        theorem CircleDeg1Lift.commute_add_nat (f : CircleDeg1Lift) (n : ) :
        Function.Commute f fun (x : ) => x + n
        theorem CircleDeg1Lift.commute_sub_nat (f : CircleDeg1Lift) (n : ) :
        Function.Commute f fun (x : ) => x - n
        theorem CircleDeg1Lift.commute_add_int (f : CircleDeg1Lift) (n : ) :
        Function.Commute f fun (x : ) => x + n
        theorem CircleDeg1Lift.commute_int_add (f : CircleDeg1Lift) (n : ) :
        Function.Commute f fun (x : ) => n + x
        theorem CircleDeg1Lift.commute_sub_int (f : CircleDeg1Lift) (n : ) :
        Function.Commute f fun (x : ) => x - n
        @[simp]
        theorem CircleDeg1Lift.map_int_add (f : CircleDeg1Lift) (m : ) (x : ) :
        f (m + x) = m + f x
        @[simp]
        theorem CircleDeg1Lift.map_add_int (f : CircleDeg1Lift) (x : ) (m : ) :
        f (x + m) = f x + m
        @[simp]
        theorem CircleDeg1Lift.map_sub_int (f : CircleDeg1Lift) (x : ) (n : ) :
        f (x - n) = f x - n
        @[simp]
        theorem CircleDeg1Lift.map_add_nat (f : CircleDeg1Lift) (x : ) (n : ) :
        f (x + n) = f x + n
        @[simp]
        theorem CircleDeg1Lift.map_nat_add (f : CircleDeg1Lift) (n : ) (x : ) :
        f (n + x) = n + f x
        @[simp]
        theorem CircleDeg1Lift.map_sub_nat (f : CircleDeg1Lift) (x : ) (n : ) :
        f (x - n) = f x - n
        theorem CircleDeg1Lift.map_int_of_map_zero (f : CircleDeg1Lift) (n : ) :
        f n = f 0 + n

        Pointwise order on circle maps #

        Monotone circle maps form a lattice with respect to the pointwise order

        Equations
        • One or more equations did not get rendered due to their size.
        @[simp]
        theorem CircleDeg1Lift.sup_apply (f g : CircleDeg1Lift) (x : ) :
        (f g) x = f x g x
        @[simp]
        theorem CircleDeg1Lift.inf_apply (f g : CircleDeg1Lift) (x : ) :
        (f g) x = f x g x
        theorem CircleDeg1Lift.iterate_mono {f g : CircleDeg1Lift} (h : f g) (n : ) :
        (⇑f)^[n] (⇑g)^[n]
        theorem CircleDeg1Lift.pow_mono {f g : CircleDeg1Lift} (h : f g) (n : ) :
        f ^ n g ^ n

        Estimates on (f * g) 0 #

        We prove the estimates f 0 + ⌊g 0⌋ ≤ f (g 0) ≤ f 0 + ⌈g 0⌉ and some corollaries with added/removed floors and ceils.

        We also prove that for two semiconjugate maps g₁, g₂, the distance between g₁ 0 and g₂ 0 is less than two.

        theorem CircleDeg1Lift.map_map_zero_lt (f g : CircleDeg1Lift) :
        f (g 0) < f 0 + g 0 + 1
        theorem CircleDeg1Lift.lt_map_map_zero (f g : CircleDeg1Lift) :
        f 0 + g 0 - 1 < f (g 0)
        theorem CircleDeg1Lift.dist_map_map_zero_lt (f g : CircleDeg1Lift) :
        dist (f 0 + g 0) (f (g 0)) < 1
        theorem CircleDeg1Lift.dist_map_zero_lt_of_semiconj {f g₁ g₂ : CircleDeg1Lift} (h : Function.Semiconj f g₁ g₂) :
        dist (g₁ 0) (g₂ 0) < 2
        theorem CircleDeg1Lift.dist_map_zero_lt_of_semiconjBy {f g₁ g₂ : CircleDeg1Lift} (h : SemiconjBy f g₁ g₂) :
        dist (g₁ 0) (g₂ 0) < 2

        Limits at infinities and continuity #

        theorem CircleDeg1Lift.tendsto_atBot (f : CircleDeg1Lift) :
        Filter.Tendsto (⇑f) Filter.atBot Filter.atBot
        theorem CircleDeg1Lift.tendsto_atTop (f : CircleDeg1Lift) :
        Filter.Tendsto (⇑f) Filter.atTop Filter.atTop

        Estimates on (f^n) x #

        If we know that f x is /<//>/= to x + m, then we have a similar estimate on f^[n] x and x + n * m.

        For , , and = we formulate both of (implication) and iff versions because implications work for n = 0. For < and > we formulate only iff versions.

        theorem CircleDeg1Lift.iterate_le_of_map_le_add_int (f : CircleDeg1Lift) {x : } {m : } (h : f x x + m) (n : ) :
        (⇑f)^[n] x x + n * m
        theorem CircleDeg1Lift.le_iterate_of_add_int_le_map (f : CircleDeg1Lift) {x : } {m : } (h : x + m f x) (n : ) :
        x + n * m (⇑f)^[n] x
        theorem CircleDeg1Lift.iterate_eq_of_map_eq_add_int (f : CircleDeg1Lift) {x : } {m : } (h : f x = x + m) (n : ) :
        (⇑f)^[n] x = x + n * m
        theorem CircleDeg1Lift.iterate_pos_le_iff (f : CircleDeg1Lift) {x : } {m : } {n : } (hn : 0 < n) :
        (⇑f)^[n] x x + n * m f x x + m
        theorem CircleDeg1Lift.iterate_pos_lt_iff (f : CircleDeg1Lift) {x : } {m : } {n : } (hn : 0 < n) :
        (⇑f)^[n] x < x + n * m f x < x + m
        theorem CircleDeg1Lift.iterate_pos_eq_iff (f : CircleDeg1Lift) {x : } {m : } {n : } (hn : 0 < n) :
        (⇑f)^[n] x = x + n * m f x = x + m
        theorem CircleDeg1Lift.le_iterate_pos_iff (f : CircleDeg1Lift) {x : } {m : } {n : } (hn : 0 < n) :
        x + n * m (⇑f)^[n] x x + m f x
        theorem CircleDeg1Lift.lt_iterate_pos_iff (f : CircleDeg1Lift) {x : } {m : } {n : } (hn : 0 < n) :
        x + n * m < (⇑f)^[n] x x + m < f x

        Definition of translation number #

        An auxiliary sequence used to define the translation number.

        Equations
        • f.transnumAuxSeq n = (f ^ 2 ^ n) 0 / 2 ^ n
        Instances For

          The translation number of a CircleDeg1Lift, $τ(f)=\lim_{n→∞}\frac{f^n(x)-x}{n}$. We use an auxiliary sequence \frac{f^{2^n}(0)}{2^n} to define τ(f) because some proofs are simpler this way.

          Equations
          • f.translationNumber = limUnder Filter.atTop f.transnumAuxSeq
          Instances For
            theorem CircleDeg1Lift.transnumAuxSeq_def (f : CircleDeg1Lift) :
            f.transnumAuxSeq = fun (n : ) => (f ^ 2 ^ n) 0 / 2 ^ n
            theorem CircleDeg1Lift.translationNumber_eq_of_tendsto_aux (f : CircleDeg1Lift) {τ' : } (h : Filter.Tendsto f.transnumAuxSeq Filter.atTop (nhds τ')) :
            f.translationNumber = τ'
            theorem CircleDeg1Lift.translationNumber_eq_of_tendsto₀ (f : CircleDeg1Lift) {τ' : } (h : Filter.Tendsto (fun (n : ) => (⇑f)^[n] 0 / n) Filter.atTop (nhds τ')) :
            f.translationNumber = τ'
            theorem CircleDeg1Lift.translationNumber_eq_of_tendsto₀' (f : CircleDeg1Lift) {τ' : } (h : Filter.Tendsto (fun (n : ) => (⇑f)^[n + 1] 0 / (n + 1)) Filter.atTop (nhds τ')) :
            f.translationNumber = τ'
            theorem CircleDeg1Lift.transnumAuxSeq_zero (f : CircleDeg1Lift) :
            f.transnumAuxSeq 0 = f 0
            theorem CircleDeg1Lift.transnumAuxSeq_dist_lt (f : CircleDeg1Lift) (n : ) :
            dist (f.transnumAuxSeq n) (f.transnumAuxSeq (n + 1)) < 1 / 2 / 2 ^ n
            theorem CircleDeg1Lift.tendsto_translationNumber_aux (f : CircleDeg1Lift) :
            Filter.Tendsto f.transnumAuxSeq Filter.atTop (nhds f.translationNumber)
            theorem CircleDeg1Lift.tendsto_translationNumber_of_dist_bounded_aux (f : CircleDeg1Lift) (x : ) (C : ) (H : ∀ (n : ), dist ((f ^ n) 0) (x n) C) :
            Filter.Tendsto (fun (n : ) => x (2 ^ n) / 2 ^ n) Filter.atTop (nhds f.translationNumber)
            theorem CircleDeg1Lift.translationNumber_eq_of_dist_bounded {f g : CircleDeg1Lift} (C : ) (H : ∀ (n : ), dist ((f ^ n) 0) ((g ^ n) 0) C) :
            f.translationNumber = g.translationNumber
            theorem CircleDeg1Lift.translationNumber_eq_of_semiconjBy {f g₁ g₂ : CircleDeg1Lift} (H : SemiconjBy f g₁ g₂) :
            g₁.translationNumber = g₂.translationNumber
            theorem CircleDeg1Lift.translationNumber_eq_of_semiconj {f g₁ g₂ : CircleDeg1Lift} (H : Function.Semiconj f g₁ g₂) :
            g₁.translationNumber = g₂.translationNumber
            theorem CircleDeg1Lift.translationNumber_mul_of_commute {f g : CircleDeg1Lift} (h : Commute f g) :
            (f * g).translationNumber = f.translationNumber + g.translationNumber
            @[simp]
            theorem CircleDeg1Lift.translationNumber_units_inv (f : CircleDeg1Liftˣ) :
            (↑f⁻¹).translationNumber = -(↑f).translationNumber
            @[simp]
            theorem CircleDeg1Lift.translationNumber_pow (f : CircleDeg1Lift) (n : ) :
            (f ^ n).translationNumber = n * f.translationNumber
            @[simp]
            theorem CircleDeg1Lift.translationNumber_zpow (f : CircleDeg1Liftˣ) (n : ) :
            (↑(f ^ n)).translationNumber = n * (↑f).translationNumber
            @[simp]
            theorem CircleDeg1Lift.translationNumber_conj_eq (f : CircleDeg1Liftˣ) (g : CircleDeg1Lift) :
            (f * g * f⁻¹).translationNumber = g.translationNumber
            @[simp]
            theorem CircleDeg1Lift.translationNumber_conj_eq' (f : CircleDeg1Liftˣ) (g : CircleDeg1Lift) :
            (f⁻¹ * g * f).translationNumber = g.translationNumber
            theorem CircleDeg1Lift.dist_pow_map_zero_mul_translationNumber_le (f : CircleDeg1Lift) (n : ) :
            dist ((f ^ n) 0) (n * f.translationNumber) 1
            theorem CircleDeg1Lift.tendsto_translation_number₀' (f : CircleDeg1Lift) :
            Filter.Tendsto (fun (n : ) => (f ^ (n + 1)) 0 / (n + 1)) Filter.atTop (nhds f.translationNumber)
            theorem CircleDeg1Lift.tendsto_translation_number₀ (f : CircleDeg1Lift) :
            Filter.Tendsto (fun (n : ) => (f ^ n) 0 / n) Filter.atTop (nhds f.translationNumber)
            theorem CircleDeg1Lift.tendsto_translationNumber (f : CircleDeg1Lift) (x : ) :
            Filter.Tendsto (fun (n : ) => ((f ^ n) x - x) / n) Filter.atTop (nhds f.translationNumber)

            For any x : ℝ the sequence $\frac{f^n(x)-x}{n}$ tends to the translation number of f. In particular, this limit does not depend on x.

            theorem CircleDeg1Lift.tendsto_translation_number' (f : CircleDeg1Lift) (x : ) :
            Filter.Tendsto (fun (n : ) => ((f ^ (n + 1)) x - x) / (n + 1)) Filter.atTop (nhds f.translationNumber)
            theorem CircleDeg1Lift.translationNumber_translate (x : ) :
            (↑(CircleDeg1Lift.translate (Multiplicative.ofAdd x))).translationNumber = x
            theorem CircleDeg1Lift.translationNumber_le_of_le_add (f : CircleDeg1Lift) {z : } (hz : ∀ (x : ), f x x + z) :
            f.translationNumber z
            theorem CircleDeg1Lift.le_translationNumber_of_add_le (f : CircleDeg1Lift) {z : } (hz : ∀ (x : ), x + z f x) :
            z f.translationNumber
            theorem CircleDeg1Lift.translationNumber_le_of_le_add_int (f : CircleDeg1Lift) {x : } {m : } (h : f x x + m) :
            f.translationNumber m
            theorem CircleDeg1Lift.translationNumber_le_of_le_add_nat (f : CircleDeg1Lift) {x : } {m : } (h : f x x + m) :
            f.translationNumber m
            theorem CircleDeg1Lift.le_translationNumber_of_add_int_le (f : CircleDeg1Lift) {x : } {m : } (h : x + m f x) :
            m f.translationNumber
            theorem CircleDeg1Lift.le_translationNumber_of_add_nat_le (f : CircleDeg1Lift) {x : } {m : } (h : x + m f x) :
            m f.translationNumber
            theorem CircleDeg1Lift.translationNumber_of_eq_add_int (f : CircleDeg1Lift) {x : } {m : } (h : f x = x + m) :
            f.translationNumber = m

            If f x - x is an integer number m for some point x, then τ f = m. On the circle this means that a map with a fixed point has rotation number zero.

            theorem CircleDeg1Lift.floor_sub_le_translationNumber (f : CircleDeg1Lift) (x : ) :
            f x - x f.translationNumber
            theorem CircleDeg1Lift.translationNumber_le_ceil_sub (f : CircleDeg1Lift) (x : ) :
            f.translationNumber f x - x
            theorem CircleDeg1Lift.map_lt_of_translationNumber_lt_int (f : CircleDeg1Lift) {n : } (h : f.translationNumber < n) (x : ) :
            f x < x + n
            theorem CircleDeg1Lift.map_lt_of_translationNumber_lt_nat (f : CircleDeg1Lift) {n : } (h : f.translationNumber < n) (x : ) :
            f x < x + n
            theorem CircleDeg1Lift.map_lt_add_translationNumber_add_one (f : CircleDeg1Lift) (x : ) :
            f x < x + f.translationNumber + 1
            theorem CircleDeg1Lift.lt_map_of_int_lt_translationNumber (f : CircleDeg1Lift) {n : } (h : n < f.translationNumber) (x : ) :
            x + n < f x
            theorem CircleDeg1Lift.lt_map_of_nat_lt_translationNumber (f : CircleDeg1Lift) {n : } (h : n < f.translationNumber) (x : ) :
            x + n < f x
            theorem CircleDeg1Lift.translationNumber_of_map_pow_eq_add_int (f : CircleDeg1Lift) {x : } {n : } {m : } (h : (f ^ n) x = x + m) (hn : 0 < n) :
            f.translationNumber = m / n

            If f^n x - x, n > 0, is an integer number m for some point x, then τ f = m / n. On the circle this means that a map with a periodic orbit has a rational rotation number.

            theorem CircleDeg1Lift.forall_map_sub_of_Icc (f : CircleDeg1Lift) (P : Prop) (h : xSet.Icc 0 1, P (f x - x)) (x : ) :
            P (f x - x)

            If a predicate depends only on f x - x and holds for all 0 ≤ x ≤ 1, then it holds for all x.

            theorem CircleDeg1Lift.translationNumber_lt_of_forall_lt_add (f : CircleDeg1Lift) (hf : Continuous f) {z : } (hz : ∀ (x : ), f x < x + z) :
            f.translationNumber < z
            theorem CircleDeg1Lift.lt_translationNumber_of_forall_add_lt (f : CircleDeg1Lift) (hf : Continuous f) {z : } (hz : ∀ (x : ), x + z < f x) :
            z < f.translationNumber
            theorem CircleDeg1Lift.exists_eq_add_translationNumber (f : CircleDeg1Lift) (hf : Continuous f) :
            ∃ (x : ), f x = x + f.translationNumber

            If f is a continuous monotone map ℝ → ℝ, f (x + 1) = f x + 1, then there exists x such that f x = x + τ f.

            theorem CircleDeg1Lift.translationNumber_eq_int_iff (f : CircleDeg1Lift) (hf : Continuous f) {m : } :
            f.translationNumber = m ∃ (x : ), f x = x + m
            theorem CircleDeg1Lift.translationNumber_eq_rat_iff (f : CircleDeg1Lift) (hf : Continuous f) {m : } {n : } (hn : 0 < n) :
            f.translationNumber = m / n ∃ (x : ), (f ^ n) x = x + m
            theorem CircleDeg1Lift.semiconj_of_group_action_of_forall_translationNumber_eq {G : Type u_1} [Group G] (f₁ f₂ : G →* CircleDeg1Lift) (h : ∀ (g : G), (f₁ g).translationNumber = (f₂ g).translationNumber) :
            ∃ (F : CircleDeg1Lift), ∀ (g : G), Function.Semiconj F (f₁ g) (f₂ g)

            Consider two actions f₁ f₂ : G →* CircleDeg1Lift of a group on the real line by lifts of orientation preserving circle homeomorphisms. Suppose that for each g : G the homeomorphisms f₁ g and f₂ g have equal rotation numbers. Then there exists F : CircleDeg1Lift such that F * f₁ g = f₂ g * F for all g : G.

            This is a version of Proposition 5.4 from [Étienne Ghys, Groupes d'homeomorphismes du cercle et cohomologie bornee][ghys87:groupes].

            theorem CircleDeg1Lift.units_semiconj_of_translationNumber_eq {f₁ f₂ : CircleDeg1Liftˣ} (h : (↑f₁).translationNumber = (↑f₂).translationNumber) :
            ∃ (F : CircleDeg1Lift), Function.Semiconj F f₁ f₂

            If two lifts of circle homeomorphisms have the same translation number, then they are semiconjugate by a CircleDeg1Lift. This version uses arguments f₁ f₂ : CircleDeg1Liftˣ to assume that f₁ and f₂ are homeomorphisms.

            theorem CircleDeg1Lift.semiconj_of_isUnit_of_translationNumber_eq {f₁ f₂ : CircleDeg1Lift} (h₁ : IsUnit f₁) (h₂ : IsUnit f₂) (h : f₁.translationNumber = f₂.translationNumber) :
            ∃ (F : CircleDeg1Lift), Function.Semiconj F f₁ f₂

            If two lifts of circle homeomorphisms have the same translation number, then they are semiconjugate by a CircleDeg1Lift. This version uses assumptions IsUnit f₁ and IsUnit f₂ to assume that f₁ and f₂ are homeomorphisms.

            theorem CircleDeg1Lift.semiconj_of_bijective_of_translationNumber_eq {f₁ f₂ : CircleDeg1Lift} (h₁ : Function.Bijective f₁) (h₂ : Function.Bijective f₂) (h : f₁.translationNumber = f₂.translationNumber) :
            ∃ (F : CircleDeg1Lift), Function.Semiconj F f₁ f₂

            If two lifts of circle homeomorphisms have the same translation number, then they are semiconjugate by a CircleDeg1Lift. This version uses assumptions bijective f₁ and bijective f₂ to assume that f₁ and f₂ are homeomorphisms.