A uniform homeomorphism between the unit interval and a proper closed interval in the real numbers

Content created by Louis Wasserman.

Created on 2026-01-30.
Last modified on 2026-01-30.

{-# OPTIONS --lossy-unification #-}

module real-numbers.uniform-homeomorphism-unit-interval-proper-closed-interval-real-numbers where
Imports
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.existential-quantification
open import foundation.identity-types
open import foundation.retractions
open import foundation.sections
open import foundation.subtypes
open import foundation.universe-levels

open import metric-spaces.closed-subsets-metric-spaces
open import metric-spaces.compact-metric-spaces
open import metric-spaces.subspaces-metric-spaces
open import metric-spaces.totally-bounded-metric-spaces
open import metric-spaces.uniform-homeomorphisms-metric-spaces
open import metric-spaces.uniformly-continuous-maps-metric-spaces

open import order-theory.large-posets

open import real-numbers.addition-real-numbers
open import real-numbers.cauchy-completeness-dedekind-real-numbers
open import real-numbers.dedekind-real-numbers
open import real-numbers.difference-real-numbers
open import real-numbers.inequalities-addition-and-subtraction-real-numbers
open import real-numbers.inequality-real-numbers
open import real-numbers.inhabited-totally-bounded-subsets-real-numbers
open import real-numbers.isometry-addition-real-numbers
open import real-numbers.lipschitz-continuity-multiplication-real-numbers
open import real-numbers.metric-space-of-real-numbers
open import real-numbers.multiplication-positive-real-numbers
open import real-numbers.multiplication-real-numbers
open import real-numbers.multiplicative-inverses-positive-real-numbers
open import real-numbers.negation-real-numbers
open import real-numbers.positive-real-numbers
open import real-numbers.proper-closed-intervals-real-numbers
open import real-numbers.rational-real-numbers
open import real-numbers.similarity-real-numbers
open import real-numbers.totally-bounded-subsets-real-numbers
open import real-numbers.uniformly-continuous-endomaps-real-numbers
open import real-numbers.unit-closed-interval-real-numbers

Idea

The unit interval [0, 1] is uniformly homeomorphic to any proper closed interval [a, b] on the real numbers, with the simplest homeomorphism being the “scaling” map x ↦ (b - a)x + a.

Proof

The map from [0, 1] to a proper closed interval

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b]@(a , b , a<b) : proper-closed-interval-ℝ l1 l2)
  where

  opaque
    real-map-uniform-homeo-unit-proper-closed-interval-ℝ :
      type-unit-interval-ℝ (l1  l2  l3)   (l1  l2  l3)
    real-map-uniform-homeo-unit-proper-closed-interval-ℝ (x , 0≤x , x≤1) =
      (b -ℝ a) *ℝ x +ℝ a

  abstract opaque
    unfolding real-map-uniform-homeo-unit-proper-closed-interval-ℝ

    lower-bound-real-map-uniform-homeo-unit-proper-closed-interval-ℝ :
      (x : type-unit-interval-ℝ (l1  l2  l3)) 
      leq-ℝ
        ( lower-bound-proper-closed-interval-ℝ [a,b])
        ( real-map-uniform-homeo-unit-proper-closed-interval-ℝ x)
    lower-bound-real-map-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , 0≤x , x≤1) =
      let
        open inequality-reasoning-Large-Poset ℝ-Large-Poset
      in
        chain-of-inequalities
          a
           zero-ℝ +ℝ a
            by leq-eq-ℝ (inv (left-unit-law-add-ℝ a))
           (b -ℝ a) *ℝ zero-ℝ +ℝ a
            by
              leq-sim-ℝ'
                ( preserves-sim-right-add-ℝ a _ _
                  ( right-zero-law-mul-ℝ (b -ℝ a)))
           (b -ℝ a) *ℝ x +ℝ a
            by
              preserves-leq-right-add-ℝ a _ _
                ( preserves-leq-left-mul-ℝ⁺
                  ( positive-diff-le-ℝ a<b)
                  ( 0≤x))

    upper-bound-real-map-uniform-homeo-unit-proper-closed-interval-ℝ :
      (x : type-unit-interval-ℝ (l1  l2  l3)) 
      leq-ℝ
        ( real-map-uniform-homeo-unit-proper-closed-interval-ℝ x)
        ( upper-bound-proper-closed-interval-ℝ [a,b])
    upper-bound-real-map-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , 0≤x , x≤1) =
      let
        open inequality-reasoning-Large-Poset ℝ-Large-Poset
      in
        chain-of-inequalities
          (b -ℝ a) *ℝ x +ℝ a
           (b -ℝ a) *ℝ one-ℝ +ℝ a
            by
              preserves-leq-right-add-ℝ a _ _
                ( preserves-leq-left-mul-ℝ⁺
                  ( positive-diff-le-ℝ a<b)
                  ( x≤1))
           (b -ℝ a) +ℝ a
            by leq-eq-ℝ (ap-add-ℝ (right-unit-law-mul-ℝ (b -ℝ a)) refl)
           b
            by leq-sim-ℝ (cancel-right-diff-add-ℝ b a)

  map-uniform-homeo-unit-proper-closed-interval-ℝ :
    type-unit-interval-ℝ (l1  l2  l3) 
    type-proper-closed-interval-ℝ (l1  l2  l3) [a,b]
  map-uniform-homeo-unit-proper-closed-interval-ℝ x =
    ( real-map-uniform-homeo-unit-proper-closed-interval-ℝ x ,
      lower-bound-real-map-uniform-homeo-unit-proper-closed-interval-ℝ x ,
      upper-bound-real-map-uniform-homeo-unit-proper-closed-interval-ℝ x)

The map from a proper closed interval to [0, 1]

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b]@(a , b , a<b) : proper-closed-interval-ℝ l1 l2)
  where

  opaque
    real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
      type-proper-closed-interval-ℝ (l1  l2  l3) [a,b]   (l1  l2  l3)
    real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , a≤x , x≤b) =
      real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (x -ℝ a)

  abstract opaque
    unfolding real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ

    lower-bound-real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
      (x : type-proper-closed-interval-ℝ (l1  l2  l3) [a,b]) 
      leq-ℝ
        ( zero-ℝ)
        ( real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ x)
    lower-bound-real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , a≤x , x≤b) =
      let
        open inequality-reasoning-Large-Poset ℝ-Large-Poset
      in
        chain-of-inequalities
          zero-ℝ
           real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ zero-ℝ
            by leq-sim-ℝ' (right-zero-law-mul-ℝ _)
           real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (a -ℝ a)
            by
              leq-sim-ℝ'
                ( preserves-sim-left-mul-ℝ _ _ _ (right-inverse-law-add-ℝ a))
           real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (x -ℝ a)
            by
              preserves-leq-left-mul-ℝ⁺
                ( inv-ℝ⁺ (positive-diff-le-ℝ a<b))
                ( preserves-leq-right-add-ℝ _ _ _ a≤x)

    upper-bound-real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
      (x : type-proper-closed-interval-ℝ (l1  l2  l3) [a,b]) 
      leq-ℝ
        ( real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ x)
        ( one-ℝ)
    upper-bound-real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , a≤x , x≤b) =
      let
        open inequality-reasoning-Large-Poset ℝ-Large-Poset
      in
        chain-of-inequalities
          real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (x -ℝ a)
           real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (b -ℝ a)
            by
              preserves-leq-left-mul-ℝ⁺
                ( inv-ℝ⁺ (positive-diff-le-ℝ a<b))
                ( preserves-leq-right-add-ℝ _ _ _ x≤b)
           one-ℝ
            by leq-sim-ℝ (left-inverse-law-mul-ℝ⁺ (positive-diff-le-ℝ a<b))

  map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
    type-proper-closed-interval-ℝ (l1  l2  l3) [a,b] 
    type-unit-interval-ℝ (l1  l2  l3)
  map-inv-uniform-homeo-unit-proper-closed-interval-ℝ x =
    ( real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ x ,
      lower-bound-real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
        ( x) ,
      upper-bound-real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
        ( x))

The maps between [0, 1] and a proper closed interval are mutual inverses

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b]@(a , b , a<b) : proper-closed-interval-ℝ l1 l2)
  where

  abstract opaque
    unfolding
      real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      real-map-uniform-homeo-unit-proper-closed-interval-ℝ

    is-section-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
      is-section
        ( map-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
        ( map-inv-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
    is-section-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , a≤x , x≤b) =
      eq-type-subtype
        ( subtype-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
        ( equational-reasoning
          ( ( b -ℝ a) *ℝ
            ( real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (x -ℝ a))) +ℝ
          ( a)
           (x -ℝ a) +ℝ a
            by
              ap-add-ℝ
                ( eq-sim-ℝ
                  ( cancel-left-mul-div-ℝ⁺ (positive-diff-le-ℝ a<b) (x -ℝ a)))
                ( refl)
           x
            by eq-sim-ℝ (cancel-right-diff-add-ℝ x a))

    is-retraction-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
      is-retraction
        ( map-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
        ( map-inv-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
    is-retraction-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      (x , 0≤x , x≤1) =
      eq-type-subtype
        ( subset-unit-interval-ℝ (l1  l2  l3))
        ( equational-reasoning
          real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ (((b -ℝ a) *ℝ x +ℝ a) -ℝ a)
           real-inv-ℝ⁺ (positive-diff-le-ℝ a<b) *ℝ ((b -ℝ a) *ℝ x)
            by ap-mul-ℝ refl (eq-sim-ℝ (cancel-right-add-diff-ℝ _ _))
           x
            by eq-sim-ℝ (cancel-left-div-mul-ℝ⁺ (positive-diff-le-ℝ a<b) x))

  is-equiv-map-uniform-homeo-unit-proper-closed-interval-ℝ :
    is-equiv (map-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
  is-equiv-map-uniform-homeo-unit-proper-closed-interval-ℝ =
    is-equiv-is-invertible
      ( map-inv-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
      ( is-section-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ)
      ( is-retraction-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ)

The maps between [0, 1] and a proper closed interval are uniformly continuous

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b]@(a , b , a<b) : proper-closed-interval-ℝ l1 l2)
  where

  abstract opaque
    unfolding
      real-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
      real-map-uniform-homeo-unit-proper-closed-interval-ℝ

    is-uniformly-continuous-map-uniform-homeo-unit-proper-closed-interval-ℝ :
      is-uniformly-continuous-map-Metric-Space
        ( metric-space-unit-interval-ℝ (l1  l2  l3))
        ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
        ( map-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
    is-uniformly-continuous-map-uniform-homeo-unit-proper-closed-interval-ℝ =
      is-uniformly-continuous-map-uniformly-continuous-map-Metric-Space
        ( metric-space-unit-interval-ℝ (l1  l2  l3))
        ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
        ( uniformly-continuous-map-into-subspace-Metric-Space
          ( metric-space-unit-interval-ℝ (l1  l2  l3))
          ( metric-space-ℝ (l1  l2  l3))
          ( subtype-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
          ( comp-uniformly-continuous-map-Metric-Space
            ( metric-space-unit-interval-ℝ (l1  l2  l3))
            ( metric-space-ℝ (l1  l2  l3))
            ( metric-space-ℝ (l1  l2  l3))
            ( comp-uniformly-continuous-endomap-ℝ
              ( uniformly-continuous-map-right-add-ℝ a)
              ( uniformly-continuous-map-right-mul-ℝ (l1  l2  l3) (b -ℝ a)))
            ( uniformly-continuous-inclusion-subspace-Metric-Space
              ( metric-space-ℝ (l1  l2  l3))
              ( subset-unit-interval-ℝ (l1  l2  l3))))
          ( λ x 
            pr2
              ( map-uniform-homeo-unit-proper-closed-interval-ℝ
                ( l3)
                ( [a,b])
                ( x))))

    is-uniformly-continuous-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ :
      is-uniformly-continuous-map-Metric-Space
        ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
        ( metric-space-unit-interval-ℝ (l1  l2  l3))
        ( map-inv-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
    is-uniformly-continuous-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ =
      is-uniformly-continuous-map-uniformly-continuous-map-Metric-Space
        ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
        ( metric-space-unit-interval-ℝ (l1  l2  l3))
        ( uniformly-continuous-map-into-subspace-Metric-Space
          ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
          ( metric-space-ℝ (l1  l2  l3))
          ( subset-unit-interval-ℝ (l1  l2  l3))
          ( comp-uniformly-continuous-map-Metric-Space
            ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
            ( metric-space-ℝ (l1  l2  l3))
            ( metric-space-ℝ (l1  l2  l3))
            ( comp-uniformly-continuous-endomap-ℝ
              ( uniformly-continuous-map-right-mul-ℝ
                ( l1  l2  l3)
                ( real-inv-ℝ⁺ (positive-diff-le-ℝ a<b)))
              ( uniformly-continuous-map-right-add-ℝ (neg-ℝ a)))
            ( uniformly-continuous-inclusion-subspace-Metric-Space
              ( metric-space-ℝ (l1  l2  l3))
              ( subtype-proper-closed-interval-ℝ (l1  l2  l3) [a,b])))
          ( λ x 
            pr2
              ( map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
                ( l3)
                ( [a,b])
                ( x))))

The uniform homeomorphism between [0, 1] and a proper closed interval

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b] : proper-closed-interval-ℝ l1 l2)
  where

  uniform-homeo-unit-proper-closed-interval-ℝ :
    uniform-homeo-Metric-Space
      ( metric-space-unit-interval-ℝ (l1  l2  l3))
      ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
  uniform-homeo-unit-proper-closed-interval-ℝ =
    ( map-uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b] ,
      is-equiv-map-uniform-homeo-unit-proper-closed-interval-ℝ
        ( l3)
        ( [a,b]) ,
      is-uniformly-continuous-map-uniform-homeo-unit-proper-closed-interval-ℝ
        ( l3)
        ( [a,b]) ,
      is-uniformly-continuous-map-inv-uniform-homeo-unit-proper-closed-interval-ℝ
        ( l3)
        ( [a,b]))

Corollaries

Every proper closed interval in is totally bounded

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b] : proper-closed-interval-ℝ l1 l2)
  where

  abstract
    is-totally-bounded-proper-closed-interval-ℝ :
      is-totally-bounded-subset-ℝ
        ( lsuc (l1  l2  l3))
        ( subtype-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
    is-totally-bounded-proper-closed-interval-ℝ =
      preserves-is-totally-bounded-uniform-homeo-Metric-Space
        ( metric-space-unit-interval-ℝ (l1  l2  l3))
        ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
        ( uniform-homeo-unit-proper-closed-interval-ℝ l3 [a,b])
        ( is-totally-bounded-unit-closed-interval-ℝ (l1  l2  l3))

Every proper closed interval in is inhabited and totally bounded

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b] : proper-closed-interval-ℝ l1 l2)
  where

  inhabited-totally-bounded-subset-proper-closed-interval-ℝ :
    inhabited-totally-bounded-subset-ℝ
      ( l1  l2  l3)
      ( l1  l2  l3)
      ( lsuc (l1  l2  l3))
  inhabited-totally-bounded-subset-proper-closed-interval-ℝ =
    ( ( subtype-proper-closed-interval-ℝ (l1  l2  l3) [a,b] ,
        is-totally-bounded-proper-closed-interval-ℝ l3 [a,b]) ,
      is-inhabited-subtype-proper-closed-interval-ℝ (l2  l3) [a,b])

Every proper closed interval in is compact

module _
  {l1 l2 : Level}
  (l3 : Level)
  ([a,b] : proper-closed-interval-ℝ l1 l2)
  where

  abstract
    is-compact-metric-space-proper-closed-interval-ℝ :
      is-compact-Metric-Space
        ( lsuc (l1  l2  l3))
        ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b])
    is-compact-metric-space-proper-closed-interval-ℝ =
      ( is-totally-bounded-proper-closed-interval-ℝ l3 [a,b] ,
        is-complete-closed-subspace-Complete-Metric-Space
          ( complete-metric-space-ℝ (l1  l2  l3))
          ( subtype-proper-closed-interval-ℝ (l1  l2  l3) [a,b] ,
            is-closed-subset-proper-closed-interval-ℝ [a,b]))

  compact-metric-space-proper-closed-interval-ℝ :
    Compact-Metric-Space
      ( lsuc (l1  l2  l3))
      ( l1  l2  l3)
      ( lsuc (l1  l2  l3))
  compact-metric-space-proper-closed-interval-ℝ =
    ( metric-space-proper-closed-interval-ℝ (l1  l2  l3) [a,b] ,
      is-compact-metric-space-proper-closed-interval-ℝ)

Recent changes