From 0f28249734cdc7bf0fe027387e7f29cd7c50fe00 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 10 Dec 2025 16:40:51 -0800 Subject: [PATCH 1/2] Dense subsets of the real numbers --- .../dense-subsets-metric-spaces.lagda.md | 18 + src/real-numbers.lagda.md | 2 + .../dense-subsets-real-numbers.lagda.md | 416 ++++++++++++++++++ .../metric-space-of-real-numbers.lagda.md | 12 + ...onal-approximates-of-real-numbers.lagda.md | 93 ++++ .../rational-real-numbers.lagda.md | 45 +- 6 files changed, 580 insertions(+), 6 deletions(-) create mode 100644 src/real-numbers/dense-subsets-real-numbers.lagda.md create mode 100644 src/real-numbers/rational-approximates-of-real-numbers.lagda.md diff --git a/src/metric-spaces/dense-subsets-metric-spaces.lagda.md b/src/metric-spaces/dense-subsets-metric-spaces.lagda.md index 307f1829908..02ba31f63ff 100644 --- a/src/metric-spaces/dense-subsets-metric-spaces.lagda.md +++ b/src/metric-spaces/dense-subsets-metric-spaces.lagda.md @@ -46,6 +46,24 @@ module _ is-dense-subset-Metric-Space : UU (l1 ⊔ l2 ⊔ l3) is-dense-subset-Metric-Space = type-Prop is-dense-prop-subset-Metric-Space + +dense-subset-Metric-Space : + {l1 l2 : Level} (l3 : Level) (X : Metric-Space l1 l2) → UU (l1 ⊔ l2 ⊔ lsuc l3) +dense-subset-Metric-Space l3 X = + type-subtype (is-dense-prop-subset-Metric-Space {l3 = l3} X) + +module _ + {l1 l2 l3 : Level} + (X : Metric-Space l1 l2) + (S : dense-subset-Metric-Space l3 X) + where + + subset-dense-subset-Metric-Space : subset-Metric-Space l3 X + subset-dense-subset-Metric-Space = pr1 S + + is-dense-subset-dense-subset-Metric-Space : + is-dense-subset-Metric-Space X subset-dense-subset-Metric-Space + is-dense-subset-dense-subset-Metric-Space = pr2 S ``` ## Properties diff --git a/src/real-numbers.lagda.md b/src/real-numbers.lagda.md index 8210a60b2e8..bf267d70310 100644 --- a/src/real-numbers.lagda.md +++ b/src/real-numbers.lagda.md @@ -24,6 +24,7 @@ open import real-numbers.cauchy-completeness-dedekind-real-numbers public open import real-numbers.cauchy-sequences-real-numbers public open import real-numbers.closed-intervals-real-numbers public open import real-numbers.dedekind-real-numbers public +open import real-numbers.dense-subsets-real-numbers public open import real-numbers.difference-real-numbers public open import real-numbers.distance-real-numbers public open import real-numbers.enclosing-closed-rational-intervals-real-numbers public @@ -87,6 +88,7 @@ open import real-numbers.positive-real-numbers public open import real-numbers.powers-real-numbers public open import real-numbers.proper-closed-intervals-real-numbers public open import real-numbers.raising-universe-levels-real-numbers public +open import real-numbers.rational-approximates-of-real-numbers public open import real-numbers.rational-lower-dedekind-real-numbers public open import real-numbers.rational-real-numbers public open import real-numbers.rational-upper-dedekind-real-numbers public diff --git a/src/real-numbers/dense-subsets-real-numbers.lagda.md b/src/real-numbers/dense-subsets-real-numbers.lagda.md new file mode 100644 index 00000000000..e79e7552ca6 --- /dev/null +++ b/src/real-numbers/dense-subsets-real-numbers.lagda.md @@ -0,0 +1,416 @@ +# Dense subsets of the real numbers + +```agda +module real-numbers.dense-subsets-real-numbers where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-positive-rational-numbers +open import elementary-number-theory.minimum-positive-rational-numbers +open import elementary-number-theory.positive-rational-numbers +open import elementary-number-theory.strict-inequality-rational-numbers + +open import foundation.action-on-identifications-functions +open import foundation.binary-transport +open import foundation.cartesian-product-types +open import foundation.conjunction +open import foundation.dependent-pair-types +open import foundation.existential-quantification +open import foundation.identity-types +open import foundation.intersections-subtypes +open import foundation.propositional-truncations +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import logic.functoriality-existential-quantification + +open import metric-spaces.dense-subsets-metric-spaces + +open import order-theory.large-posets + +open import real-numbers.addition-positive-real-numbers +open import real-numbers.addition-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.metric-space-of-real-numbers +open import real-numbers.negation-real-numbers +open import real-numbers.positive-real-numbers +open import real-numbers.raising-universe-levels-real-numbers +open import real-numbers.rational-approximates-of-real-numbers +open import real-numbers.rational-real-numbers +open import real-numbers.similarity-real-numbers +open import real-numbers.strict-inequalities-addition-and-subtraction-real-numbers +open import real-numbers.strict-inequality-real-numbers +open import real-numbers.subsets-real-numbers +``` + +
+ +## Idea + +A {{#concept "dense subset" Disambiguation="of ℝ" Agda=dense-subset-ℝ}} of the +[real numbers](real-numbers.dedekind-real-numbers.md) `ℝ` is a +[dense subset](metric-spaces.dense-subsets-metric-spaces.md) of the +[metric space of real numbers](real-numbers.metric-space-of-real-numbers.md), +which means that it is a [subset](real-numbers.subsets-real-numbers.md) `S ⊆ ℝ` +such that for any `x : ℝ` and any +[positive rational](elementary-number-theory.positive-rational-numbers.md) `ε`, +there is a `y` in an `ε`-neighborhood of `X` that is also in `S`. + +## Definition + +```agda +is-dense-subset-ℝ : {l1 l2 : Level} → subset-ℝ l1 l2 → UU (l1 ⊔ lsuc l2) +is-dense-subset-ℝ = is-dense-subset-Metric-Space (metric-space-ℝ _) + +dense-subset-ℝ : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) +dense-subset-ℝ l1 l2 = dense-subset-Metric-Space l1 (metric-space-ℝ l2) + +subset-dense-subset-ℝ : {l1 l2 : Level} → dense-subset-ℝ l1 l2 → subset-ℝ l1 l2 +subset-dense-subset-ℝ = pr1 + +is-dense-subset-dense-subset-ℝ : + {l1 l2 : Level} (S : dense-subset-ℝ l1 l2) (x : ℝ l2) (ε : ℚ⁺) → + intersect-subtype (neighborhood-prop-ℝ l2 ε x) (subset-dense-subset-ℝ S) +is-dense-subset-dense-subset-ℝ = pr2 + +type-dense-subset-ℝ : {l1 l2 : Level} → dense-subset-ℝ l1 l2 → UU (l1 ⊔ lsuc l2) +type-dense-subset-ℝ S = type-subtype (subset-dense-subset-ℝ S) + +inclusion-dense-subset-ℝ : + {l1 l2 : Level} (S : dense-subset-ℝ l1 l2) → + type-dense-subset-ℝ S → ℝ l2 +inclusion-dense-subset-ℝ S = inclusion-subtype (subset-dense-subset-ℝ S) + +is-in-dense-subset-ℝ : {l1 l2 : Level} → dense-subset-ℝ l1 l2 → ℝ l2 → UU l1 +is-in-dense-subset-ℝ S = + is-in-subtype (subset-dense-subset-ℝ S) +``` + +## Properties + +### The rational reals are dense in `ℝ` + +```agda +abstract + is-dense-rational-real-ℝ : + (l : Level) → is-dense-subset-ℝ (subtype-rational-real {l}) + is-dense-rational-real-ℝ l x ε = + map-exists + ( _) + ( raise-real-ℚ l) + ( λ q Nεxq → ( Nεxq , q , is-rational-raise-real-ℚ l q)) + ( exists-rational-approximate-ℝ x ε) + +dense-subset-rational-real-ℝ : + (l : Level) → dense-subset-ℝ l l +dense-subset-rational-real-ℝ l = + ( subtype-rational-real , is-dense-rational-real-ℝ l) +``` + +### Given a dense subset `S ⊆ R`, two reals `x < y`, and positive rationals `δx`, `δy`, there are `x' < y'` with `x' ∈ S`, `y' ∈ S`, `x'` in a `δx`-neighborhood of `x` and correspondingly for `y` + +```agda +module _ + {l1 l2 : Level} + (S : dense-subset-ℝ l1 l2) + where + + abstract + exist-close-le-elements-dense-subset-ℝ : + {x y : ℝ l2} (δx δy : ℚ⁺) → le-ℝ x y → + exists + ( type-dense-subset-ℝ S × type-dense-subset-ℝ S) + ( λ ((x' , x'∈S) , (y' , y'∈S)) → + ( le-prop-ℝ x' y') ∧ + ( neighborhood-prop-ℝ l2 δx x x') ∧ + ( neighborhood-prop-ℝ l2 δy y y')) + exist-close-le-elements-dense-subset-ℝ {x} {y} δx δy xImports + +```agda +open import elementary-number-theory.addition-positive-rational-numbers +open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.positive-rational-numbers +open import elementary-number-theory.rational-numbers +open import elementary-number-theory.strict-inequality-rational-numbers + +open import foundation.dependent-pair-types +open import foundation.existential-quantification +open import foundation.propositional-truncations +open import foundation.raising-universe-levels +open import foundation.universe-levels + +open import metric-spaces.dense-subsets-metric-spaces + +open import real-numbers.arithmetically-located-dedekind-cuts +open import real-numbers.dedekind-real-numbers +open import real-numbers.metric-space-of-real-numbers +open import real-numbers.rational-real-numbers +``` + + + +## Idea + +A +{{#concept "rational approximate" Disambiguation="of a real number" Agda=rational-approximate-ℝ}} +of a [real number](real-numbers.dedekind-real-numbers.md) `x` to some +[positive rational](elementary-number-theory.positive-rational-numbers.md) `ε` +is a [rational number](elementary-number-theory.rational-numbers.md) whose +[canonical embedding](real-numbers.rational-real-numbers.md) in the real numbers +is within an `ε`-neighborhood of `x` in the +[metric space of real numbers](real-numbers.metric-space-of-real-numbers.md). + +## Definition + +```agda +rational-approximate-ℝ : {l : Level} → ℝ l → ℚ⁺ → UU l +rational-approximate-ℝ {l} x ε = + Σ ℚ (λ q → neighborhood-ℝ l ε x (raise-real-ℚ l q)) +``` + +## Properties + +### Any real number can be approximated to any positive rational `ε` + +```agda +abstract opaque + unfolding neighborhood-ℝ real-ℚ + + exists-rational-approximate-ℝ : + {l : Level} (x : ℝ l) (ε : ℚ⁺) → + exists ℚ (λ q → neighborhood-prop-ℝ l ε x (raise-real-ℚ l q)) + exists-rational-approximate-ℝ {l} x ε⁺@(ε , _) = + let + open + do-syntax-trunc-Prop + ( ∃ ℚ (λ q → neighborhood-prop-ℝ l ε⁺ x (raise-real-ℚ l q))) + in do + ((p , q) , q Date: Thu, 11 Dec 2025 09:28:24 -0800 Subject: [PATCH 2/2] Update src/real-numbers/dense-subsets-real-numbers.lagda.md Co-authored-by: Fredrik Bakke --- src/real-numbers/dense-subsets-real-numbers.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/real-numbers/dense-subsets-real-numbers.lagda.md b/src/real-numbers/dense-subsets-real-numbers.lagda.md index e79e7552ca6..8245529a68f 100644 --- a/src/real-numbers/dense-subsets-real-numbers.lagda.md +++ b/src/real-numbers/dense-subsets-real-numbers.lagda.md @@ -104,7 +104,7 @@ abstract map-exists ( _) ( raise-real-ℚ l) - ( λ q Nεxq → ( Nεxq , q , is-rational-raise-real-ℚ l q)) + ( λ q Nεxq → (Nεxq , q , is-rational-raise-real-ℚ l q)) ( exists-rational-approximate-ℝ x ε) dense-subset-rational-real-ℝ :