Rational neighborhood relations

Content created by Louis Wasserman and malarbol.

Created on 2025-08-18.
Last modified on 2025-08-18.

module metric-spaces.rational-neighborhood-relations where
Imports
open import elementary-number-theory.positive-rational-numbers

open import foundation.binary-relations
open import foundation.dependent-pair-types
open import foundation.empty-types
open import foundation.equivalence-relations
open import foundation.equivalences
open import foundation.existential-quantification
open import foundation.function-extensionality
open import foundation.function-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.identity-types
open import foundation.logical-equivalences
open import foundation.negation
open import foundation.propositional-extensionality
open import foundation.propositions
open import foundation.sets
open import foundation.subtypes
open import foundation.torsorial-type-families
open import foundation.transport-along-identifications
open import foundation.univalence
open import foundation.universe-levels

Idea

A rational neighborhood relation is a type family of proposition-valued binary relations indexed by the positive rational numbers.

Given a rational neighborhood relation N on A and some positive rational number d : ℚ⁺ such that N d x y holds for some pair of points x y : A, we interpret d as an upper bound on the distance between x and y with respect to the rational neighborhood relation.

Definitions

Rational neighborhood relations on a type

module _
  {l1 : Level} (l2 : Level) (A : UU l1)
  where

  Rational-Neighborhood-Relation : UU (l1  lsuc l2)
  Rational-Neighborhood-Relation = ℚ⁺  Relation-Prop l2 A

module _
  {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
  where

  neighborhood-Rational-Neighborhood-Relation :
    ℚ⁺  Relation l2 A
  neighborhood-Rational-Neighborhood-Relation d x y =
    type-Prop (B d x y)

  is-prop-neighborhood-Rational-Neighborhood-Relation :
    (d : ℚ⁺) (x y : A) 
    is-prop (neighborhood-Rational-Neighborhood-Relation d x y)
  is-prop-neighborhood-Rational-Neighborhood-Relation d x y =
    is-prop-type-Prop (B d x y)

  is-upper-bound-dist-prop-Rational-Neighborhood-Relation :
    A  A  ℚ⁺  Prop l2
  is-upper-bound-dist-prop-Rational-Neighborhood-Relation x y d = B d x y

  is-upper-bound-dist-Rational-Neighborhood-Relation :
    A  A  ℚ⁺  UU l2
  is-upper-bound-dist-Rational-Neighborhood-Relation x y d =
    neighborhood-Rational-Neighborhood-Relation d x y

  is-prop-is-upper-bound-dist-Rational-Neighborhood-Relation :
    (x y : A) (d : ℚ⁺) 
    is-prop (is-upper-bound-dist-Rational-Neighborhood-Relation x y d)
  is-prop-is-upper-bound-dist-Rational-Neighborhood-Relation x y d =
    is-prop-neighborhood-Rational-Neighborhood-Relation d x y

Properties

Equality of rational neighborhood relations

module _
  {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
  {l2' : Level} (N' : Rational-Neighborhood-Relation l2' A)
  where

  Eq-prop-Rational-Neighborhood-Relation : Prop (l1  l2  l2')
  Eq-prop-Rational-Neighborhood-Relation =
    Π-Prop
      ( ℚ⁺)
      ( λ d 
        Π-Prop
          ( A)
          ( λ x 
            Π-Prop
              ( A)
              ( λ y  N d x y  N' d x y)))

  Eq-Rational-Neighborhood-Relation : UU (l1  l2  l2')
  Eq-Rational-Neighborhood-Relation =
    type-Prop Eq-prop-Rational-Neighborhood-Relation

  is-prop-Eq-Rational-Neighborhood-Relation :
    is-prop Eq-Rational-Neighborhood-Relation
  is-prop-Eq-Rational-Neighborhood-Relation =
    is-prop-type-Prop Eq-prop-Rational-Neighborhood-Relation

Identity principle for rational neighborhood relations

module _
  {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
  where

  refl-Eq-Rational-Neighborhood-Relation : Eq-Rational-Neighborhood-Relation N N
  refl-Eq-Rational-Neighborhood-Relation d x y = id-iff

  Eq-eq-Rational-Neighborhood-Relation :
    (N' : Rational-Neighborhood-Relation l2 A) 
    N  N' 
    Eq-Rational-Neighborhood-Relation N N'
  Eq-eq-Rational-Neighborhood-Relation .N refl =
    refl-Eq-Rational-Neighborhood-Relation

  eq-Eq-Rational-Neighborhood-Relation :
    (N' : Rational-Neighborhood-Relation l2 A) 
    Eq-Rational-Neighborhood-Relation N N' 
    N  N'
  eq-Eq-Rational-Neighborhood-Relation N' H =
    eq-htpy
      ( λ d 
        eq-htpy
        ( λ x 
          eq-htpy
          ( λ y 
            eq-iff' (N d x y) (N' d x y) (H d x y))))

  abstract
    is-torsorial-Eq-Rational-Neighborhood-Relation :
      is-torsorial
        ( λ ( N' : Rational-Neighborhood-Relation l2 A) 
            ( Eq-Rational-Neighborhood-Relation N N'))
    is-torsorial-Eq-Rational-Neighborhood-Relation =
      ( N , refl-Eq-Rational-Neighborhood-Relation) ,
      ( λ (N' , e) 
        eq-type-subtype
          ( Eq-prop-Rational-Neighborhood-Relation N)
          ( eq-Eq-Rational-Neighborhood-Relation N' e))

  is-fiberwise-equiv-Eq-eq-Rational-Neighborhood-Relation :
    (N' : Rational-Neighborhood-Relation l2 A) 
    is-equiv (Eq-eq-Rational-Neighborhood-Relation N')
  is-fiberwise-equiv-Eq-eq-Rational-Neighborhood-Relation =
    fundamental-theorem-id
      is-torsorial-Eq-Rational-Neighborhood-Relation
      Eq-eq-Rational-Neighborhood-Relation

  equiv-Eq-eq-Rational-Neighborhood-Relation :
    (N' : Rational-Neighborhood-Relation l2 A) 
    (N  N')  (Eq-Rational-Neighborhood-Relation N N')
  equiv-Eq-eq-Rational-Neighborhood-Relation N' =
    Eq-eq-Rational-Neighborhood-Relation N' ,
    is-fiberwise-equiv-Eq-eq-Rational-Neighborhood-Relation N'

Characterization of the transport of rational neighborhood relations along equality of types

module _
  {l1 l2 : Level} (A : UU l1)
  where

  Eq-map-eq-tr-Rational-Neighborhood-Relation :
    (B : UU l1) (e : A  B) (S : Rational-Neighborhood-Relation l2 A) 
    Eq-Rational-Neighborhood-Relation
      ( S)
      ( λ d x y 
        tr (Rational-Neighborhood-Relation l2) e S d (map-eq e x) (map-eq e y))
  Eq-map-eq-tr-Rational-Neighborhood-Relation .A refl S =
    refl-Eq-Rational-Neighborhood-Relation S

  eq-map-eq-tr-Rational-Neighborhood-Relation :
    (B : UU l1) (e : A  B) (S : Rational-Neighborhood-Relation l2 A) 
    Id
      ( S)
      ( λ d x y 
        tr (Rational-Neighborhood-Relation l2) e S d (map-eq e x) (map-eq e y))
  eq-map-eq-tr-Rational-Neighborhood-Relation B e S =
    eq-Eq-Rational-Neighborhood-Relation
      ( S)
      ( λ d x y 
        tr (Rational-Neighborhood-Relation l2) e S d (map-eq e x) (map-eq e y))
      ( Eq-map-eq-tr-Rational-Neighborhood-Relation B e S)

  Eq-map-inv-eq-tr-Rational-Neighborhood-Relation :
    (B : UU l1) (e : A  B) (S : Rational-Neighborhood-Relation l2 A) 
    Eq-Rational-Neighborhood-Relation
      ( tr (Rational-Neighborhood-Relation l2) e S)
      ( λ d x y  S d (map-inv-eq e x) (map-inv-eq e y))
  Eq-map-inv-eq-tr-Rational-Neighborhood-Relation .A refl S =
    refl-Eq-Rational-Neighborhood-Relation S

  eq-map-inv-eq-tr-Rational-Neighborhood-Relation :
    (B : UU l1) (e : A  B) (S : Rational-Neighborhood-Relation l2 A) 
    Id
      ( tr (Rational-Neighborhood-Relation l2) e S)
      ( λ d x y  S d (map-inv-eq e x) (map-inv-eq e y))
  eq-map-inv-eq-tr-Rational-Neighborhood-Relation B e S =
    eq-Eq-Rational-Neighborhood-Relation
      ( tr (Rational-Neighborhood-Relation l2) e S)
      ( λ d x y  S d (map-inv-eq e x) (map-inv-eq e y))
      ( Eq-map-inv-eq-tr-Rational-Neighborhood-Relation B e S)

The similarity relation induced by a rational neighborhood relation

module _ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
  where

  sim-prop-Rational-Neighborhood-Relation : Relation-Prop (l1  l2) A
  sim-prop-Rational-Neighborhood-Relation x y =
    Π-Prop
      ( ℚ⁺)
      ( λ d 
        Π-Prop
          ( A)
          ( λ z 
            product-Prop
              ( N d x z  N d y z)
              ( N d z x  N d z y)))

  sim-Rational-Neighborhood-Relation : Relation (l1  l2) A
  sim-Rational-Neighborhood-Relation x y =
    type-Prop (sim-prop-Rational-Neighborhood-Relation x y)

  is-prop-sim-Rational-Neighborhood-Relatiion :
    (x y : A)  is-prop (sim-Rational-Neighborhood-Relation x y)
  is-prop-sim-Rational-Neighborhood-Relatiion x y =
    is-prop-type-Prop (sim-prop-Rational-Neighborhood-Relation x y)

  iff-left-neighbor-sim-Rational-Neighborhood-Relation :
    {x y : A} 
    sim-Rational-Neighborhood-Relation x y 
    (d : ℚ⁺) (z : A) 
    neighborhood-Rational-Neighborhood-Relation N d x z 
    neighborhood-Rational-Neighborhood-Relation N d y z
  iff-left-neighbor-sim-Rational-Neighborhood-Relation x≍y d z =
    pr1 (x≍y d z)

  iff-right-neighbor-sim-Rational-Neighborhood-Relation :
    {x y : A} 
    sim-Rational-Neighborhood-Relation x y 
    (d : ℚ⁺) (z : A) 
    neighborhood-Rational-Neighborhood-Relation N d z x 
    neighborhood-Rational-Neighborhood-Relation N d z y
  iff-right-neighbor-sim-Rational-Neighborhood-Relation x≍y d z =
    pr2 (x≍y d z)

  refl-sim-Rational-Neighborhood-Relation :
    (x : A)  sim-Rational-Neighborhood-Relation x x
  refl-sim-Rational-Neighborhood-Relation x d z = id-iff , id-iff

  sim-eq-Rational-Neighborhood-Relation :
    (x y : A)  x  y  sim-Rational-Neighborhood-Relation x y
  sim-eq-Rational-Neighborhood-Relation x .x refl =
    refl-sim-Rational-Neighborhood-Relation x

  symmetric-sim-Rational-Neighborhood-Relation :
    (x y : A) 
    sim-Rational-Neighborhood-Relation x y 
    sim-Rational-Neighborhood-Relation y x
  symmetric-sim-Rational-Neighborhood-Relation x y x≍y d z =
    ( inv-iff (iff-left-neighbor-sim-Rational-Neighborhood-Relation x≍y d z)) ,
    ( inv-iff (iff-right-neighbor-sim-Rational-Neighborhood-Relation x≍y d z))

  inv-sim-Rational-Neighborhood-Relation :
    {x y : A} 
    sim-Rational-Neighborhood-Relation x y 
    sim-Rational-Neighborhood-Relation y x
  inv-sim-Rational-Neighborhood-Relation {x} {y} =
    symmetric-sim-Rational-Neighborhood-Relation x y

  transitive-sim-Rational-Neighborhood-Relation :
    (x y z : A) 
    sim-Rational-Neighborhood-Relation y z 
    sim-Rational-Neighborhood-Relation x y 
    sim-Rational-Neighborhood-Relation x z
  transitive-sim-Rational-Neighborhood-Relation x y z y≍z x≍y d w =
    ( ( iff-left-neighbor-sim-Rational-Neighborhood-Relation y≍z d w) ∘iff
      ( iff-left-neighbor-sim-Rational-Neighborhood-Relation x≍y d w)) ,
    ( ( iff-right-neighbor-sim-Rational-Neighborhood-Relation y≍z d w) ∘iff
      ( iff-right-neighbor-sim-Rational-Neighborhood-Relation x≍y d w))

  is-equivalence-relation-sim-Rational-Neighborhood-Relation :
    is-equivalence-relation (sim-prop-Rational-Neighborhood-Relation)
  is-equivalence-relation-sim-Rational-Neighborhood-Relation =
    refl-sim-Rational-Neighborhood-Relation ,
    symmetric-sim-Rational-Neighborhood-Relation ,
    transitive-sim-Rational-Neighborhood-Relation

  equivalence-sim-Rational-Neighborhood-Relation :
    equivalence-relation (l1  l2) A
  equivalence-sim-Rational-Neighborhood-Relation =
    sim-prop-Rational-Neighborhood-Relation ,
    is-equivalence-relation-sim-Rational-Neighborhood-Relation

Similar elements have equivalent self-neighborhoods

module _
  {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
  where

  iff-self-neighborhood-sim-Rational-Neighborhood-Relation :
    (d : ℚ⁺) (x y : A) 
    sim-Rational-Neighborhood-Relation N x y 
    neighborhood-Rational-Neighborhood-Relation N d x x 
    neighborhood-Rational-Neighborhood-Relation N d y y
  iff-self-neighborhood-sim-Rational-Neighborhood-Relation d x y x≍y =
    ( iff-right-neighbor-sim-Rational-Neighborhood-Relation N x≍y d y) ∘iff
    ( iff-left-neighbor-sim-Rational-Neighborhood-Relation N x≍y d x)

Recent changes