Skip to content

Commit d2b0e9a

Browse files
Add specialisation of metrics to rational numbers (#1471)
1 parent e193576 commit d2b0e9a

File tree

7 files changed

+336
-0
lines changed

7 files changed

+336
-0
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ Highlights
99
Bug-fixes
1010
---------
1111

12+
* Added missing module `Function.Metric` which re-exports
13+
`Function.Metric.(Core/Definitions/Structures/Bundles)`. This module was referred
14+
to in the documentation of its children but until now was not present.
15+
1216
Non-backwards compatible changes
1317
--------------------------------
1418

@@ -21,5 +25,13 @@ Deprecated names
2125
New modules
2226
-----------
2327

28+
* Metrics specialised to co-domains with rational numbers:
29+
```
30+
Function.Metric.Rational
31+
Function.Metric.Rational.Definitions
32+
Function.Metric.Rational.Structures
33+
Function.Metric.Rational.Bundles
34+
```
35+
2436
Other minor additions
2537
---------------------

src/Function/Metric.agda

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Metrics with arbitrary domains and codomains
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
module Function.Metric where
10+
11+
open import Function.Metric.Core public
12+
open import Function.Metric.Definitions public
13+
open import Function.Metric.Structures public
14+
open import Function.Metric.Bundles public

src/Function/Metric/Rational.agda

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Metrics with ℚ as the codomain of the metric function
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
module Function.Metric.Rational where
10+
11+
open import Function.Metric.Rational.Core public
12+
open import Function.Metric.Rational.Definitions public
13+
open import Function.Metric.Rational.Structures public
14+
open import Function.Metric.Rational.Bundles public
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Bundles for metrics over ℚ
5+
------------------------------------------------------------------------
6+
7+
-- Unfortunately, unlike definitions and structures, the bundles over
8+
-- general metric spaces cannot be reused as it is impossible to
9+
-- constrain the image set to ℚ.
10+
11+
{-# OPTIONS --without-K --safe #-}
12+
13+
open import Data.Rational.Base hiding (_⊔_)
14+
open import Function using (const)
15+
open import Level using (Level; suc; _⊔_)
16+
open import Relation.Binary.Core
17+
open import Relation.Binary.PropositionalEquality
18+
using (_≡_; isEquivalence)
19+
20+
open import Function.Metric.Rational.Core
21+
open import Function.Metric.Rational.Structures
22+
open import Function.Metric.Bundles as Base
23+
using (GeneralMetric)
24+
25+
module Function.Metric.Rational.Bundles where
26+
27+
------------------------------------------------------------------------
28+
-- Proto-metric
29+
30+
record ProtoMetric a ℓ : Set (suc (a ⊔ ℓ)) where
31+
field
32+
Carrier : Set a
33+
_≈_ : Rel Carrier ℓ
34+
d : DistanceFunction Carrier
35+
isProtoMetric : IsProtoMetric _≈_ d
36+
37+
open IsProtoMetric isProtoMetric public
38+
39+
------------------------------------------------------------------------
40+
-- PreMetric
41+
42+
record PreMetric a ℓ : Set (suc (a ⊔ ℓ)) where
43+
field
44+
Carrier : Set a
45+
_≈_ : Rel Carrier ℓ
46+
d : DistanceFunction Carrier
47+
isPreMetric : IsPreMetric _≈_ d
48+
49+
open IsPreMetric isPreMetric public
50+
51+
protoMetric : ProtoMetric a ℓ
52+
protoMetric = record
53+
{ isProtoMetric = isProtoMetric
54+
}
55+
56+
------------------------------------------------------------------------
57+
-- QuasiSemiMetric
58+
59+
record QuasiSemiMetric a ℓ : Set (suc (a ⊔ ℓ)) where
60+
field
61+
Carrier : Set a
62+
_≈_ : Rel Carrier ℓ
63+
d : DistanceFunction Carrier
64+
isQuasiSemiMetric : IsQuasiSemiMetric _≈_ d
65+
66+
open IsQuasiSemiMetric isQuasiSemiMetric public
67+
68+
preMetric : PreMetric a ℓ
69+
preMetric = record
70+
{ isPreMetric = isPreMetric
71+
}
72+
73+
open PreMetric preMetric public
74+
using (protoMetric)
75+
76+
------------------------------------------------------------------------
77+
-- SemiMetric
78+
79+
record SemiMetric a ℓ : Set (suc (a ⊔ ℓ)) where
80+
field
81+
Carrier : Set a
82+
_≈_ : Rel Carrier ℓ
83+
d : DistanceFunction Carrier
84+
isSemiMetric : IsSemiMetric _≈_ d
85+
86+
open IsSemiMetric isSemiMetric public
87+
88+
quasiSemiMetric : QuasiSemiMetric a ℓ
89+
quasiSemiMetric = record
90+
{ isQuasiSemiMetric = isQuasiSemiMetric
91+
}
92+
93+
open QuasiSemiMetric quasiSemiMetric public
94+
using (protoMetric; preMetric)
95+
96+
------------------------------------------------------------------------
97+
-- Metrics
98+
99+
record Metric a ℓ : Set (suc (a ⊔ ℓ)) where
100+
field
101+
Carrier : Set a
102+
_≈_ : Rel Carrier ℓ
103+
d : DistanceFunction Carrier
104+
isMetric : IsMetric _≈_ d
105+
106+
open IsMetric isMetric public
107+
108+
semiMetric : SemiMetric a ℓ
109+
semiMetric = record
110+
{ isSemiMetric = isSemiMetric
111+
}
112+
113+
open SemiMetric semiMetric public
114+
using (protoMetric; preMetric; quasiSemiMetric)
115+
116+
------------------------------------------------------------------------
117+
-- UltraMetrics
118+
119+
record UltraMetric a ℓ : Set (suc (a ⊔ ℓ)) where
120+
field
121+
Carrier : Set a
122+
_≈_ : Rel Carrier ℓ
123+
d : DistanceFunction Carrier
124+
isUltraMetric : IsUltraMetric _≈_ d
125+
126+
open IsUltraMetric isUltraMetric public
127+
128+
semiMetric : SemiMetric a ℓ
129+
semiMetric = record
130+
{ isSemiMetric = isSemiMetric
131+
}
132+
133+
open SemiMetric semiMetric public
134+
using (protoMetric; preMetric; quasiSemiMetric)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Core definitions for metrics over ℕ
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
open import Data.Rational.Base using (ℚ)
10+
import Function.Metric.Core as Base
11+
12+
module Function.Metric.Rational.Core where
13+
14+
------------------------------------------------------------------------
15+
-- Definition
16+
17+
DistanceFunction : {a} Set a Set a
18+
DistanceFunction A = Base.DistanceFunction A ℚ
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Core definitions for metrics over ℚ
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
open import Algebra.Core using (Op₂)
10+
open import Data.Rational.Base
11+
open import Level using (Level)
12+
open import Relation.Binary.Core
13+
open import Relation.Binary.PropositionalEquality.Core using (_≡_)
14+
15+
open import Function.Metric.Rational.Core
16+
import Function.Metric.Definitions as Base
17+
18+
module Function.Metric.Rational.Definitions where
19+
20+
private
21+
variable
22+
a ℓ : Level
23+
A : Set a
24+
25+
------------------------------------------------------------------------
26+
-- Properties
27+
28+
-- Basic
29+
30+
Congruent : Rel A ℓ DistanceFunction A Set _
31+
Congruent _≈ₐ_ d = Base.Congruent _≈ₐ_ _≡_ d
32+
33+
Indiscernable : Rel A ℓ DistanceFunction A Set _
34+
Indiscernable _≈ₐ_ d = Base.Indiscernable _≈ₐ_ _≡_ d 0ℚ
35+
36+
Definite : Rel A ℓ DistanceFunction A Set _
37+
Definite _≈ₐ_ d = Base.Definite _≈ₐ_ _≡_ d 0ℚ
38+
39+
Symmetric : DistanceFunction A Set _
40+
Symmetric = Base.Symmetric _≡_
41+
42+
Bounded : DistanceFunction A Set _
43+
Bounded = Base.Bounded _≤_
44+
45+
TranslationInvariant : Op₂ A DistanceFunction A Set _
46+
TranslationInvariant = Base.TranslationInvariant _≡_
47+
48+
-- Inequalities
49+
50+
TriangleInequality : DistanceFunction A Set _
51+
TriangleInequality = Base.TriangleInequality _≤_ _+_
52+
53+
MaxTriangleInequality : DistanceFunction A Set _
54+
MaxTriangleInequality = Base.TriangleInequality _≤_ _⊔_
55+
56+
-- Contractions
57+
58+
Contracting : (A A) DistanceFunction A Set _
59+
Contracting = Base.Contracting _≤_
60+
61+
ContractingOnOrbits : (A A) DistanceFunction A Set _
62+
ContractingOnOrbits = Base.ContractingOnOrbits _≤_
63+
64+
StrictlyContracting : Rel A ℓ (A A) DistanceFunction A Set _
65+
StrictlyContracting _≈_ = Base.StrictlyContracting _≈_ _<_
66+
67+
StrictlyContractingOnOrbits : Rel A ℓ (A A) DistanceFunction A Set _
68+
StrictlyContractingOnOrbits _≈_ = Base.StrictlyContractingOnOrbits _≈_ _<_
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Core definitions for metrics over ℚ
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
open import Data.Rational.Base
10+
open import Function using (const)
11+
open import Level using (Level; suc)
12+
open import Relation.Binary hiding (Symmetric)
13+
open import Relation.Binary.PropositionalEquality using (_≡_)
14+
15+
open import Function.Metric.Rational.Core
16+
open import Function.Metric.Rational.Definitions
17+
import Function.Metric.Structures as Base
18+
19+
module Function.Metric.Rational.Structures where
20+
21+
private
22+
variable
23+
a ℓ : Level
24+
A : Set a
25+
26+
------------------------------------------------------------------------
27+
-- Proto-metrics
28+
29+
IsProtoMetric : Rel A ℓ DistanceFunction A Set _
30+
IsProtoMetric _≈_ = Base.IsProtoMetric _≈_ _≡_ _≤_ 0ℚ
31+
32+
open Base using (module IsProtoMetric) public
33+
34+
------------------------------------------------------------------------
35+
-- Pre-metrics
36+
37+
IsPreMetric : Rel A ℓ DistanceFunction A Set _
38+
IsPreMetric _≈_ = Base.IsPreMetric _≈_ _≡_ _≤_ 0ℚ
39+
40+
open Base using (module IsPreMetric) public
41+
42+
------------------------------------------------------------------------
43+
-- Quasi-semi-metrics
44+
45+
IsQuasiSemiMetric : Rel A ℓ DistanceFunction A Set _
46+
IsQuasiSemiMetric _≈_ = Base.IsQuasiSemiMetric _≈_ _≡_ _≤_ 0ℚ
47+
48+
open Base using (module IsQuasiSemiMetric) public
49+
50+
------------------------------------------------------------------------
51+
-- Semi-metrics
52+
53+
IsSemiMetric : Rel A ℓ DistanceFunction A Set _
54+
IsSemiMetric _≈_ = Base.IsSemiMetric _≈_ _≡_ _≤_ 0ℚ
55+
56+
open Base using (module IsSemiMetric) public
57+
58+
------------------------------------------------------------------------
59+
-- Metrics
60+
61+
IsMetric : Rel A ℓ DistanceFunction A Set _
62+
IsMetric _≈_ = Base.IsGeneralMetric _≈_ _≡_ _≤_ 0ℚ _+_
63+
64+
module IsMetric {_≈_ : Rel A ℓ} {d : DistanceFunction A}
65+
(M : IsMetric _≈_ d) where
66+
open Base.IsGeneralMetric M public
67+
68+
------------------------------------------------------------------------
69+
-- Ultra-metrics
70+
71+
IsUltraMetric : Rel A ℓ DistanceFunction A Set _
72+
IsUltraMetric _≈_ = Base.IsGeneralMetric _≈_ _≡_ _≤_ 0ℚ _⊔_
73+
74+
module IsUltraMetric {_≈_ : Rel A ℓ} {d : DistanceFunction A}
75+
(UM : IsUltraMetric _≈_ d) where
76+
open Base.IsGeneralMetric UM public

0 commit comments

Comments
 (0)