diff --git a/src/analysis.lagda.md b/src/analysis.lagda.md index 99788b360c..32ce20fbad 100644 --- a/src/analysis.lagda.md +++ b/src/analysis.lagda.md @@ -3,7 +3,18 @@ ```agda module analysis where +open import analysis.absolute-convergence-series-real-banach-spaces public +open import analysis.absolute-convergence-series-real-numbers public +open import analysis.complete-metric-abelian-groups public +open import analysis.complete-metric-abelian-groups-real-banach-spaces public +open import analysis.convergent-series-complete-metric-abelian-groups public open import analysis.convergent-series-metric-abelian-groups public +open import analysis.convergent-series-real-banach-spaces public +open import analysis.convergent-series-real-numbers public open import analysis.metric-abelian-groups public +open import analysis.metric-abelian-groups-normed-real-vector-spaces public +open import analysis.series-complete-metric-abelian-groups public open import analysis.series-metric-abelian-groups public +open import analysis.series-real-banach-spaces public +open import analysis.series-real-numbers public ``` diff --git a/src/analysis/absolute-convergence-series-real-banach-spaces.lagda.md b/src/analysis/absolute-convergence-series-real-banach-spaces.lagda.md new file mode 100644 index 0000000000..d36b05318e --- /dev/null +++ b/src/analysis/absolute-convergence-series-real-banach-spaces.lagda.md @@ -0,0 +1,193 @@ +# Absolute convergence of series in real Banach spaces + +```agda +module analysis.absolute-convergence-series-real-banach-spaces where +``` + +
Imports + +```agda +open import analysis.convergent-series-real-banach-spaces +open import analysis.convergent-series-real-numbers +open import analysis.series-real-banach-spaces +open import analysis.series-real-numbers + +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.natural-numbers +open import elementary-number-theory.positive-rational-numbers + +open import foundation.action-on-identifications-functions +open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.function-types +open import foundation.identity-types +open import foundation.propositional-truncations +open import foundation.propositions +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import linear-algebra.real-banach-spaces +open import linear-algebra.sums-of-finite-sequences-of-elements-real-banach-spaces + +open import order-theory.large-posets + +open import real-numbers.cauchy-sequences-real-numbers +open import real-numbers.difference-real-numbers +open import real-numbers.distance-real-numbers +open import real-numbers.inequality-real-numbers +open import real-numbers.rational-real-numbers +``` + +
+ +## Idea + +A [series](analysis.series-real-banach-spaces.md) `Σ aₙ` in a +[real Banach space](linear-algebra.real-banach-spaces.md) is said to +{{#concept "absolutely converge" WDID=Q332465 WD="absolute convergence" Agda=is-absolutely-convergent-prop-series-ℝ-Banach-Space Disambiguation="series in a real Banach space"}} +if the series of norms `Σ ∥aₙ∥` is a +[convergent series](analysis.convergent-series-real-numbers.md) of +[real numbers](real-numbers.dedekind-real-numbers.md). + +## Definition + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + (σ : series-ℝ-Banach-Space V) + where + + is-absolutely-convergent-prop-series-ℝ-Banach-Space : Prop (lsuc l1) + is-absolutely-convergent-prop-series-ℝ-Banach-Space = + is-convergent-prop-series-ℝ (map-norm-series-ℝ-Banach-Space V σ) + + is-absolutely-convergent-series-ℝ-Banach-Space : UU (lsuc l1) + is-absolutely-convergent-series-ℝ-Banach-Space = + type-Prop is-absolutely-convergent-prop-series-ℝ-Banach-Space +``` + +## Properties + +### If a series is absolutely convergent, it is convergent + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + (σ : series-ℝ-Banach-Space V) + where + + is-convergent-is-absolutely-convergent-series-ℝ-Banach-Space : + is-absolutely-convergent-series-ℝ-Banach-Space V σ → + is-convergent-series-ℝ-Banach-Space V σ + is-convergent-is-absolutely-convergent-series-ℝ-Banach-Space (lim-Σnorm , H) = + let + open inequality-reasoning-Large-Poset ℝ-Large-Poset + open + do-syntax-trunc-Prop + ( is-convergent-prop-series-ℝ-Banach-Space V σ) + in do + cauchy-mod ← + exists-cauchy-modulus-has-limit-sequence-ℝ + ( partial-sum-series-ℝ (map-norm-series-ℝ-Banach-Space V σ)) + ( lim-Σnorm , H) + let + μ = pr1 ∘ cauchy-mod + is-mod-μ = pr2 ∘ cauchy-mod + lemma : + (ε : ℚ⁺) (n k : ℕ) → leq-ℕ (μ ε) n → + leq-ℝ + ( dist-ℝ-Banach-Space V + ( partial-sum-series-ℝ-Banach-Space V σ (n +ℕ k)) + ( partial-sum-series-ℝ-Banach-Space V σ n)) + ( real-ℚ⁺ ε) + lemma ε n k με≤n = + chain-of-inequalities + dist-ℝ-Banach-Space V + ( partial-sum-series-ℝ-Banach-Space V σ (n +ℕ k)) + ( partial-sum-series-ℝ-Banach-Space V σ n) + ≤ map-norm-ℝ-Banach-Space V + ( partial-sum-series-ℝ-Banach-Space V + ( drop-series-ℝ-Banach-Space V n σ) + ( k)) + by + leq-eq-ℝ + ( ap + ( map-norm-ℝ-Banach-Space V) + ( inv (partial-sum-drop-series-ℝ-Banach-Space V n σ k))) + ≤ partial-sum-series-ℝ + ( map-norm-series-ℝ-Banach-Space V + ( drop-series-ℝ-Banach-Space V n σ)) + ( k) + by + triangle-inequality-norm-sum-fin-sequence-type-ℝ-Banach-Space + ( V) + ( k) + ( _) + ≤ ( partial-sum-series-ℝ + ( map-norm-series-ℝ-Banach-Space V σ) + ( n +ℕ k)) -ℝ + ( partial-sum-series-ℝ (map-norm-series-ℝ-Banach-Space V σ) n) + by + leq-eq-ℝ + ( partial-sum-drop-series-ℝ + ( n) + ( map-norm-series-ℝ-Banach-Space V σ) + ( k)) + ≤ dist-ℝ + ( partial-sum-series-ℝ + ( map-norm-series-ℝ-Banach-Space V σ) + ( n +ℕ k)) + ( partial-sum-series-ℝ + ( map-norm-series-ℝ-Banach-Space V σ) + ( n)) + by leq-diff-dist-ℝ _ _ + ≤ real-ℚ⁺ ε + by + leq-dist-neighborhood-ℝ + ( ε) + ( _) + ( _) + ( is-mod-μ + ( ε) + ( n +ℕ k) + ( n) + ( transitive-leq-ℕ (μ ε) n (n +ℕ k) (leq-add-ℕ n k) με≤n) + ( με≤n)) + lemma' : + (ε : ℚ⁺) (n k : ℕ) → leq-ℕ (μ ε) n → leq-ℕ n k → + leq-ℝ + ( dist-ℝ-Banach-Space V + ( partial-sum-series-ℝ-Banach-Space V σ k) + ( partial-sum-series-ℝ-Banach-Space V σ n)) + ( real-ℚ⁺ ε) + lemma' ε n k με≤n n≤k = + let + (l , l+n=k) = subtraction-leq-ℕ n k n≤k + in + tr + ( λ p → + leq-ℝ + ( dist-ℝ-Banach-Space V + ( partial-sum-series-ℝ-Banach-Space V σ p) + ( _)) + ( _)) + ( commutative-add-ℕ n l ∙ l+n=k) + ( lemma ε n l με≤n) + is-convergent-is-cauchy-sequence-partial-sum-series-ℝ-Banach-Space + ( V) + ( σ) + ( λ ε → + ( μ ε , + λ a b με≤a με≤b → + rec-coproduct + ( λ a≤b → + tr + ( λ d → leq-ℝ d (real-ℚ⁺ ε)) + ( commutative-dist-ℝ-Banach-Space V _ _) + ( lemma' ε a b με≤a a≤b)) + ( lemma' ε b a με≤b) + ( linear-leq-ℕ a b))) +``` diff --git a/src/analysis/absolute-convergence-series-real-numbers.lagda.md b/src/analysis/absolute-convergence-series-real-numbers.lagda.md new file mode 100644 index 0000000000..19a6940362 --- /dev/null +++ b/src/analysis/absolute-convergence-series-real-numbers.lagda.md @@ -0,0 +1,73 @@ +# Absolute convergence of series in the real numbers + +```agda +module analysis.absolute-convergence-series-real-numbers where +``` + +
Imports + +```agda +open import analysis.absolute-convergence-series-real-banach-spaces +open import analysis.convergent-series-real-banach-spaces +open import analysis.convergent-series-real-numbers +open import analysis.series-real-banach-spaces +open import analysis.series-real-numbers + +open import foundation.propositions +open import foundation.universe-levels + +open import linear-algebra.real-banach-spaces +``` + +
+ +## Idea + +A [series](analysis.series-real-numbers.md) `Σ aₙ` of +[real numbers](real-numbers.dedekind-real-numbers.md) + +is said to +{{#concept "absolutely converge" WDID=Q332465 WD="absolute convergence" Agda=is-absolutely-convergent-prop-series-ℝ Disambiguation="series of real numbers"}} +if the series of absolute values `Σ |aₙ|` +[converges](analysis.convergent-series-real-numbers.md). + +## Definition + +```agda +module _ + {l : Level} + (σ : series-ℝ l) + where + + is-absolutely-convergent-prop-series-ℝ : Prop (lsuc l) + is-absolutely-convergent-prop-series-ℝ = + is-convergent-prop-series-ℝ (map-abs-series-ℝ σ) + + is-absolutely-convergent-series-ℝ : UU (lsuc l) + is-absolutely-convergent-series-ℝ = + type-Prop is-absolutely-convergent-prop-series-ℝ +``` + +## Properties + +### If a series of real numbers is absolutely convergent, it is convergent + +```agda +module _ + {l : Level} + (σ : series-ℝ l) + where + + is-convergent-is-absolutely-convergent-series-ℝ : + is-absolutely-convergent-series-ℝ σ → + is-convergent-series-ℝ σ + is-convergent-is-absolutely-convergent-series-ℝ H = + is-convergent-real-is-convergent-real-banach-space-ℝ + ( term-series-ℝ σ) + ( is-convergent-is-absolutely-convergent-series-ℝ-Banach-Space + ( real-banach-space-ℝ l) + ( series-terms-ℝ-Banach-Space + ( real-banach-space-ℝ l) + ( term-series-ℝ σ)) + ( H)) +``` diff --git a/src/analysis/complete-metric-abelian-groups-real-banach-spaces.lagda.md b/src/analysis/complete-metric-abelian-groups-real-banach-spaces.lagda.md new file mode 100644 index 0000000000..40aa017885 --- /dev/null +++ b/src/analysis/complete-metric-abelian-groups-real-banach-spaces.lagda.md @@ -0,0 +1,63 @@ +# Complete metric abelian groups of real Banach spaces + +```agda +module analysis.complete-metric-abelian-groups-real-banach-spaces where +``` + +
Imports + +```agda +open import analysis.complete-metric-abelian-groups +open import analysis.metric-abelian-groups +open import analysis.metric-abelian-groups-normed-real-vector-spaces + +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.subtypes +open import foundation.universe-levels + +open import linear-algebra.real-banach-spaces + +open import real-numbers.metric-additive-group-of-real-numbers +``` + +
+ +## Idea + +Every [real Banach space](linear-algebra.real-banach-spaces.md) forms a +[complete metric abelian group](analysis.complete-metric-abelian-groups.md) +under addition. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + where + + metric-ab-add-ℝ-Banach-Space : Metric-Ab l2 l1 + metric-ab-add-ℝ-Banach-Space = + metric-ab-Normed-ℝ-Vector-Space (normed-vector-space-ℝ-Banach-Space V) + + complete-metric-ab-add-ℝ-Banach-Space : Complete-Metric-Ab l2 l1 + complete-metric-ab-add-ℝ-Banach-Space = + ( metric-ab-add-ℝ-Banach-Space , is-complete-metric-space-ℝ-Banach-Space V) +``` + +## Properties + +### The complete metric abelian group from the reals as a real Banach space equals the standard complete metric abelian group of the reals under addition + +```agda +abstract + eq-complete-metric-ab-ℝ : + (l : Level) → + complete-metric-ab-add-ℝ-Banach-Space (real-banach-space-ℝ l) = + complete-metric-ab-add-ℝ l + eq-complete-metric-ab-ℝ l = + eq-type-subtype + ( is-complete-prop-Metric-Ab) + ( eq-metric-ab-normed-real-vector-space-metric-ab-ℝ l) +``` diff --git a/src/analysis/complete-metric-abelian-groups.lagda.md b/src/analysis/complete-metric-abelian-groups.lagda.md new file mode 100644 index 0000000000..e629810ef1 --- /dev/null +++ b/src/analysis/complete-metric-abelian-groups.lagda.md @@ -0,0 +1,65 @@ +# Complete metric abelian groups + +```agda +module analysis.complete-metric-abelian-groups where +``` + +
Imports + +```agda +open import analysis.metric-abelian-groups + +open import foundation.dependent-pair-types +open import foundation.propositions +open import foundation.subtypes +open import foundation.universe-levels + +open import metric-spaces.complete-metric-spaces +open import metric-spaces.metric-spaces +``` + +
+ +## Idea + +A {{#concept "complete metric abelian group" Agda=Complete-Metric-Ab}} is a +[metric abelian group](analysis.metric-abelian-groups.md) whose associated +[metric space](metric-spaces.metric-spaces.md) is +[complete](metric-spaces.complete-metric-spaces.md). + +## Definition + +```agda +is-complete-prop-Metric-Ab : {l1 l2 : Level} → Metric-Ab l1 l2 → Prop (l1 ⊔ l2) +is-complete-prop-Metric-Ab G = + is-complete-prop-Metric-Space (metric-space-Metric-Ab G) + +is-complete-Metric-Ab : {l1 l2 : Level} → Metric-Ab l1 l2 → UU (l1 ⊔ l2) +is-complete-Metric-Ab G = is-complete-Metric-Space (metric-space-Metric-Ab G) + +Complete-Metric-Ab : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) +Complete-Metric-Ab l1 l2 = type-subtype (is-complete-prop-Metric-Ab {l1} {l2}) +``` + +## Properties + +```agda +module _ + {l1 l2 : Level} + (G : Complete-Metric-Ab l1 l2) + where + + metric-ab-Complete-Metric-Ab : Metric-Ab l1 l2 + metric-ab-Complete-Metric-Ab = pr1 G + + metric-space-Complete-Metric-Ab : Metric-Space l1 l2 + metric-space-Complete-Metric-Ab = + metric-space-Metric-Ab metric-ab-Complete-Metric-Ab + + complete-metric-space-Complete-Metric-Ab : Complete-Metric-Space l1 l2 + complete-metric-space-Complete-Metric-Ab = + ( metric-space-Complete-Metric-Ab , pr2 G) + + type-Complete-Metric-Ab : UU l1 + type-Complete-Metric-Ab = type-Metric-Ab metric-ab-Complete-Metric-Ab +``` diff --git a/src/analysis/convergent-series-complete-metric-abelian-groups.lagda.md b/src/analysis/convergent-series-complete-metric-abelian-groups.lagda.md new file mode 100644 index 0000000000..f4a8f90448 --- /dev/null +++ b/src/analysis/convergent-series-complete-metric-abelian-groups.lagda.md @@ -0,0 +1,85 @@ +# Convergent series in complete metric abelian groups + +```agda +module analysis.convergent-series-complete-metric-abelian-groups where +``` + +
Imports + +```agda +open import analysis.complete-metric-abelian-groups +open import analysis.convergent-series-metric-abelian-groups +open import analysis.series-complete-metric-abelian-groups + +open import foundation.dependent-pair-types +open import foundation.propositions +open import foundation.subtypes +open import foundation.universe-levels + +open import metric-spaces.cauchy-sequences-complete-metric-spaces +open import metric-spaces.cauchy-sequences-metric-spaces +``` + +
+ +## Idea + +A [series](analysis.series-metric-abelian-groups.md) +[converges](analysis.convergent-series-metric-abelian-groups.md) in a +[complete metric abelian group](analysis.complete-metric-abelian-groups.md) if +its partial sums form a +[Cauchy sequence](metric-spaces.cauchy-sequences-metric-spaces.md). + +A slightly modified converse is also true: if a series converges, there +[exists](foundation.existential-quantification.md) a modulus making it a Cauchy +sequence. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (G : Complete-Metric-Ab l1 l2) + (σ : series-Complete-Metric-Ab G) + where + + is-sum-prop-series-Complete-Metric-Ab : type-Complete-Metric-Ab G → Prop l2 + is-sum-prop-series-Complete-Metric-Ab = is-sum-prop-series-Metric-Ab σ + + is-sum-series-Complete-Metric-Ab : type-Complete-Metric-Ab G → UU l2 + is-sum-series-Complete-Metric-Ab = is-sum-series-Metric-Ab σ + + is-convergent-prop-series-Complete-Metric-Ab : Prop (l1 ⊔ l2) + is-convergent-prop-series-Complete-Metric-Ab = + is-convergent-prop-series-Metric-Ab σ + + is-convergent-series-Complete-Metric-Ab : UU (l1 ⊔ l2) + is-convergent-series-Complete-Metric-Ab = is-convergent-series-Metric-Ab σ + +convergent-series-Complete-Metric-Ab : + {l1 l2 : Level} (G : Complete-Metric-Ab l1 l2) → UU (l1 ⊔ l2) +convergent-series-Complete-Metric-Ab G = + type-subtype (is-convergent-prop-series-Complete-Metric-Ab G) +``` + +## Properties + +### If the partial sums of a series form a Cauchy sequence, the series converges + +```agda +module _ + {l1 l2 : Level} + (G : Complete-Metric-Ab l1 l2) + (σ : series-Complete-Metric-Ab G) + where + + is-convergent-is-cauchy-sequence-partial-sum-series-Complete-Metric-Ab : + is-cauchy-sequence-Metric-Space + ( metric-space-Complete-Metric-Ab G) + ( partial-sum-series-Complete-Metric-Ab G σ) → + is-convergent-series-Complete-Metric-Ab G σ + is-convergent-is-cauchy-sequence-partial-sum-series-Complete-Metric-Ab H = + has-limit-cauchy-sequence-Complete-Metric-Space + ( complete-metric-space-Complete-Metric-Ab G) + ( partial-sum-series-Complete-Metric-Ab G σ , H) +``` diff --git a/src/analysis/convergent-series-metric-abelian-groups.lagda.md b/src/analysis/convergent-series-metric-abelian-groups.lagda.md index 6e5e9cfe3f..d78cf2b8bd 100644 --- a/src/analysis/convergent-series-metric-abelian-groups.lagda.md +++ b/src/analysis/convergent-series-metric-abelian-groups.lagda.md @@ -43,7 +43,7 @@ module _ is-sum-prop-series-Metric-Ab = is-limit-prop-sequence-Metric-Space ( metric-space-Metric-Ab G) - ( partial-sum-series-Metric-Ab G σ) + ( partial-sum-series-Metric-Ab σ) is-sum-series-Metric-Ab : type-Metric-Ab G → UU l2 is-sum-series-Metric-Ab s = type-Prop (is-sum-prop-series-Metric-Ab s) @@ -52,7 +52,7 @@ module _ is-convergent-prop-series-Metric-Ab = subtype-convergent-sequence-Metric-Space ( metric-space-Metric-Ab G) - ( partial-sum-series-Metric-Ab G σ) + ( partial-sum-series-Metric-Ab σ) is-convergent-series-Metric-Ab : UU (l1 ⊔ l2) is-convergent-series-Metric-Ab = @@ -76,7 +76,7 @@ module _ partial-sum-convergent-series-Metric-Ab : sequence (type-Metric-Ab G) partial-sum-convergent-series-Metric-Ab = - partial-sum-series-Metric-Ab G series-convergent-series-Metric-Ab + partial-sum-series-Metric-Ab series-convergent-series-Metric-Ab ``` ## The partial sums of a convergent series have a limit, the sum of the series diff --git a/src/analysis/convergent-series-real-banach-spaces.lagda.md b/src/analysis/convergent-series-real-banach-spaces.lagda.md new file mode 100644 index 0000000000..3b590b5416 --- /dev/null +++ b/src/analysis/convergent-series-real-banach-spaces.lagda.md @@ -0,0 +1,140 @@ +# Convergent series in real Banach spaces + +```agda +module analysis.convergent-series-real-banach-spaces where +``` + +
Imports + +```agda +open import analysis.complete-metric-abelian-groups-real-banach-spaces +open import analysis.convergent-series-complete-metric-abelian-groups +open import analysis.convergent-series-metric-abelian-groups +open import analysis.convergent-series-real-numbers +open import analysis.series-real-banach-spaces +open import analysis.series-real-numbers + +open import foundation.dependent-pair-types +open import foundation.function-types +open import foundation.logical-equivalences +open import foundation.propositions +open import foundation.subtypes +open import foundation.universe-levels + +open import linear-algebra.normed-real-vector-spaces +open import linear-algebra.real-banach-spaces + +open import lists.sequences + +open import metric-spaces.cauchy-sequences-metric-spaces +open import metric-spaces.limits-of-sequences-metric-spaces + +open import real-numbers.dedekind-real-numbers +open import real-numbers.distance-real-numbers +open import real-numbers.metric-space-of-real-numbers +open import real-numbers.sums-of-finite-sequences-of-real-numbers + +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +A [series](analysis.series-real-banach-spaces.md) +[converges](analysis.convergent-series-metric-abelian-groups.md) in a +[real Banach space](linear-algebra.real-banach-spaces.md) if its partial sums +form a [Cauchy sequence](metric-spaces.cauchy-sequences-metric-spaces.md). + +A slightly modified converse is also true: if a series converges, there +[exists](foundation.existential-quantification.md) a modulus making it a Cauchy +sequence. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + (σ : series-ℝ-Banach-Space V) + where + + is-sum-prop-series-ℝ-Banach-Space : type-ℝ-Banach-Space V → Prop l1 + is-sum-prop-series-ℝ-Banach-Space = is-sum-prop-series-Metric-Ab σ + + is-sum-series-ℝ-Banach-Space : type-ℝ-Banach-Space V → UU l1 + is-sum-series-ℝ-Banach-Space = is-sum-series-Metric-Ab σ + + is-convergent-prop-series-ℝ-Banach-Space : Prop (l1 ⊔ l2) + is-convergent-prop-series-ℝ-Banach-Space = + is-convergent-prop-series-Metric-Ab σ + + is-convergent-series-ℝ-Banach-Space : UU (l1 ⊔ l2) + is-convergent-series-ℝ-Banach-Space = is-convergent-series-Metric-Ab σ + +convergent-series-ℝ-Banach-Space : + {l1 l2 : Level} (V : ℝ-Banach-Space l1 l2) → UU (l1 ⊔ l2) +convergent-series-ℝ-Banach-Space V = + type-subtype (is-convergent-prop-series-ℝ-Banach-Space V) +``` + +## Properties + +### If the partial sums of a series form a Cauchy sequence, the series converges + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + (σ : series-ℝ-Banach-Space V) + where + + is-convergent-is-cauchy-sequence-partial-sum-series-ℝ-Banach-Space : + is-cauchy-sequence-Metric-Space + ( metric-space-ℝ-Banach-Space V) + ( partial-sum-series-ℝ-Banach-Space V σ) → + is-convergent-series-ℝ-Banach-Space V σ + is-convergent-is-cauchy-sequence-partial-sum-series-ℝ-Banach-Space = + is-convergent-is-cauchy-sequence-partial-sum-series-Complete-Metric-Ab + ( complete-metric-ab-add-ℝ-Banach-Space V) + ( σ) +``` + +### A series in the real Banach space of real numbers converges if and only if its corresponding series of real numbers converges + +```agda +module _ + {l : Level} + (σ : sequence (ℝ l)) + where + + is-convergent-real-is-convergent-real-banach-space-ℝ : + is-convergent-series-ℝ-Banach-Space + ( real-banach-space-ℝ l) + ( series-terms-ℝ-Banach-Space (real-banach-space-ℝ l) σ) → + is-convergent-series-ℝ (series-terms-ℝ σ) + is-convergent-real-is-convergent-real-banach-space-ℝ (lim , is-lim) = + ( lim , + preserves-limits-sequence-isometry-Metric-Space + ( metric-space-Normed-ℝ-Vector-Space (normed-real-vector-space-ℝ l)) + ( metric-space-ℝ l) + ( id , λ d x y → inv-iff (neighborhood-iff-leq-dist-ℝ d x y)) + ( λ n → sum-fin-sequence-ℝ n (σ ∘ nat-Fin n)) + ( lim) + ( is-lim)) + + is-convergent-real-banach-space-is-convergent-ℝ : + is-convergent-series-ℝ (series-terms-ℝ σ) → + is-convergent-series-ℝ-Banach-Space + ( real-banach-space-ℝ l) + ( series-terms-ℝ-Banach-Space (real-banach-space-ℝ l) σ) + is-convergent-real-banach-space-is-convergent-ℝ (lim , is-lim) = + ( lim , + preserves-limits-sequence-isometry-Metric-Space + ( metric-space-ℝ l) + ( metric-space-Normed-ℝ-Vector-Space (normed-real-vector-space-ℝ l)) + ( id , λ d x y → neighborhood-iff-leq-dist-ℝ d x y) + ( λ n → sum-fin-sequence-ℝ n (σ ∘ nat-Fin n)) + ( lim) + ( is-lim)) +``` diff --git a/src/analysis/convergent-series-real-numbers.lagda.md b/src/analysis/convergent-series-real-numbers.lagda.md new file mode 100644 index 0000000000..b0c0dc877d --- /dev/null +++ b/src/analysis/convergent-series-real-numbers.lagda.md @@ -0,0 +1,74 @@ +# Convergent series in the real numbers + +```agda +module analysis.convergent-series-real-numbers where +``` + +
Imports + +```agda +open import analysis.convergent-series-complete-metric-abelian-groups +open import analysis.convergent-series-metric-abelian-groups +open import analysis.series-real-numbers + +open import foundation.propositions +open import foundation.subtypes +open import foundation.universe-levels + +open import real-numbers.cauchy-sequences-real-numbers +open import real-numbers.dedekind-real-numbers +open import real-numbers.metric-additive-group-of-real-numbers +``` + +
+ +## Idea + +A [series of real numbers](analysis.series-real-numbers.md) is +{{#concept "convergent" Disambiguation="series in 𝐑" Agda=is-convergent-series-ℝ Agda=convergent-series-ℝ WDID=Q1211057 WD="convergent series"}} +if its partial sums converge in the +[metric space of real numbers](real-numbers.metric-space-of-real-numbers.md). + +## Definition + +```agda +module _ + {l : Level} + (σ : series-ℝ l) + where + + is-sum-prop-series-ℝ : ℝ l → Prop l + is-sum-prop-series-ℝ = is-sum-prop-series-Metric-Ab σ + + is-sum-series-ℝ : ℝ l → UU l + is-sum-series-ℝ = is-sum-series-Metric-Ab σ + + is-convergent-prop-series-ℝ : Prop (lsuc l) + is-convergent-prop-series-ℝ = + is-convergent-prop-series-Metric-Ab σ + + is-convergent-series-ℝ : UU (lsuc l) + is-convergent-series-ℝ = is-convergent-series-Metric-Ab σ + +convergent-series-ℝ : (l : Level) → UU (lsuc l) +convergent-series-ℝ l = type-subtype (is-convergent-prop-series-ℝ {l}) +``` + +## Properties + +### If the partial sums of a series form a Cauchy sequence, the series converges + +```agda +module _ + {l : Level} + (σ : series-ℝ l) + where + + is-convergent-is-cauchy-sequence-partial-sum-series-ℝ : + is-cauchy-sequence-ℝ (partial-sum-series-ℝ σ) → + is-convergent-series-ℝ σ + is-convergent-is-cauchy-sequence-partial-sum-series-ℝ = + is-convergent-is-cauchy-sequence-partial-sum-series-Complete-Metric-Ab + ( complete-metric-ab-add-ℝ l) + ( σ) +``` diff --git a/src/analysis/metric-abelian-groups-normed-real-vector-spaces.lagda.md b/src/analysis/metric-abelian-groups-normed-real-vector-spaces.lagda.md new file mode 100644 index 0000000000..4ee09d54d5 --- /dev/null +++ b/src/analysis/metric-abelian-groups-normed-real-vector-spaces.lagda.md @@ -0,0 +1,94 @@ +# Metric abelian groups of normed real vector spaces + +```agda +module analysis.metric-abelian-groups-normed-real-vector-spaces where +``` + +
Imports + +```agda +open import analysis.metric-abelian-groups + +open import foundation.dependent-pair-types +open import foundation.equality-dependent-pair-types +open import foundation.identity-types +open import foundation.logical-equivalences +open import foundation.subtypes +open import foundation.universe-levels + +open import group-theory.abelian-groups + +open import linear-algebra.normed-real-vector-spaces + +open import metric-spaces.extensionality-pseudometric-spaces +open import metric-spaces.metric-spaces +open import metric-spaces.pseudometric-spaces +open import metric-spaces.rational-neighborhood-relations + +open import real-numbers.dedekind-real-numbers +open import real-numbers.distance-real-numbers +open import real-numbers.large-additive-group-of-real-numbers +open import real-numbers.metric-additive-group-of-real-numbers +``` + +
+ +## Idea + +A [normed](linear-algebra.normed-real-vector-spaces.md) +[real vector space](linear-algebra.real-vector-spaces.md) forms a +[metric abelian group](analysis.metric-abelian-groups.md) under addition. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (V : Normed-ℝ-Vector-Space l1 l2) + where + + ab-metric-ab-Normed-ℝ-Vector-Space : Ab l2 + ab-metric-ab-Normed-ℝ-Vector-Space = ab-Normed-ℝ-Vector-Space V + + type-metric-ab-Normed-ℝ-Vector-Space : UU l2 + type-metric-ab-Normed-ℝ-Vector-Space = type-Normed-ℝ-Vector-Space V + + pseudometric-structure-metric-ab-Normed-ℝ-Vector-Space : + Pseudometric-Structure l1 type-metric-ab-Normed-ℝ-Vector-Space + pseudometric-structure-metric-ab-Normed-ℝ-Vector-Space = + pseudometric-structure-Metric-Space (metric-space-Normed-ℝ-Vector-Space V) + + pseudometric-space-metric-ab-Normed-ℝ-Vector-Space : + Pseudometric-Space l2 l1 + pseudometric-space-metric-ab-Normed-ℝ-Vector-Space = + pseudometric-Metric-Space (metric-space-Normed-ℝ-Vector-Space V) + + metric-ab-Normed-ℝ-Vector-Space : Metric-Ab l2 l1 + metric-ab-Normed-ℝ-Vector-Space = + ( ab-metric-ab-Normed-ℝ-Vector-Space , + pseudometric-structure-metric-ab-Normed-ℝ-Vector-Space , + is-extensional-pseudometric-Metric-Space + ( metric-space-Normed-ℝ-Vector-Space V) , + is-isometry-neg-Normed-ℝ-Vector-Space V , + is-isometry-left-add-Normed-ℝ-Vector-Space V) +``` + +## Properties + +### The metric abelian group associated with `ℝ` as a normed vector space over `ℝ` is equal to the metric additive group of `ℝ` + +```agda +abstract + eq-metric-ab-normed-real-vector-space-metric-ab-ℝ : + (l : Level) → + metric-ab-Normed-ℝ-Vector-Space (normed-real-vector-space-ℝ l) = + metric-ab-add-ℝ l + eq-metric-ab-normed-real-vector-space-metric-ab-ℝ l = + eq-pair-eq-fiber + ( eq-type-subtype + ( λ M → is-metric-ab-prop-Ab-Pseudometric-Structure (ab-add-ℝ l) M) + ( eq-type-subtype + ( is-pseudometric-prop-Rational-Neighborhood-Relation (ℝ l)) + ( eq-Eq-Rational-Neighborhood-Relation _ _ + ( λ d x y → inv-iff (neighborhood-iff-leq-dist-ℝ d x y))))) +``` diff --git a/src/analysis/metric-abelian-groups.lagda.md b/src/analysis/metric-abelian-groups.lagda.md index 3306202936..fe8317d466 100644 --- a/src/analysis/metric-abelian-groups.lagda.md +++ b/src/analysis/metric-abelian-groups.lagda.md @@ -12,8 +12,10 @@ open import elementary-number-theory.positive-rational-numbers open import foundation.action-on-identifications-binary-functions open import foundation.binary-relations open import foundation.cartesian-product-types +open import foundation.conjunction open import foundation.dependent-pair-types open import foundation.identity-types +open import foundation.propositions open import foundation.universe-levels open import group-theory.abelian-groups @@ -39,18 +41,25 @@ and negation operation are ## Definition ```agda +is-metric-ab-prop-Ab-Pseudometric-Structure : + {l1 l2 : Level} (G : Ab l1) (M : Pseudometric-Structure l2 (type-Ab G)) → + Prop (l1 ⊔ l2) +is-metric-ab-prop-Ab-Pseudometric-Structure G M = + let + MS = (type-Ab G , M) + in + is-extensional-prop-Pseudometric-Space MS ∧ + is-isometry-prop-Pseudometric-Space MS MS (neg-Ab G) ∧ + Π-Prop + ( type-Ab G) + ( λ x → is-isometry-prop-Pseudometric-Space MS MS (add-Ab G x)) + Metric-Ab : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) Metric-Ab l1 l2 = Σ ( Ab l1) ( λ G → Σ ( Pseudometric-Structure l2 (type-Ab G)) - ( λ M → - let MS = (type-Ab G , M) - in - is-extensional-Pseudometric-Space MS × - is-isometry-Pseudometric-Space MS MS (neg-Ab G) × - ( (x : type-Ab G) → - is-isometry-Pseudometric-Space MS MS (add-Ab G x)))) + ( λ M → type-Prop (is-metric-ab-prop-Ab-Pseudometric-Structure G M))) module _ {l1 l2 : Level} (MG : Metric-Ab l1 l2) diff --git a/src/analysis/series-complete-metric-abelian-groups.lagda.md b/src/analysis/series-complete-metric-abelian-groups.lagda.md new file mode 100644 index 0000000000..bb936a8eb0 --- /dev/null +++ b/src/analysis/series-complete-metric-abelian-groups.lagda.md @@ -0,0 +1,49 @@ +# Series in complete metric abelian groups + +```agda +module analysis.series-complete-metric-abelian-groups where +``` + +
Imports + +```agda +open import analysis.complete-metric-abelian-groups +open import analysis.series-metric-abelian-groups + +open import foundation.universe-levels + +open import lists.sequences +``` + +
+ +## Idea + +A [series](analysis.series-metric-abelian-groups.md) in a +[complete metric abelian group](analysis.complete-metric-abelian-groups.md) is a +series in the underlying +[metric abelian group](analysis.metric-abelian-groups.md). + +## Definition + +```agda +module _ + {l1 l2 : Level} + (G : Complete-Metric-Ab l1 l2) + where + + series-Complete-Metric-Ab : UU l1 + series-Complete-Metric-Ab = series-Metric-Ab (metric-ab-Complete-Metric-Ab G) + + series-terms-Complete-Metric-Ab : + sequence (type-Complete-Metric-Ab G) → series-Complete-Metric-Ab + series-terms-Complete-Metric-Ab = series-terms-Metric-Ab + + term-series-Complete-Metric-Ab : + series-Complete-Metric-Ab → sequence (type-Complete-Metric-Ab G) + term-series-Complete-Metric-Ab = term-series-Metric-Ab + + partial-sum-series-Complete-Metric-Ab : + series-Complete-Metric-Ab → sequence (type-Complete-Metric-Ab G) + partial-sum-series-Complete-Metric-Ab = partial-sum-series-Metric-Ab +``` diff --git a/src/analysis/series-metric-abelian-groups.lagda.md b/src/analysis/series-metric-abelian-groups.lagda.md index 1bb3d80a5e..b450b78d25 100644 --- a/src/analysis/series-metric-abelian-groups.lagda.md +++ b/src/analysis/series-metric-abelian-groups.lagda.md @@ -83,7 +83,7 @@ module _ ```agda module _ - {l1 l2 : Level} (G : Metric-Ab l1 l2) + {l1 l2 : Level} {G : Metric-Ab l1 l2} where partial-sum-series-Metric-Ab : series-Metric-Ab G → ℕ → type-Metric-Ab G @@ -95,14 +95,14 @@ module _ ```agda module _ - {l1 l2 : Level} (G : Metric-Ab l1 l2) + {l1 l2 : Level} {G : Metric-Ab l1 l2} where eq-term-diff-partial-sum-series-Metric-Ab : (f : series-Metric-Ab G) (n : ℕ) → add-Metric-Ab G - ( partial-sum-series-Metric-Ab G f (succ-ℕ n)) - ( neg-Metric-Ab G (partial-sum-series-Metric-Ab G f n)) = + ( partial-sum-series-Metric-Ab f (succ-ℕ n)) + ( neg-Metric-Ab G (partial-sum-series-Metric-Ab f n)) = term-series-Metric-Ab f n eq-term-diff-partial-sum-series-Metric-Ab (series-terms-Metric-Ab f) n = ap-add-Metric-Ab G @@ -118,21 +118,21 @@ module _ ```agda module _ - {l1 l2 : Level} (G : Metric-Ab l1 l2) + {l1 l2 : Level} {G : Metric-Ab l1 l2} where htpy-htpy-partial-sum-series-Metric-Ab : {σ τ : series-Metric-Ab G} → - (partial-sum-series-Metric-Ab G σ ~ partial-sum-series-Metric-Ab G τ) → + (partial-sum-series-Metric-Ab σ ~ partial-sum-series-Metric-Ab τ) → term-series-Metric-Ab σ ~ term-series-Metric-Ab τ htpy-htpy-partial-sum-series-Metric-Ab {σ} {τ} psσ~psτ n = - inv (eq-term-diff-partial-sum-series-Metric-Ab G σ n) ∙ + inv (eq-term-diff-partial-sum-series-Metric-Ab σ n) ∙ ap-right-subtraction-Ab (ab-Metric-Ab G) (psσ~psτ (succ-ℕ n)) (psσ~psτ n) ∙ - eq-term-diff-partial-sum-series-Metric-Ab G τ n + eq-term-diff-partial-sum-series-Metric-Ab τ n eq-htpy-partial-sum-series-Metric-Ab : {σ τ : series-Metric-Ab G} → - (partial-sum-series-Metric-Ab G σ ~ partial-sum-series-Metric-Ab G τ) → + (partial-sum-series-Metric-Ab σ ~ partial-sum-series-Metric-Ab τ) → σ = τ eq-htpy-partial-sum-series-Metric-Ab psσ~psτ = eq-htpy-term-series-Metric-Ab G @@ -155,23 +155,22 @@ module _ ```agda module _ - {l1 l2 : Level} (G : Metric-Ab l1 l2) + {l1 l2 : Level} {G : Metric-Ab l1 l2} where abstract partial-sum-drop-series-Metric-Ab : - (n : ℕ) → (σ : series-Metric-Ab G) → (i : ℕ) → - partial-sum-series-Metric-Ab G (drop-series-Metric-Ab n σ) i = + (n : ℕ) (σ : series-Metric-Ab G) (i : ℕ) → + partial-sum-series-Metric-Ab (drop-series-Metric-Ab n σ) i = diff-Metric-Ab G - ( partial-sum-series-Metric-Ab G σ (n +ℕ i)) - ( partial-sum-series-Metric-Ab G σ n) - partial-sum-drop-series-Metric-Ab n (series-terms-Metric-Ab σ) i = + ( partial-sum-series-Metric-Ab σ (n +ℕ i)) + ( partial-sum-series-Metric-Ab σ n) + partial-sum-drop-series-Metric-Ab n s@(series-terms-Metric-Ab σ) i = inv ( equational-reasoning diff-Metric-Ab G - ( partial-sum-series-Metric-Ab G (series-terms-Metric-Ab σ) - ( n +ℕ i)) - ( partial-sum-series-Metric-Ab G (series-terms-Metric-Ab σ) n) + ( partial-sum-series-Metric-Ab s (n +ℕ i)) + ( partial-sum-series-Metric-Ab s n) = diff-Metric-Ab G ( add-Metric-Ab G @@ -179,7 +178,7 @@ module _ ( σ ∘ nat-Fin (n +ℕ i) ∘ inl-coproduct-Fin n i)) ( sum-fin-sequence-type-Ab (ab-Metric-Ab G) i ( σ ∘ nat-Fin (n +ℕ i) ∘ inr-coproduct-Fin n i))) - ( partial-sum-series-Metric-Ab G (series-terms-Metric-Ab σ) n) + ( partial-sum-series-Metric-Ab s n) by ap-diff-Metric-Ab G ( split-sum-fin-sequence-type-Ab @@ -191,10 +190,11 @@ module _ = diff-Metric-Ab G ( add-Metric-Ab G - ( partial-sum-series-Metric-Ab G (series-terms-Metric-Ab σ) n) - ( partial-sum-series-Metric-Ab G - ( series-terms-Metric-Ab (σ ∘ add-ℕ n)) i)) - ( partial-sum-series-Metric-Ab G (series-terms-Metric-Ab σ) n) + ( partial-sum-series-Metric-Ab s n) + ( partial-sum-series-Metric-Ab + ( series-terms-Metric-Ab {G = G} (σ ∘ add-ℕ n)) + ( i))) + ( partial-sum-series-Metric-Ab s n) by ap-diff-Metric-Ab G ( ap-add-Metric-Ab G @@ -204,8 +204,8 @@ module _ ( λ j → ap σ (nat-inr-coproduct-Fin n i j)))) ( refl) = - partial-sum-series-Metric-Ab G - ( series-terms-Metric-Ab (σ ∘ add-ℕ n)) + partial-sum-series-Metric-Ab + ( series-terms-Metric-Ab {G = G} (σ ∘ add-ℕ n)) ( i) by is-identity-left-conjugation-Ab (ab-Metric-Ab G) _ _) ``` diff --git a/src/analysis/series-real-banach-spaces.lagda.md b/src/analysis/series-real-banach-spaces.lagda.md new file mode 100644 index 0000000000..12f7c30508 --- /dev/null +++ b/src/analysis/series-real-banach-spaces.lagda.md @@ -0,0 +1,111 @@ +# Series in real Banach spaces + +```agda +module analysis.series-real-banach-spaces where +``` + +
Imports + +```agda +open import analysis.metric-abelian-groups-normed-real-vector-spaces +open import analysis.series-metric-abelian-groups +open import analysis.series-real-numbers + +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.natural-numbers + +open import foundation.function-types +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.real-banach-spaces + +open import lists.sequences +``` + +
+ +## Idea + +A +{{#concept "series" Disambiguation="in a real Banach space" Agda=series-ℝ-Banach-Space}} +is a [series](analysis.series-metric-abelian-groups.md) in the +[metric abelian group](analysis.metric-abelian-groups.md) +[associated](analysis.metric-abelian-groups-normed-real-vector-spaces.md) with +the underlying +[normed real vector space](linear-algebra.normed-real-vector-spaces.md). + +## Definition + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + where + + series-ℝ-Banach-Space : UU l2 + series-ℝ-Banach-Space = + series-Metric-Ab + ( metric-ab-Normed-ℝ-Vector-Space (normed-vector-space-ℝ-Banach-Space V)) + + series-terms-ℝ-Banach-Space : + sequence (type-ℝ-Banach-Space V) → series-ℝ-Banach-Space + series-terms-ℝ-Banach-Space = series-terms-Metric-Ab + + term-series-ℝ-Banach-Space : + series-ℝ-Banach-Space → sequence (type-ℝ-Banach-Space V) + term-series-ℝ-Banach-Space = term-series-Metric-Ab + + partial-sum-series-ℝ-Banach-Space : + series-ℝ-Banach-Space → sequence (type-ℝ-Banach-Space V) + partial-sum-series-ℝ-Banach-Space = partial-sum-series-Metric-Ab +``` + +## Properties + +### The series of norms + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + (σ : series-ℝ-Banach-Space V) + where + + map-norm-series-ℝ-Banach-Space : series-ℝ l1 + map-norm-series-ℝ-Banach-Space = + series-terms-ℝ (map-norm-ℝ-Banach-Space V ∘ term-series-ℝ-Banach-Space V σ) +``` + +### Dropping terms from a series + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + where + + drop-series-ℝ-Banach-Space : + ℕ → series-ℝ-Banach-Space V → series-ℝ-Banach-Space V + drop-series-ℝ-Banach-Space = drop-series-Metric-Ab +``` + +### The partial sums of a series after dropping terms + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + where + + abstract + partial-sum-drop-series-ℝ-Banach-Space : + (n : ℕ) (σ : series-ℝ-Banach-Space V) (i : ℕ) → + partial-sum-series-ℝ-Banach-Space V + ( drop-series-ℝ-Banach-Space V n σ) + ( i) = + diff-ℝ-Banach-Space V + ( partial-sum-series-ℝ-Banach-Space V σ (n +ℕ i)) + ( partial-sum-series-ℝ-Banach-Space V σ n) + partial-sum-drop-series-ℝ-Banach-Space = partial-sum-drop-series-Metric-Ab +``` diff --git a/src/analysis/series-real-numbers.lagda.md b/src/analysis/series-real-numbers.lagda.md new file mode 100644 index 0000000000..db12638a3e --- /dev/null +++ b/src/analysis/series-real-numbers.lagda.md @@ -0,0 +1,112 @@ +# Series in the real numbers + +```agda +module analysis.series-real-numbers where +``` + +
Imports + +```agda +open import analysis.series-complete-metric-abelian-groups +open import analysis.series-metric-abelian-groups + +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.function-types +open import foundation.identity-types +open import foundation.universe-levels + +open import lists.sequences + +open import order-theory.monotonic-sequences-posets + +open import real-numbers.absolute-value-real-numbers +open import real-numbers.addition-nonnegative-real-numbers +open import real-numbers.dedekind-real-numbers +open import real-numbers.difference-real-numbers +open import real-numbers.inequality-real-numbers +open import real-numbers.metric-additive-group-of-real-numbers +open import real-numbers.nonnegative-real-numbers +``` + +
+ +## Idea + +A {{#concept "series" Disambiguation="of real numbers" Agda=series-ℝ}} in the +[real numbers](real-numbers.dedekind-real-numbers.md) is a +[series](analysis.series-metric-abelian-groups.md) in the +[metric additive group of real numbers](real-numbers.metric-additive-group-of-real-numbers.md). + +## Definition + +```agda +series-ℝ : (l : Level) → UU (lsuc l) +series-ℝ l = series-Complete-Metric-Ab (complete-metric-ab-add-ℝ l) + +series-terms-ℝ : {l : Level} → sequence (ℝ l) → series-ℝ l +series-terms-ℝ = series-terms-Metric-Ab + +term-series-ℝ : {l : Level} → series-ℝ l → sequence (ℝ l) +term-series-ℝ = term-series-Metric-Ab + +partial-sum-series-ℝ : {l : Level} → series-ℝ l → sequence (ℝ l) +partial-sum-series-ℝ {l} = partial-sum-series-Metric-Ab +``` + +## Properties + +### If the terms of a series of real numbers are nonnegative, the partial sums are monotonic + +```agda +abstract + is-monotonic-partial-sum-is-nonnegative-term-series-ℝ : + {l : Level} (σ : series-ℝ l) → + ((n : ℕ) → is-nonnegative-ℝ (term-series-ℝ σ n)) → + is-monotonic-sequence-Poset (ℝ-Poset l) (partial-sum-series-ℝ σ) + is-monotonic-partial-sum-is-nonnegative-term-series-ℝ {l} σ H = + is-monotonic-sequence-is-increasing-Poset + ( ℝ-Poset l) + ( partial-sum-series-ℝ σ) + ( λ n → leq-left-add-real-ℝ⁰⁺ _ (term-series-ℝ σ n , H n)) +``` + +### The series of absolute values + +```agda +module _ + {l : Level} + (σ : series-ℝ l) + where + + map-abs-series-ℝ : series-ℝ l + map-abs-series-ℝ = series-terms-ℝ (abs-ℝ ∘ term-series-ℝ σ) +``` + +### Dropping terms from a series + +```agda +module _ + {l : Level} + where + + drop-series-ℝ : ℕ → series-ℝ l → series-ℝ l + drop-series-ℝ = drop-series-Metric-Ab +``` + +### The partial sums of a series after dropping terms + +```agda +module _ + {l : Level} + where + + abstract + partial-sum-drop-series-ℝ : + (n : ℕ) (σ : series-ℝ l) (i : ℕ) → + partial-sum-series-ℝ (drop-series-ℝ n σ) i = + partial-sum-series-ℝ σ (n +ℕ i) -ℝ partial-sum-series-ℝ σ n + partial-sum-drop-series-ℝ = partial-sum-drop-series-Metric-Ab +``` diff --git a/src/commutative-algebra/local-commutative-rings.lagda.md b/src/commutative-algebra/local-commutative-rings.lagda.md index 9de71b60fc..717095eaa5 100644 --- a/src/commutative-algebra/local-commutative-rings.lagda.md +++ b/src/commutative-algebra/local-commutative-rings.lagda.md @@ -66,4 +66,24 @@ module _ is-local-commutative-ring-Local-Commutative-Ring : is-local-Commutative-Ring commutative-ring-Local-Commutative-Ring is-local-commutative-ring-Local-Commutative-Ring = pr2 A + + zero-Local-Commutative-Ring : type-Local-Commutative-Ring + zero-Local-Commutative-Ring = zero-Ring ring-Local-Commutative-Ring + + one-Local-Commutative-Ring : type-Local-Commutative-Ring + one-Local-Commutative-Ring = one-Ring ring-Local-Commutative-Ring + + add-Local-Commutative-Ring : + type-Local-Commutative-Ring → type-Local-Commutative-Ring → + type-Local-Commutative-Ring + add-Local-Commutative-Ring = add-Ring ring-Local-Commutative-Ring + + mul-Local-Commutative-Ring : + type-Local-Commutative-Ring → type-Local-Commutative-Ring → + type-Local-Commutative-Ring + mul-Local-Commutative-Ring = mul-Ring ring-Local-Commutative-Ring + + neg-Local-Commutative-Ring : + type-Local-Commutative-Ring → type-Local-Commutative-Ring + neg-Local-Commutative-Ring = neg-Ring ring-Local-Commutative-Ring ``` diff --git a/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-rings.lagda.md b/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-rings.lagda.md index b1a0ac28aa..f5113246e1 100644 --- a/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-rings.lagda.md @@ -8,6 +8,7 @@ module commutative-algebra.sums-of-finite-sequences-of-elements-commutative-ring ```agda open import commutative-algebra.commutative-rings +open import commutative-algebra.multiples-of-elements-commutative-rings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers @@ -244,6 +245,19 @@ module _ preserves-sum-permutation-fin-sequence-type-Ring (ring-Commutative-Ring A) ``` +### The sum of a constant finite sequence in a commutative ring is scalar multiplication by the length of the sequence + +```agda +abstract + sum-constant-fin-sequence-type-Commutative-Ring : + {l : Level} (R : Commutative-Ring l) (n : ℕ) → + (x : type-Commutative-Ring R) → + sum-fin-sequence-type-Commutative-Ring R n (λ _ → x) = + multiple-Commutative-Ring R n x + sum-constant-fin-sequence-type-Commutative-Ring R = + sum-constant-fin-sequence-type-Ring (ring-Commutative-Ring R) +``` + ## See also - [Sums of finite families of elements in commutative rings](commutative-algebra.sums-of-finite-families-of-elements-commutative-rings.md) diff --git a/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-semirings.lagda.md b/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-semirings.lagda.md index 5c5bfabafc..4292c3ed0e 100644 --- a/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-of-finite-sequences-of-elements-commutative-semirings.lagda.md @@ -8,6 +8,7 @@ module commutative-algebra.sums-of-finite-sequences-of-elements-commutative-semi ```agda open import commutative-algebra.commutative-semirings +open import commutative-algebra.multiples-of-elements-commutative-semirings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers @@ -260,3 +261,16 @@ module _ preserves-sum-permutation-fin-sequence-type-Semiring ( semiring-Commutative-Semiring R) ``` + +### The sum of a constant finite sequence in a commutative semiring is scalar multiplication by the length of the sequence + +```agda +abstract + sum-constant-fin-sequence-type-Commutative-Semiring : + {l : Level} (R : Commutative-Semiring l) (n : ℕ) → + (x : type-Commutative-Semiring R) → + sum-fin-sequence-type-Commutative-Semiring R n (λ _ → x) = + multiple-Commutative-Semiring R n x + sum-constant-fin-sequence-type-Commutative-Semiring R = + sum-constant-fin-sequence-type-Semiring (semiring-Commutative-Semiring R) +``` diff --git a/src/complex-numbers.lagda.md b/src/complex-numbers.lagda.md index 647fd88a7d..bb5ba406cb 100644 --- a/src/complex-numbers.lagda.md +++ b/src/complex-numbers.lagda.md @@ -4,12 +4,17 @@ module complex-numbers where open import complex-numbers.addition-complex-numbers public +open import complex-numbers.apartness-complex-numbers public open import complex-numbers.complex-numbers public +open import complex-numbers.conjugation-complex-numbers public open import complex-numbers.eisenstein-integers public open import complex-numbers.gaussian-integers public open import complex-numbers.large-additive-group-of-complex-numbers public open import complex-numbers.large-ring-of-complex-numbers public +open import complex-numbers.magnitude-complex-numbers public open import complex-numbers.multiplication-complex-numbers public +open import complex-numbers.multiplicative-inverses-nonzero-complex-numbers public +open import complex-numbers.nonzero-complex-numbers public open import complex-numbers.raising-universe-levels-complex-numbers public open import complex-numbers.similarity-complex-numbers public ``` diff --git a/src/complex-numbers/apartness-complex-numbers.lagda.md b/src/complex-numbers/apartness-complex-numbers.lagda.md new file mode 100644 index 0000000000..e58a5ee728 --- /dev/null +++ b/src/complex-numbers/apartness-complex-numbers.lagda.md @@ -0,0 +1,102 @@ +# Apartness of complex numbers + +```agda +module complex-numbers.apartness-complex-numbers where +``` + +
Imports + +```agda +open import complex-numbers.complex-numbers + +open import foundation.dependent-pair-types +open import foundation.disjunction +open import foundation.empty-types +open import foundation.function-types +open import foundation.functoriality-disjunction +open import foundation.large-apartness-relations +open import foundation.negation +open import foundation.propositions +open import foundation.universe-levels + +open import real-numbers.apartness-real-numbers +``` + +
+ +## Idea + +Two [complex numbers](complex-numbers.complex-numbers.md) are +{{#concept "apart" Agda=apart-ℂ}} if their +[real](real-numbers.dedekind-real-numbers.md) parts are +[apart](real-numbers.apartness-real-numbers.md) [or](foundation.disjunction.md) +their imaginary parts are [apart]. + +## Definition + +```agda +module _ + {l1 l2 : Level} (z : ℂ l1) (w : ℂ l2) + where + + apart-prop-ℂ : Prop (l1 ⊔ l2) + apart-prop-ℂ = + apart-prop-ℝ (re-ℂ z) (re-ℂ w) ∨ apart-prop-ℝ (im-ℂ z) (im-ℂ w) + + apart-ℂ : UU (l1 ⊔ l2) + apart-ℂ = type-Prop apart-prop-ℂ +``` + +## Properties + +### Apartness is antireflexive + +```agda +abstract + antireflexive-apart-ℂ : {l : Level} (z : ℂ l) → ¬ (apart-ℂ z z) + antireflexive-apart-ℂ (a , b) = + elim-disjunction + ( empty-Prop) + ( antireflexive-apart-ℝ a) + ( antireflexive-apart-ℝ b) +``` + +### Apartness is symmetric + +```agda +abstract + symmetric-apart-ℂ : + {l1 l2 : Level} (z : ℂ l1) (w : ℂ l2) → apart-ℂ z w → apart-ℂ w z + symmetric-apart-ℂ (a , b) (c , d) = + map-disjunction symmetric-apart-ℝ symmetric-apart-ℝ +``` + +### Apartness is cotransitive + +```agda +abstract + cotransitive-apart-ℂ : + {l1 l2 l3 : Level} (x : ℂ l1) (y : ℂ l2) (z : ℂ l3) → + apart-ℂ x y → disjunction-type (apart-ℂ x z) (apart-ℂ z y) + cotransitive-apart-ℂ x@(a , b) y@(c , d) z@(e , f) = + elim-disjunction + ( (apart-prop-ℂ x z) ∨ (apart-prop-ℂ z y)) + ( map-disjunction inl-disjunction inl-disjunction ∘ + cotransitive-apart-ℝ a c e) + ( map-disjunction inr-disjunction inr-disjunction ∘ + cotransitive-apart-ℝ b d f) +``` + +### Apartness on the complex numbers is a large apartness relation + +```agda +large-apartness-relation-ℂ : Large-Apartness-Relation _⊔_ ℂ +apart-prop-Large-Apartness-Relation large-apartness-relation-ℂ = + apart-prop-ℂ +antirefl-Large-Apartness-Relation large-apartness-relation-ℂ = + antireflexive-apart-ℂ +symmetric-Large-Apartness-Relation large-apartness-relation-ℂ = + symmetric-apart-ℂ +cotransitive-Large-Apartness-Relation large-apartness-relation-ℂ = + cotransitive-apart-ℂ +``` diff --git a/src/complex-numbers/complex-numbers.lagda.md b/src/complex-numbers/complex-numbers.lagda.md index 450fdc6bc9..0b7cc5fcf8 100644 --- a/src/complex-numbers/complex-numbers.lagda.md +++ b/src/complex-numbers/complex-numbers.lagda.md @@ -38,6 +38,8 @@ are numbers of the form `a + bi`, where `a` and `b` are ℂ : (l : Level) → UU (lsuc l) ℂ l = ℝ l × ℝ l +pattern _+iℂ_ x y = (x , y) + re-ℂ : {l : Level} → ℂ l → ℝ l re-ℂ = pr1 @@ -81,13 +83,6 @@ complex-ℤ[i] : ℤ[i] → ℂ lzero complex-ℤ[i] (a , b) = (real-ℤ a , real-ℤ b) ``` -### The conjugate of a complex number - -```agda -conjugate-ℂ : {l : Level} → ℂ l → ℂ l -conjugate-ℂ (a , b) = (a , neg-ℝ b) -``` - ### Important complex numbers ```agda @@ -110,3 +105,11 @@ i-ℂ = (zero-ℝ , one-ℝ) neg-ℂ : {l : Level} → ℂ l → ℂ l neg-ℂ (a , b) = (neg-ℝ a , neg-ℝ b) ``` + +### `complex-ℝ one-ℝ` is equal to `one-ℂ` + +```agda +abstract + eq-complex-one-ℝ : complex-ℝ one-ℝ = one-ℂ + eq-complex-one-ℝ = eq-ℂ refl (inv (eq-raise-ℝ zero-ℝ)) +``` diff --git a/src/complex-numbers/conjugation-complex-numbers.lagda.md b/src/complex-numbers/conjugation-complex-numbers.lagda.md new file mode 100644 index 0000000000..8f3eb54ba1 --- /dev/null +++ b/src/complex-numbers/conjugation-complex-numbers.lagda.md @@ -0,0 +1,42 @@ +# Conjugation of complex numbers + +```agda +module complex-numbers.conjugation-complex-numbers where +``` + +
Imports + +```agda +open import complex-numbers.complex-numbers + +open import foundation.identity-types +open import foundation.universe-levels + +open import real-numbers.negation-real-numbers +``` + +
+ +## Idea + +The +{{#concept "conjugate" WDID=Q381040 WD="complex conjugate" Disambiguation="of a complex number" Agda=conjugate-ℂ}} +of a [complex number](complex-numbers.complex-numbers.md) `a + bi` is `a - bi`. + +## Definition + +```agda +conjugate-ℂ : {l : Level} → ℂ l → ℂ l +conjugate-ℂ (a +iℂ b) = a +iℂ neg-ℝ b +``` + +## Properties + +### Conjugation is an involution + +```agda +abstract + is-involution-conjugate-ℂ : + {l : Level} (z : ℂ l) → conjugate-ℂ (conjugate-ℂ z) = z + is-involution-conjugate-ℂ (a +iℂ b) = eq-ℂ refl (neg-neg-ℝ b) +``` diff --git a/src/complex-numbers/magnitude-complex-numbers.lagda.md b/src/complex-numbers/magnitude-complex-numbers.lagda.md new file mode 100644 index 0000000000..ee2b26b10c --- /dev/null +++ b/src/complex-numbers/magnitude-complex-numbers.lagda.md @@ -0,0 +1,233 @@ +# Magnitude of complex numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module complex-numbers.magnitude-complex-numbers where +``` + +
Imports + +```agda +open import complex-numbers.complex-numbers +open import complex-numbers.conjugation-complex-numbers +open import complex-numbers.multiplication-complex-numbers + +open import foundation.action-on-identifications-functions +open import foundation.identity-types +open import foundation.universe-levels + +open import real-numbers.addition-nonnegative-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.multiplication-nonnegative-real-numbers +open import real-numbers.multiplication-real-numbers +open import real-numbers.negation-real-numbers +open import real-numbers.nonnegative-real-numbers +open import real-numbers.raising-universe-levels-real-numbers +open import real-numbers.rational-real-numbers +open import real-numbers.similarity-real-numbers +open import real-numbers.square-roots-nonnegative-real-numbers +open import real-numbers.squares-real-numbers +``` + +
+ +## Idea + +The +{{#concept "magnitude" WD="magnitude of a complex number" WDID=Q3317982 Agda=magnitude-ℂ}} +of a [complex number](complex-numbers.complex-numbers.md) `a + bi` is defined as +$$\sqrt{a^2 + b^2}$$. + +## Definition + +```agda +nonnegative-squared-magnitude-ℂ : {l : Level} → ℂ l → ℝ⁰⁺ l +nonnegative-squared-magnitude-ℂ (a +iℂ b) = + nonnegative-square-ℝ a +ℝ⁰⁺ nonnegative-square-ℝ b + +squared-magnitude-ℂ : {l : Level} → ℂ l → ℝ l +squared-magnitude-ℂ z = real-ℝ⁰⁺ (nonnegative-squared-magnitude-ℂ z) + +∥_∥²ℂ : {l : Level} → ℂ l → ℝ l +∥ z ∥²ℂ = squared-magnitude-ℂ z + +nonnegative-magnitude-ℂ : {l : Level} → ℂ l → ℝ⁰⁺ l +nonnegative-magnitude-ℂ z = sqrt-ℝ⁰⁺ (nonnegative-squared-magnitude-ℂ z) + +magnitude-ℂ : {l : Level} → ℂ l → ℝ l +magnitude-ℂ z = real-ℝ⁰⁺ (nonnegative-magnitude-ℂ z) + +∥_∥ℂ : {l : Level} → ℂ l → ℝ l +∥ z ∥ℂ = magnitude-ℂ z +``` + +## Properties + +### The square of the magnitude of `z` is the product of `z` and the conjugate of `z` + +```agda +abstract + eq-squared-magnitude-mul-conjugate-ℂ : + {l : Level} (z : ℂ l) → + z *ℂ conjugate-ℂ z = complex-ℝ (squared-magnitude-ℂ z) + eq-squared-magnitude-mul-conjugate-ℂ (a +iℂ b) = + eq-ℂ + ( equational-reasoning + square-ℝ a -ℝ (b *ℝ neg-ℝ b) + = square-ℝ a -ℝ (neg-ℝ (square-ℝ b)) + by ap-diff-ℝ refl (right-negative-law-mul-ℝ _ _) + = square-ℝ a +ℝ square-ℝ b + by ap-add-ℝ refl (neg-neg-ℝ _)) + ( eq-sim-ℝ + ( similarity-reasoning-ℝ + a *ℝ neg-ℝ b +ℝ b *ℝ a + ~ℝ neg-ℝ (a *ℝ b) +ℝ a *ℝ b + by + sim-eq-ℝ + ( ap-add-ℝ + ( right-negative-law-mul-ℝ a b) + ( commutative-mul-ℝ b a)) + ~ℝ zero-ℝ + by left-inverse-law-add-ℝ (a *ℝ b) + ~ℝ raise-ℝ _ zero-ℝ + by sim-raise-ℝ _ _)) +``` + +### The square of the magnitude of `zw` is the product of the squares of the magnitudes of `z` and `w` + +```agda +abstract + distributive-squared-magnitude-mul-ℂ : + {l1 l2 : Level} (z : ℂ l1) (w : ℂ l2) → + squared-magnitude-ℂ (z *ℂ w) = + squared-magnitude-ℂ z *ℝ squared-magnitude-ℂ w + distributive-squared-magnitude-mul-ℂ (a +iℂ b) (c +iℂ d) = + equational-reasoning + square-ℝ (a *ℝ c -ℝ b *ℝ d) +ℝ square-ℝ (a *ℝ d +ℝ b *ℝ c) + = + ( square-ℝ (a *ℝ c) +ℝ + neg-ℝ (real-ℕ 2 *ℝ ((a *ℝ c) *ℝ (b *ℝ d))) +ℝ + square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ + real-ℕ 2 *ℝ ((a *ℝ d) *ℝ (b *ℝ c)) +ℝ + square-ℝ (b *ℝ c)) + by + ap-add-ℝ + ( square-diff-ℝ _ _) + ( square-add-ℝ _ _) + = + ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d) +ℝ + neg-ℝ (real-ℕ 2 *ℝ (a *ℝ c *ℝ (b *ℝ d)))) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c) +ℝ + real-ℕ 2 *ℝ ((a *ℝ d) *ℝ (b *ℝ c))) + by + ap-add-ℝ + ( right-swap-add-ℝ _ _ _) + ( right-swap-add-ℝ _ _ _) + = + ( ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c))) +ℝ + ( neg-ℝ (real-ℕ 2 *ℝ ((a *ℝ c) *ℝ (b *ℝ d))) +ℝ + real-ℕ 2 *ℝ ((a *ℝ d) *ℝ (b *ℝ c))) + by interchange-law-add-add-ℝ _ _ _ _ + = + ( ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c))) +ℝ + ( neg-ℝ (real-ℕ 2 *ℝ (a *ℝ c *ℝ (b *ℝ d))) +ℝ + real-ℕ 2 *ℝ (a *ℝ d *ℝ (c *ℝ b))) + by + ap-add-ℝ + ( refl) + ( ap-add-ℝ + ( refl) + ( ap-mul-ℝ refl (ap-mul-ℝ refl (commutative-mul-ℝ b c)))) + = + ( ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c))) +ℝ + ( neg-ℝ (real-ℕ 2 *ℝ (a *ℝ c *ℝ (b *ℝ d))) +ℝ + real-ℕ 2 *ℝ (a *ℝ c *ℝ (d *ℝ b))) + by + ap-add-ℝ + ( refl) + ( ap-add-ℝ refl (ap-mul-ℝ refl (interchange-law-mul-mul-ℝ _ _ _ _))) + = + ( ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c))) +ℝ + ( neg-ℝ (real-ℕ 2 *ℝ (a *ℝ c *ℝ (b *ℝ d))) +ℝ + real-ℕ 2 *ℝ (a *ℝ c *ℝ (b *ℝ d))) + by + ap-add-ℝ + ( refl) + ( ap-add-ℝ + ( refl) + ( ap-mul-ℝ refl (ap-mul-ℝ refl (commutative-mul-ℝ d b)))) + = + ( ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c))) +ℝ + zero-ℝ + by eq-sim-ℝ (preserves-sim-left-add-ℝ _ _ _ (left-inverse-law-add-ℝ _)) + = + ( square-ℝ (a *ℝ c) +ℝ square-ℝ (b *ℝ d)) +ℝ + ( square-ℝ (a *ℝ d) +ℝ square-ℝ (b *ℝ c)) + by right-unit-law-add-ℝ _ + = + ( square-ℝ (a *ℝ c) +ℝ square-ℝ (a *ℝ d)) +ℝ + ( square-ℝ (b *ℝ d) +ℝ square-ℝ (b *ℝ c)) + by interchange-law-add-add-ℝ _ _ _ _ + = + ( square-ℝ a *ℝ square-ℝ c +ℝ square-ℝ a *ℝ square-ℝ d) +ℝ + ( square-ℝ b *ℝ square-ℝ d +ℝ square-ℝ b *ℝ square-ℝ c) + by + ap-add-ℝ + ( ap-add-ℝ + ( distributive-square-mul-ℝ a c) + ( distributive-square-mul-ℝ a d)) + ( ap-add-ℝ + ( distributive-square-mul-ℝ b d) + ( distributive-square-mul-ℝ b c)) + = + square-ℝ a *ℝ (square-ℝ c +ℝ square-ℝ d) +ℝ + square-ℝ b *ℝ (square-ℝ d +ℝ square-ℝ c) + by + inv + ( ap-add-ℝ + ( left-distributive-mul-add-ℝ _ _ _) + ( left-distributive-mul-add-ℝ _ _ _)) + = + square-ℝ a *ℝ (square-ℝ c +ℝ square-ℝ d) +ℝ + square-ℝ b *ℝ (square-ℝ c +ℝ square-ℝ d) + by ap-add-ℝ refl (ap-mul-ℝ refl (commutative-add-ℝ _ _)) + = + (square-ℝ a +ℝ square-ℝ b) *ℝ (square-ℝ c +ℝ square-ℝ d) + by + inv + ( right-distributive-mul-add-ℝ + ( square-ℝ a) + ( square-ℝ b) + ( square-ℝ c +ℝ square-ℝ d)) +``` + +### The magnitude of `zw` is the product of the magnitudes of `z` and `w` + +```agda +abstract + distributive-magnitude-mul-ℂ : + {l1 l2 : Level} (z : ℂ l1) (w : ℂ l2) → + magnitude-ℂ (z *ℂ w) = magnitude-ℂ z *ℝ magnitude-ℂ w + distributive-magnitude-mul-ℂ z w = + equational-reasoning + real-sqrt-ℝ⁰⁺ (nonnegative-squared-magnitude-ℂ (z *ℂ w)) + = + real-sqrt-ℝ⁰⁺ + ( nonnegative-squared-magnitude-ℂ z *ℝ⁰⁺ + nonnegative-squared-magnitude-ℂ w) + by + ap + ( real-sqrt-ℝ⁰⁺) + ( eq-ℝ⁰⁺ _ _ (distributive-squared-magnitude-mul-ℂ z w)) + = magnitude-ℂ z *ℝ magnitude-ℂ w + by ap real-ℝ⁰⁺ (distributive-sqrt-mul-ℝ⁰⁺ _ _) +``` diff --git a/src/complex-numbers/multiplication-complex-numbers.lagda.md b/src/complex-numbers/multiplication-complex-numbers.lagda.md index fcef6b3b34..8893042eeb 100644 --- a/src/complex-numbers/multiplication-complex-numbers.lagda.md +++ b/src/complex-numbers/multiplication-complex-numbers.lagda.md @@ -13,6 +13,7 @@ open import complex-numbers.similarity-complex-numbers open import elementary-number-theory.rational-numbers +open import foundation.action-on-identifications-binary-functions open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.identity-types @@ -20,9 +21,11 @@ open import foundation.transport-along-identifications open import foundation.universe-levels 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.multiplication-real-numbers open import real-numbers.negation-real-numbers +open import real-numbers.raising-universe-levels-real-numbers open import real-numbers.rational-real-numbers open import real-numbers.similarity-real-numbers ``` @@ -45,6 +48,11 @@ mul-ℂ (a , b) (c , d) = (a *ℝ c -ℝ b *ℝ d , a *ℝ d +ℝ b *ℝ c) infixl 40 _*ℂ_ _*ℂ_ : {l1 l2 : Level} → ℂ l1 → ℂ l2 → ℂ (l1 ⊔ l2) _*ℂ_ = mul-ℂ + +ap-mul-ℂ : + {l1 l2 : Level} {z z' : ℂ l1} → z = z' → {w w' : ℂ l2} → w = w' → + mul-ℂ z w = mul-ℂ z' w' +ap-mul-ℂ = ap-binary mul-ℂ ``` ## Properties @@ -256,6 +264,48 @@ opaque by left-unit-law-add-ℝ zero-ℝ) ``` +### The canonical embedding of real numbers in the complex numbers preserves multiplication + +```agda +abstract + mul-complex-ℝ : + {l1 l2 : Level} (x : ℝ l1) (y : ℝ l2) → + complex-ℝ x *ℂ complex-ℝ y = complex-ℝ (x *ℝ y) + mul-complex-ℝ {l1} {l2} x y = + eq-ℂ + ( equational-reasoning + x *ℝ y -ℝ raise-ℝ l1 zero-ℝ *ℝ raise-ℝ l2 zero-ℝ + = x *ℝ y -ℝ zero-ℝ *ℝ zero-ℝ + by + eq-sim-ℝ + ( preserves-sim-diff-ℝ + ( refl-sim-ℝ (x *ℝ y)) + ( symmetric-sim-ℝ + ( preserves-sim-mul-ℝ (sim-raise-ℝ _ _) (sim-raise-ℝ _ _)))) + = x *ℝ y -ℝ zero-ℝ + by ap-diff-ℝ refl (eq-sim-ℝ (right-zero-law-mul-ℝ _)) + = x *ℝ y + by right-unit-law-diff-ℝ (x *ℝ y)) + ( eq-sim-ℝ + ( similarity-reasoning-ℝ + x *ℝ raise-ℝ l2 zero-ℝ +ℝ raise-ℝ l1 zero-ℝ *ℝ y + ~ℝ x *ℝ zero-ℝ +ℝ zero-ℝ *ℝ y + by + symmetric-sim-ℝ + ( preserves-sim-add-ℝ + ( preserves-sim-left-mul-ℝ _ _ _ (sim-raise-ℝ l2 zero-ℝ)) + ( preserves-sim-right-mul-ℝ _ _ _ (sim-raise-ℝ l1 zero-ℝ))) + ~ℝ zero-ℝ +ℝ zero-ℝ + by + preserves-sim-add-ℝ + ( right-zero-law-mul-ℝ x) + ( left-zero-law-mul-ℝ y) + ~ℝ zero-ℝ + by sim-eq-ℝ (left-unit-law-add-ℝ zero-ℝ) + ~ℝ raise-ℝ (l1 ⊔ l2) zero-ℝ + by sim-raise-ℝ (l1 ⊔ l2) zero-ℝ)) +``` + ### Similarity is preserved by multiplication ```agda diff --git a/src/complex-numbers/multiplicative-inverses-nonzero-complex-numbers.lagda.md b/src/complex-numbers/multiplicative-inverses-nonzero-complex-numbers.lagda.md new file mode 100644 index 0000000000..183fbec3b2 --- /dev/null +++ b/src/complex-numbers/multiplicative-inverses-nonzero-complex-numbers.lagda.md @@ -0,0 +1,88 @@ +# Multiplicative inverses of complex numbers + +```agda +module complex-numbers.multiplicative-inverses-nonzero-complex-numbers where +``` + +
Imports + +```agda +open import complex-numbers.complex-numbers +open import complex-numbers.conjugation-complex-numbers +open import complex-numbers.magnitude-complex-numbers +open import complex-numbers.multiplication-complex-numbers +open import complex-numbers.nonzero-complex-numbers +open import complex-numbers.similarity-complex-numbers + +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import real-numbers.multiplication-real-numbers +open import real-numbers.multiplicative-inverses-positive-real-numbers +open import real-numbers.rational-real-numbers +``` + +
+ +## Idea + +[Nonzero](complex-numbers.nonzero-complex-numbers.md) +[complex numbers](complex-numbers.complex-numbers.md) have inverses under +[multiplication](complex-numbers.multiplication-complex-numbers.md). + +## Definition + +```agda +complex-inv-nonzero-ℂ : {l : Level} (z : nonzero-ℂ l) → ℂ l +complex-inv-nonzero-ℂ (z , z≠0) = + conjugate-ℂ z *ℂ + complex-ℝ (real-inv-ℝ⁺ (positive-squared-magnitude-nonzero-ℂ (z , z≠0))) +``` + +## Properties + +### Inverse laws of multiplication + +```agda +abstract + right-inverse-law-mul-nonzero-ℂ : {l : Level} (z : nonzero-ℂ l) → + sim-ℂ (complex-nonzero-ℂ z *ℂ complex-inv-nonzero-ℂ z) one-ℂ + right-inverse-law-mul-nonzero-ℂ (z@(a +iℂ b) , z≠0) = + similarity-reasoning-ℂ + z *ℂ + ( conjugate-ℂ z *ℂ + complex-ℝ + ( real-inv-ℝ⁺ (positive-squared-magnitude-nonzero-ℂ (z , z≠0)))) + ~ℂ + ( z *ℂ conjugate-ℂ z) *ℂ + ( complex-ℝ + ( real-inv-ℝ⁺ (positive-squared-magnitude-nonzero-ℂ (z , z≠0)))) + by sim-eq-ℂ (inv (associative-mul-ℂ _ _ _)) + ~ℂ + complex-ℝ (squared-magnitude-ℂ z) *ℂ + complex-ℝ + ( real-inv-ℝ⁺ (positive-squared-magnitude-nonzero-ℂ (z , z≠0))) + by sim-eq-ℂ (ap-mul-ℂ (eq-squared-magnitude-mul-conjugate-ℂ z) refl) + ~ℂ + complex-ℝ + ( squared-magnitude-ℂ z *ℝ + real-inv-ℝ⁺ (positive-squared-magnitude-nonzero-ℂ (z , z≠0))) + by sim-eq-ℂ (mul-complex-ℝ _ _) + ~ℂ complex-ℝ one-ℝ + by + preserves-sim-complex-ℝ + ( right-inverse-law-mul-ℝ⁺ + ( positive-squared-magnitude-nonzero-ℂ (z , z≠0))) + ~ℂ one-ℂ + by sim-eq-ℂ eq-complex-one-ℝ + + left-inverse-law-mul-nonzero-ℂ : {l : Level} (z : nonzero-ℂ l) → + sim-ℂ (complex-inv-nonzero-ℂ z *ℂ complex-nonzero-ℂ z) one-ℂ + left-inverse-law-mul-nonzero-ℂ z = + tr + ( λ w → sim-ℂ w one-ℂ) + ( commutative-mul-ℂ _ _) + ( right-inverse-law-mul-nonzero-ℂ z) +``` diff --git a/src/complex-numbers/nonzero-complex-numbers.lagda.md b/src/complex-numbers/nonzero-complex-numbers.lagda.md new file mode 100644 index 0000000000..a10fec5897 --- /dev/null +++ b/src/complex-numbers/nonzero-complex-numbers.lagda.md @@ -0,0 +1,99 @@ +# Nonzero complex numbers + +```agda +module complex-numbers.nonzero-complex-numbers where +``` + +
Imports + +```agda +open import complex-numbers.apartness-complex-numbers +open import complex-numbers.complex-numbers +open import complex-numbers.magnitude-complex-numbers + +open import foundation.dependent-pair-types +open import foundation.disjunction +open import foundation.propositions +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import real-numbers.addition-nonnegative-real-numbers +open import real-numbers.addition-positive-real-numbers +open import real-numbers.addition-real-numbers +open import real-numbers.nonzero-real-numbers +open import real-numbers.positive-and-negative-real-numbers +open import real-numbers.positive-real-numbers +open import real-numbers.rational-real-numbers +open import real-numbers.similarity-real-numbers +open import real-numbers.squares-real-numbers +open import real-numbers.strict-inequality-real-numbers +``` + +
+ +## Idea + +A [complex number](complex-numbers.complex-numbers.md) is +{{#concept "nonzero" Agda=is-nonzero-ℂ}} if it is +[apart](complex-numbers.apartness-complex-numbers.md) from zero, that is, its +[real](real-numbers.dedekind-real-numbers.md) part +[or](foundation.disjunction.md) its imaginary part are +[nonzero](real-numbers.nonzero-real-numbers.md). + +## Definition + +```agda +is-nonzero-prop-ℂ : {l : Level} → ℂ l → Prop l +is-nonzero-prop-ℂ z = apart-prop-ℂ z zero-ℂ + +is-nonzero-ℂ : {l : Level} → ℂ l → UU l +is-nonzero-ℂ z = type-Prop (is-nonzero-prop-ℂ z) + +nonzero-ℂ : (l : Level) → UU (lsuc l) +nonzero-ℂ l = type-subtype (is-nonzero-prop-ℂ {l}) + +complex-nonzero-ℂ : {l : Level} → nonzero-ℂ l → ℂ l +complex-nonzero-ℂ = pr1 +``` + +## Properties + +### A complex number is nonzero if and only if its squared magnitude is positive + +```agda +abstract + is-positive-squared-magnitude-is-nonzero-ℂ : + {l : Level} (z : ℂ l) → is-nonzero-ℂ z → is-positive-ℝ ∥ z ∥²ℂ + is-positive-squared-magnitude-is-nonzero-ℂ (a +iℂ b) = + elim-disjunction + ( is-positive-prop-ℝ ∥ a +iℂ b ∥²ℂ) + ( λ a≠0 → + concatenate-le-leq-ℝ + ( zero-ℝ) + ( square-ℝ a) + ( square-ℝ a +ℝ square-ℝ b) + ( is-positive-square-is-nonzero-ℝ a a≠0) + ( leq-left-add-real-ℝ⁰⁺ _ (nonnegative-square-ℝ b))) + ( λ b≠0 → + concatenate-le-leq-ℝ + ( zero-ℝ) + ( square-ℝ b) + ( square-ℝ a +ℝ square-ℝ b) + ( is-positive-square-is-nonzero-ℝ b b≠0) + ( leq-right-add-real-ℝ⁰⁺ _ (nonnegative-square-ℝ a))) + + is-nonzero-is-positive-squared-magnitude-ℂ : + {l : Level} (z : ℂ l) → is-positive-ℝ ∥ z ∥²ℂ → is-nonzero-ℂ z + is-nonzero-is-positive-squared-magnitude-ℂ (a +iℂ b) 0Imports + +```agda +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.addition-nonnegative-rational-numbers +open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.additive-group-of-rational-numbers +open import elementary-number-theory.archimedean-property-rational-numbers +open import elementary-number-theory.exponentiation-natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.inequality-rational-numbers +open import elementary-number-theory.multiplication-natural-numbers +open import elementary-number-theory.multiplication-positive-rational-numbers +open import elementary-number-theory.multiplication-rational-numbers +open import elementary-number-theory.multiplicative-group-of-positive-rational-numbers +open import elementary-number-theory.natural-numbers +open import elementary-number-theory.nonnegative-rational-numbers +open import elementary-number-theory.nonzero-natural-numbers +open import elementary-number-theory.positive-and-negative-rational-numbers +open import elementary-number-theory.positive-rational-numbers +open import elementary-number-theory.rational-numbers +open import elementary-number-theory.series-rational-numbers +open import elementary-number-theory.strict-inequality-natural-numbers +open import elementary-number-theory.strict-inequality-rational-numbers +open import elementary-number-theory.sums-of-finite-sequences-of-rational-numbers +open import elementary-number-theory.unit-fractions-rational-numbers + +open import foundation.action-on-identifications-functions +open import foundation.dependent-pair-types +open import foundation.existential-quantification +open import foundation.function-extensionality +open import foundation.function-types +open import foundation.identity-types +open import foundation.propositional-truncations +open import foundation.propositions +open import foundation.transport-along-identifications + +open import group-theory.abelian-groups + +open import order-theory.posets + +open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.standard-finite-types +``` + + + +## Idea + +The +{{#concept "harmonic series" WDID=Q464100 WD="harmonic series" Agda=harmonic-series-ℚ}} +is the sum $$Σ_{n=0}^{∞} \frac{1}{n}$$. + +## Definition + +```agda +harmonic-series-ℚ : series-ℚ +harmonic-series-ℚ = series-terms-ℚ reciprocal-rational-succ-ℕ +``` + +## Properties + +### For any `k`, the `2ᵏ`th partial sum of the harmonic series is at least `1 + k/2` + +```agda +abstract + lower-bound-sum-harmonic-series-power-of-two-ℚ : + (k : ℕ) → + leq-ℚ + ( one-ℚ +ℚ reciprocal-rational-succ-ℕ 1 *ℚ rational-ℕ k) + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 k)) + lower-bound-sum-harmonic-series-power-of-two-ℚ 0 = + leq-eq-ℚ + ( inv + ( equational-reasoning + partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 zero-ℕ) + = reciprocal-rational-succ-ℕ 0 + by compute-sum-one-element-ℚ _ + = one-ℚ + by ap rational-ℚ⁺ inv-one-ℚ⁺ + = one-ℚ +ℚ zero-ℚ + by inv (right-unit-law-add-ℚ one-ℚ) + = one-ℚ +ℚ reciprocal-rational-succ-ℕ 1 *ℚ zero-ℚ + by ap-add-ℚ refl (inv (right-zero-law-mul-ℚ _)))) + lower-bound-sum-harmonic-series-power-of-two-ℚ (succ-ℕ n) = + let + open inequality-reasoning-Poset ℚ-Poset + in + chain-of-inequalities + one-ℚ +ℚ reciprocal-rational-succ-ℕ 1 *ℚ rational-ℕ (succ-ℕ n) + ≤ one-ℚ +ℚ reciprocal-rational-succ-ℕ 1 *ℚ succ-ℚ (rational-ℕ n) + by leq-eq-ℚ (ap-add-ℚ refl (ap-mul-ℚ refl (inv (succ-rational-ℕ n)))) + ≤ ( one-ℚ) +ℚ + ( reciprocal-rational-succ-ℕ 1 +ℚ + reciprocal-rational-succ-ℕ 1 *ℚ rational-ℕ n) + by leq-eq-ℚ (ap-add-ℚ refl (mul-right-succ-ℚ _ _)) + ≤ ( reciprocal-rational-succ-ℕ 1) +ℚ + ( one-ℚ +ℚ reciprocal-rational-succ-ℕ 1 *ℚ rational-ℕ n) + by leq-eq-ℚ (left-swap-add-ℚ _ _ _) + ≤ ( reciprocal-rational-succ-ℕ 1) +ℚ + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 n)) + by + preserves-leq-right-add-ℚ _ _ _ + ( lower-bound-sum-harmonic-series-power-of-two-ℚ n) + ≤ ( ( rational-ℕ (exp-ℕ 2 n)) *ℚ + ( reciprocal-rational-succ-ℕ 1) *ℚ + ( reciprocal-rational-ℕ⁺ (exp-ℕ⁺ (2 , (λ ())) n))) +ℚ + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 n)) + by + leq-eq-ℚ + ( ap-add-ℚ + ( inv + ( ap + ( rational-ℚ⁺) + ( is-identity-left-conjugation-Ab + ( abelian-group-mul-ℚ⁺) + ( positive-rational-ℕ⁺ (exp-ℕ⁺ (2 , λ ()) n)) + ( positive-reciprocal-rational-succ-ℕ 1)))) + ( refl)) + ≤ ( ( rational-ℕ (exp-ℕ 2 n)) *ℚ + ( ( reciprocal-rational-succ-ℕ 1) *ℚ + ( reciprocal-rational-ℕ⁺ (exp-ℕ⁺ (2 , (λ ())) n)))) +ℚ + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 n)) + by leq-eq-ℚ (ap-add-ℚ (associative-mul-ℚ _ _ _) refl) + ≤ ( ( rational-ℕ (exp-ℕ 2 n)) *ℚ + ( ( reciprocal-rational-ℕ⁺ (exp-ℕ⁺ (2 , (λ ())) n)) *ℚ + ( reciprocal-rational-succ-ℕ 1))) +ℚ + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 n)) + by leq-eq-ℚ (ap-add-ℚ (ap-mul-ℚ refl (commutative-mul-ℚ _ _)) refl) + ≤ ( ( rational-ℕ (exp-ℕ 2 n)) *ℚ + ( reciprocal-rational-ℕ⁺ (exp-ℕ⁺ (2 , λ ()) (succ-ℕ n)))) +ℚ + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 n)) + by + leq-eq-ℚ + ( ap-add-ℚ + ( ap-mul-ℚ + ( refl) + ( ( inv + ( distributive-reciprocal-mul-ℕ⁺ + ( exp-ℕ⁺ (2 , λ ()) n) + ( 2 , λ ()))) ∙ + ( ap + ( reciprocal-rational-ℕ⁺) + ( eq-nonzero-ℕ + { exp-ℕ⁺ (2 , λ ()) n *ℕ⁺ (2 , λ ())} + { exp-ℕ⁺ (2 , (λ ())) (succ-ℕ n)} + ( refl))))) + ( refl)) + ≤ ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ _ → reciprocal-rational-ℕ⁺ (exp-ℕ⁺ (2 , (λ ())) (succ-ℕ n)))) +ℚ + ( partial-sum-series-ℚ harmonic-series-ℚ (exp-ℕ 2 n)) + by leq-eq-ℚ (ap-add-ℚ (inv (sum-constant-fin-sequence-ℚ _ _)) refl) + ≤ ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ k → + reciprocal-rational-succ-ℕ + ( nat-Fin + ( exp-ℕ 2 n +ℕ exp-ℕ 2 n) + ( inr-coproduct-Fin (exp-ℕ 2 n) (exp-ℕ 2 n) k)))) +ℚ + ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ k → reciprocal-rational-succ-ℕ (nat-Fin (exp-ℕ 2 n) k))) + by + preserves-leq-left-add-ℚ _ _ _ + ( preserves-leq-sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( _) + ( _) + ( λ k → + inv-leq-ℚ⁺ _ _ + ( preserves-leq-rational-ℕ + ( leq-succ-le-ℕ + ( nat-Fin (exp-ℕ 2 n +ℕ exp-ℕ 2 n) _) + ( exp-ℕ 2 (succ-ℕ n)) + ( inv-tr + ( le-ℕ _) + ( right-two-law-mul-ℕ _) + ( strict-upper-bound-nat-Fin _ _)))))) + ≤ ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ k → + reciprocal-rational-succ-ℕ + ( nat-Fin + ( exp-ℕ 2 n +ℕ exp-ℕ 2 n) + ( inr-coproduct-Fin (exp-ℕ 2 n) (exp-ℕ 2 n) k)))) +ℚ + ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ k → + reciprocal-rational-succ-ℕ + ( nat-Fin + ( exp-ℕ 2 n +ℕ exp-ℕ 2 n) + ( inl-coproduct-Fin (exp-ℕ 2 n) (exp-ℕ 2 n) k)))) + by + leq-eq-ℚ + ( ap-add-ℚ + ( refl) + ( ap + ( sum-fin-sequence-ℚ (exp-ℕ 2 n)) + ( eq-htpy + ( λ k → + ap + ( reciprocal-rational-succ-ℕ) + ( inv (nat-inl-coproduct-Fin _ _ k)))))) + ≤ ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ k → + reciprocal-rational-succ-ℕ + ( nat-Fin + ( exp-ℕ 2 n +ℕ exp-ℕ 2 n) + ( inl-coproduct-Fin (exp-ℕ 2 n) (exp-ℕ 2 n) k)))) +ℚ + ( sum-fin-sequence-ℚ + ( exp-ℕ 2 n) + ( λ k → + reciprocal-rational-succ-ℕ + ( nat-Fin + ( exp-ℕ 2 n +ℕ exp-ℕ 2 n) + ( inr-coproduct-Fin (exp-ℕ 2 n) (exp-ℕ 2 n) k)))) + by leq-eq-ℚ (commutative-add-ℚ _ _) + ≤ sum-fin-sequence-ℚ + ( exp-ℕ 2 n +ℕ exp-ℕ 2 n) + ( λ k → + reciprocal-rational-succ-ℕ (nat-Fin (exp-ℕ 2 n +ℕ exp-ℕ 2 n) k)) + by leq-eq-ℚ (inv (split-sum-fin-sequence-ℚ _ _ _)) + ≤ sum-fin-sequence-ℚ + ( exp-ℕ 2 (succ-ℕ n)) + ( reciprocal-rational-succ-ℕ ∘ nat-Fin (exp-ℕ 2 (succ-ℕ n))) + by + leq-eq-ℚ + ( ap + ( λ k → + sum-fin-sequence-ℚ k (reciprocal-rational-succ-ℕ ∘ nat-Fin k)) + ( inv (right-two-law-mul-ℕ _))) +``` + +### The harmonic series diverges + +The divergence of the harmonic series is the +[34th](literature.100-theorems.md#34) theorem on +[Freek Wiedijk](http://www.cs.ru.nl/F.Wiedijk/)'s list of +[100 theorems](literature.100-theorems.md) {{#cite 100theorems}}. + +```agda +abstract + grows-without-bound-harmonic-series-ℚ : + grows-without-bound-series-ℚ harmonic-series-ℚ + grows-without-bound-harmonic-series-ℚ q = + let + open + do-syntax-trunc-Prop + ( ∃ ℕ (partial-sum-stays-above-prop-series-ℚ harmonic-series-ℚ q)) + open inequality-reasoning-Poset ℚ-Poset + in do + (n , 2q @@ -452,17 +455,33 @@ abstract by ap-add-ℚ (right-unit-law-mul-ℚ p) refl ``` +### Multiplication by a natural number is repeated addition + +```agda +abstract + left-mul-rational-nat-ℚ : + (n : ℕ) (q : ℚ) → rational-ℕ n *ℚ q = multiple-Ab abelian-group-add-ℚ n q + left-mul-rational-nat-ℚ 0 q = left-zero-law-mul-ℚ q + left-mul-rational-nat-ℚ 1 q = left-unit-law-mul-ℚ q + left-mul-rational-nat-ℚ (succ-ℕ n@(succ-ℕ _)) q = + equational-reasoning + rational-ℕ (succ-ℕ n) *ℚ q + = succ-ℚ (rational-ℕ n) *ℚ q + by ap-mul-ℚ (inv (succ-rational-ℕ n)) refl + = q +ℚ rational-ℕ n *ℚ q by + mul-left-succ-ℚ _ _ + = q +ℚ multiple-Ab abelian-group-add-ℚ n q + by ap-add-ℚ refl (left-mul-rational-nat-ℚ n q) + = multiple-Ab abelian-group-add-ℚ (succ-ℕ n) q + by inv (multiple-succ-Ab' abelian-group-add-ℚ n q) +``` + ### `2q = q + q` ```agda abstract mul-two-ℚ : (q : ℚ) → rational-ℕ 2 *ℚ q = q +ℚ q - mul-two-ℚ q = - equational-reasoning - rational-ℤ (one-ℤ +ℤ one-ℤ) *ℚ q - = (one-ℚ +ℚ one-ℚ) *ℚ q by ap (_*ℚ q) (inv (add-rational-ℤ one-ℤ one-ℤ)) - = (one-ℚ *ℚ q) +ℚ (one-ℚ *ℚ q) by right-distributive-mul-add-ℚ _ _ _ - = q +ℚ q by ap-add-ℚ (left-unit-law-mul-ℚ q) (left-unit-law-mul-ℚ q) + mul-two-ℚ = left-mul-rational-nat-ℚ 2 ``` ### The product of a rational number and its denominator is its numerator diff --git a/src/elementary-number-theory/series-rational-numbers.lagda.md b/src/elementary-number-theory/series-rational-numbers.lagda.md new file mode 100644 index 0000000000..15f361eeda --- /dev/null +++ b/src/elementary-number-theory/series-rational-numbers.lagda.md @@ -0,0 +1,102 @@ +# Series of rational numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module elementary-number-theory.series-rational-numbers where +``` + +
Imports + +```agda +open import analysis.convergent-series-metric-abelian-groups +open import analysis.series-metric-abelian-groups + +open import elementary-number-theory.addition-nonnegative-rational-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.inequality-rational-numbers +open import elementary-number-theory.metric-additive-group-of-rational-numbers +open import elementary-number-theory.natural-numbers +open import elementary-number-theory.nonnegative-rational-numbers +open import elementary-number-theory.rational-numbers + +open import foundation.dependent-pair-types +open import foundation.existential-quantification +open import foundation.propositions +open import foundation.universe-levels + +open import lists.sequences + +open import order-theory.monotonic-sequences-posets +open import order-theory.order-preserving-maps-posets +``` + +
+ +## Idea + +A {{#concept "series" Disambiguation="in ℚ" Agda=series-ℚ}} of +[rational numbers](elementary-number-theory.rational-numbers.md) is a +[series](analysis.series-metric-abelian-groups.md) in the +[metric additive group of rational numbers](elementary-number-theory.metric-additive-group-of-rational-numbers.md) + +## Definition + +```agda +series-ℚ : UU lzero +series-ℚ = series-Metric-Ab metric-ab-add-ℚ + +series-terms-ℚ : sequence ℚ → series-ℚ +series-terms-ℚ = series-terms-Metric-Ab + +partial-sum-series-ℚ : series-ℚ → ℕ → ℚ +partial-sum-series-ℚ = partial-sum-series-Metric-Ab + +term-series-ℚ : series-ℚ → ℕ → ℚ +term-series-ℚ = term-series-Metric-Ab +``` + +## Properties + +### The proposition that a series converges to a sum + +```agda +is-sum-prop-series-ℚ : series-ℚ → ℚ → Prop lzero +is-sum-prop-series-ℚ = is-sum-prop-series-Metric-Ab + +is-sum-series-ℚ : series-ℚ → ℚ → UU lzero +is-sum-series-ℚ = is-sum-series-Metric-Ab +``` + +### The proposition that a series grows without bound + +```agda +partial-sum-stays-above-prop-series-ℚ : series-ℚ → ℚ → ℕ → Prop lzero +partial-sum-stays-above-prop-series-ℚ σ q n = + Π-Prop ℕ (λ k → leq-ℕ-Prop n k ⇒ leq-ℚ-Prop q (partial-sum-series-ℚ σ k)) + +grows-without-bound-prop-series-ℚ : series-ℚ → Prop lzero +grows-without-bound-prop-series-ℚ σ = + Π-Prop ℚ (λ q → ∃ ℕ (partial-sum-stays-above-prop-series-ℚ σ q)) + +grows-without-bound-series-ℚ : series-ℚ → UU lzero +grows-without-bound-series-ℚ σ = + type-Prop (grows-without-bound-prop-series-ℚ σ) +``` + +### If all elements of a series are nonnegative, its partial sums are monotonic + +```agda +abstract + is-monotonic-partial-sum-is-nonnegative-term-series-ℚ : + (σ : series-ℚ) → ((n : ℕ) → is-nonnegative-ℚ (term-series-ℚ σ n)) → + is-monotonic-sequence-Poset ℚ-Poset (partial-sum-series-ℚ σ) + is-monotonic-partial-sum-is-nonnegative-term-series-ℚ σ H = + is-monotonic-sequence-is-increasing-Poset + ( ℚ-Poset) + ( partial-sum-series-ℚ σ) + ( λ n → + is-inflationary-map-right-add-rational-ℚ⁰⁺ + ( term-series-ℚ σ n , H n) + ( partial-sum-series-ℚ σ n)) +``` diff --git a/src/elementary-number-theory/sums-of-finite-sequences-of-rational-numbers.lagda.md b/src/elementary-number-theory/sums-of-finite-sequences-of-rational-numbers.lagda.md new file mode 100644 index 0000000000..374a1d8051 --- /dev/null +++ b/src/elementary-number-theory/sums-of-finite-sequences-of-rational-numbers.lagda.md @@ -0,0 +1,109 @@ +# Sums of finite sequences of rational numbers + +```agda +module elementary-number-theory.sums-of-finite-sequences-of-rational-numbers where +``` + +
Imports + +```agda +open import commutative-algebra.sums-of-finite-sequences-of-elements-commutative-rings + +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.inequality-rational-numbers +open import elementary-number-theory.multiplication-rational-numbers +open import elementary-number-theory.natural-numbers +open import elementary-number-theory.rational-numbers +open import elementary-number-theory.ring-of-rational-numbers + +open import foundation.function-types +open import foundation.identity-types + +open import lists.finite-sequences + +open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +The +{{#concept "sum operation" Disambiguation="of a finite sequence of rational numbers" Agda=sum-fin-sequence-ℚ}} +extends [addition](elementary-number-theory.addition-rational-numbers.md) on the +[rational numbers](elementary-number-theory.rational-numbers.md) to any +[finite sequence](lists.finite-sequences.md) of rational numbers. + +## Definition + +```agda +sum-fin-sequence-ℚ : (n : ℕ) → fin-sequence ℚ n → ℚ +sum-fin-sequence-ℚ = sum-fin-sequence-type-Commutative-Ring commutative-ring-ℚ +``` + +## Properties + +### The sum of a constant sequence is multiplication by a natural number + +```agda +abstract + sum-constant-fin-sequence-ℚ : + (n : ℕ) (q : ℚ) → + sum-fin-sequence-ℚ n (λ _ → q) = rational-ℕ n *ℚ q + sum-constant-fin-sequence-ℚ n q = + sum-constant-fin-sequence-type-Commutative-Ring commutative-ring-ℚ n q ∙ + inv (left-mul-rational-nat-ℚ n q) +``` + +### If `aₙ ≤ bₙ` for each `n`, then `Σ aₙ ≤ Σ bₙ` + +```agda +abstract + preserves-leq-sum-fin-sequence-ℚ : + (n : ℕ) (a b : fin-sequence ℚ n) → ((k : Fin n) → leq-ℚ (a k) (b k)) → + leq-ℚ (sum-fin-sequence-ℚ n a) (sum-fin-sequence-ℚ n b) + preserves-leq-sum-fin-sequence-ℚ 0 _ _ _ = refl-leq-ℚ zero-ℚ + preserves-leq-sum-fin-sequence-ℚ (succ-ℕ n) a b H = + preserves-leq-add-ℚ + ( preserves-leq-sum-fin-sequence-ℚ + ( n) + ( a ∘ inl-Fin n) + ( b ∘ inl-Fin n) + ( H ∘ inl-Fin n)) + ( H (neg-one-Fin n)) +``` + +### Multiplication is distributive over sums on finite sequences + +```agda +abstract + left-distributive-mul-sum-fin-sequence-ℚ : + (n : ℕ) (q : ℚ) (a : fin-sequence ℚ n) → + q *ℚ sum-fin-sequence-ℚ n a = sum-fin-sequence-ℚ n (mul-ℚ q ∘ a) + left-distributive-mul-sum-fin-sequence-ℚ = + left-distributive-mul-sum-fin-sequence-type-Commutative-Ring + ( commutative-ring-ℚ) +``` + +### Splitting sums of `n + m` elements into a sum of `n` elements and a sum of `m` elements + +```agda +split-sum-fin-sequence-ℚ : + (n m : ℕ) (f : fin-sequence ℚ (n +ℕ m)) → + sum-fin-sequence-ℚ (n +ℕ m) f = + sum-fin-sequence-ℚ n (f ∘ inl-coproduct-Fin n m) +ℚ + sum-fin-sequence-ℚ m (f ∘ inr-coproduct-Fin n m) +split-sum-fin-sequence-ℚ = + split-sum-fin-sequence-type-Commutative-Ring commutative-ring-ℚ +``` + +### The sum of a single element is the single element + +```agda +compute-sum-one-element-ℚ : + (a : fin-sequence ℚ 1) → sum-fin-sequence-ℚ 1 a = a (zero-Fin 0) +compute-sum-one-element-ℚ = + compute-sum-one-element-Commutative-Ring commutative-ring-ℚ +``` diff --git a/src/elementary-number-theory/triangular-numbers.lagda.md b/src/elementary-number-theory/triangular-numbers.lagda.md index 0a3f74aae1..d7c5a79cef 100644 --- a/src/elementary-number-theory/triangular-numbers.lagda.md +++ b/src/elementary-number-theory/triangular-numbers.lagda.md @@ -9,15 +9,11 @@ module elementary-number-theory.triangular-numbers where
Imports ```agda -open import analysis.convergent-series-metric-abelian-groups -open import analysis.series-metric-abelian-groups - open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.addition-rational-numbers open import elementary-number-theory.additive-group-of-rational-numbers open import elementary-number-theory.difference-rational-numbers open import elementary-number-theory.divisibility-natural-numbers -open import elementary-number-theory.metric-additive-group-of-rational-numbers open import elementary-number-theory.multiplication-natural-numbers open import elementary-number-theory.multiplication-positive-rational-numbers open import elementary-number-theory.multiplication-rational-numbers @@ -27,6 +23,7 @@ open import elementary-number-theory.nonzero-natural-numbers open import elementary-number-theory.positive-rational-numbers open import elementary-number-theory.rational-numbers open import elementary-number-theory.semiring-of-natural-numbers +open import elementary-number-theory.series-rational-numbers open import elementary-number-theory.unit-fractions-rational-numbers open import foundation.action-on-identifications-functions @@ -203,15 +200,14 @@ abstract ( eq-nonzero-ℕ ( compute-double-triangular-number-ℕ (succ-ℕ n))))) -series-reciprocal-triangular-number-ℕ : series-Metric-Ab metric-ab-add-ℚ +series-reciprocal-triangular-number-ℕ : series-ℚ series-reciprocal-triangular-number-ℕ = - series-terms-Metric-Ab reciprocal-triangular-number-succ-ℕ + series-terms-ℚ reciprocal-triangular-number-succ-ℕ abstract compute-partial-sum-series-reciprocal-triangular-number-ℕ : (n : ℕ) → - partial-sum-series-Metric-Ab - ( metric-ab-add-ℚ) + partial-sum-series-ℚ ( series-reciprocal-triangular-number-ℕ) ( n) = rational-ℕ 2 *ℚ (one-ℚ -ℚ reciprocal-rational-succ-ℕ n) @@ -227,8 +223,7 @@ abstract by right-zero-law-mul-ℚ _) compute-partial-sum-series-reciprocal-triangular-number-ℕ (succ-ℕ n) = equational-reasoning - partial-sum-series-Metric-Ab - ( metric-ab-add-ℚ) + partial-sum-series-ℚ ( series-reciprocal-triangular-number-ℕ) ( n) +ℚ reciprocal-triangular-number-succ-ℕ n @@ -271,7 +266,7 @@ This theorem is the [42nd](literature.100-theorems.md#42) theorem on ```agda abstract sum-reciprocal-triangular-number-ℕ : - is-sum-series-Metric-Ab + is-sum-series-ℚ ( series-reciprocal-triangular-number-ℕ) ( rational-ℕ 2) sum-reciprocal-triangular-number-ℕ = diff --git a/src/elementary-number-theory/unit-fractions-rational-numbers.lagda.md b/src/elementary-number-theory/unit-fractions-rational-numbers.lagda.md index 035a9a963f..8d26e1dcbc 100644 --- a/src/elementary-number-theory/unit-fractions-rational-numbers.lagda.md +++ b/src/elementary-number-theory/unit-fractions-rational-numbers.lagda.md @@ -119,6 +119,19 @@ module _ ( eq-denominator-reciprocal-rational-ℤ⁺) ``` +### Taking the reciprocal of a nonzero natural number distributes over multiplication + +```agda +abstract + distributive-reciprocal-mul-ℕ⁺ : + (m n : ℕ⁺) → + reciprocal-rational-ℕ⁺ (m *ℕ⁺ n) = + reciprocal-rational-ℕ⁺ m *ℚ reciprocal-rational-ℕ⁺ n + distributive-reciprocal-mul-ℕ⁺ m⁺@(m , _) n⁺@(n , _) = + ap rational-inv-ℚ⁺ (eq-ℚ⁺ (inv (mul-rational-ℕ m n))) ∙ + ap rational-ℚ⁺ (distributive-inv-mul-ℚ⁺ _ _) +``` + ### If `m ≤ n`, the reciprocal of `n` is less than or equal to the reciprocal of `n` ```agda diff --git a/src/group-theory/abelian-groups.lagda.md b/src/group-theory/abelian-groups.lagda.md index afd0152826..cd3e651b39 100644 --- a/src/group-theory/abelian-groups.lagda.md +++ b/src/group-theory/abelian-groups.lagda.md @@ -622,6 +622,52 @@ module _ add-right-subtraction-Ab = mul-right-div-Group (group-Ab A) ``` +### `(-x) - (-y) = y - x` + +```agda +module _ + {l : Level} (A : Ab l) + where + + abstract + right-subtraction-neg-Ab : + (x y : type-Ab A) → + right-subtraction-Ab A (neg-Ab A x) (neg-Ab A y) = + right-subtraction-Ab A y x + right-subtraction-neg-Ab x y = + equational-reasoning + right-subtraction-Ab A (neg-Ab A x) (neg-Ab A y) + = add-Ab A (neg-Ab A x) y + by ap-add-Ab A refl (neg-neg-Ab A y) + = right-subtraction-Ab A y x + by commutative-add-Ab A _ _ +``` + +### `(x + y) - (x + z) = y - z` + +```agda +module _ + {l : Level} (A : Ab l) + where + + abstract + right-subtraction-left-add-Ab : + (x y z : type-Ab A) → + right-subtraction-Ab A (add-Ab A x y) (add-Ab A x z) = + right-subtraction-Ab A y z + right-subtraction-left-add-Ab x y z = + equational-reasoning + right-subtraction-Ab A (add-Ab A x y) (add-Ab A x z) + = add-Ab A (add-Ab A x y) (add-Ab A (neg-Ab A x) (neg-Ab A z)) + by ap-add-Ab A refl (distributive-neg-add-Ab A x z) + = add-Ab A (right-subtraction-Ab A x x) (right-subtraction-Ab A y z) + by interchange-add-add-Ab A _ _ _ _ + = add-Ab A (zero-Ab A) (right-subtraction-Ab A y z) + by ap-add-Ab A (right-inverse-law-add-Ab A x) refl + = right-subtraction-Ab A y z + by left-unit-law-add-Ab A _ +``` + ### Conjugation is the identity function **Proof:** Consider two elements `x` and `y` of an abelian group. Then diff --git a/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md b/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md index 266b0d6d45..6eb7fb632f 100644 --- a/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md +++ b/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md @@ -218,11 +218,11 @@ module _ ```agda abstract - constant-sum-fin-sequence-type-Ab : + sum-constant-fin-sequence-type-Ab : {l : Level} (G : Ab l) (n : ℕ) (x : type-Ab G) → sum-fin-sequence-type-Ab G n (λ _ → x) = multiple-Ab G n x - constant-sum-fin-sequence-type-Ab G = - constant-sum-fin-sequence-type-Group (group-Ab G) + sum-constant-fin-sequence-type-Ab G = + sum-constant-fin-sequence-type-Group (group-Ab G) ``` ## See also diff --git a/src/group-theory/sums-of-finite-sequences-of-elements-commutative-monoids.lagda.md b/src/group-theory/sums-of-finite-sequences-of-elements-commutative-monoids.lagda.md index 374bcb0542..2386f64fef 100644 --- a/src/group-theory/sums-of-finite-sequences-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/sums-of-finite-sequences-of-elements-commutative-monoids.lagda.md @@ -260,13 +260,13 @@ module _ ```agda abstract - constant-sum-fin-sequence-type-Commutative-Monoid : + sum-constant-fin-sequence-type-Commutative-Monoid : {l : Level} (M : Commutative-Monoid l) (n : ℕ) → (x : type-Commutative-Monoid M) → sum-fin-sequence-type-Commutative-Monoid M n (λ _ → x) = power-Commutative-Monoid M n x - constant-sum-fin-sequence-type-Commutative-Monoid M = - constant-sum-fin-sequence-type-Monoid (monoid-Commutative-Monoid M) + sum-constant-fin-sequence-type-Commutative-Monoid M = + sum-constant-fin-sequence-type-Monoid (monoid-Commutative-Monoid M) ``` ## See also diff --git a/src/group-theory/sums-of-finite-sequences-of-elements-groups.lagda.md b/src/group-theory/sums-of-finite-sequences-of-elements-groups.lagda.md index 33badd9fbc..27101833bb 100644 --- a/src/group-theory/sums-of-finite-sequences-of-elements-groups.lagda.md +++ b/src/group-theory/sums-of-finite-sequences-of-elements-groups.lagda.md @@ -184,9 +184,9 @@ split-sum-fin-sequence-type-Group G = ```agda abstract - constant-sum-fin-sequence-type-Group : + sum-constant-fin-sequence-type-Group : {l : Level} (G : Group l) (n : ℕ) (x : type-Group G) → sum-fin-sequence-type-Group G n (λ _ → x) = power-Group G n x - constant-sum-fin-sequence-type-Group G = - constant-sum-fin-sequence-type-Monoid (monoid-Group G) + sum-constant-fin-sequence-type-Group G = + sum-constant-fin-sequence-type-Monoid (monoid-Group G) ``` diff --git a/src/group-theory/sums-of-finite-sequences-of-elements-monoids.lagda.md b/src/group-theory/sums-of-finite-sequences-of-elements-monoids.lagda.md index 4b58cd16e5..dcf4a4ff64 100644 --- a/src/group-theory/sums-of-finite-sequences-of-elements-monoids.lagda.md +++ b/src/group-theory/sums-of-finite-sequences-of-elements-monoids.lagda.md @@ -213,14 +213,14 @@ split-sum-fin-sequence-type-Monoid M n (succ-ℕ m) f = ```agda abstract - constant-sum-fin-sequence-type-Monoid : + sum-constant-fin-sequence-type-Monoid : {l : Level} (M : Monoid l) (n : ℕ) (x : type-Monoid M) → sum-fin-sequence-type-Monoid M n (λ _ → x) = power-Monoid M n x - constant-sum-fin-sequence-type-Monoid M 0 x = refl - constant-sum-fin-sequence-type-Monoid M 1 x = + sum-constant-fin-sequence-type-Monoid M 0 x = refl + sum-constant-fin-sequence-type-Monoid M 1 x = compute-sum-one-element-Monoid M (λ _ → x) - constant-sum-fin-sequence-type-Monoid M (succ-ℕ n@(succ-ℕ _)) x = + sum-constant-fin-sequence-type-Monoid M (succ-ℕ n@(succ-ℕ _)) x = ap-mul-Monoid M - ( constant-sum-fin-sequence-type-Monoid M n x) + ( sum-constant-fin-sequence-type-Monoid M n x) ( refl) ``` diff --git a/src/linear-algebra.lagda.md b/src/linear-algebra.lagda.md index ba50e0c42c..623205a1be 100644 --- a/src/linear-algebra.lagda.md +++ b/src/linear-algebra.lagda.md @@ -31,13 +31,19 @@ open import linear-algebra.linear-spans-left-modules-rings public open import linear-algebra.matrices public open import linear-algebra.matrices-on-rings public open import linear-algebra.multiplication-matrices public +open import linear-algebra.normed-real-vector-spaces public open import linear-algebra.preimages-of-left-module-structures-along-homomorphisms-of-rings public open import linear-algebra.rational-modules public +open import linear-algebra.real-banach-spaces public +open import linear-algebra.real-vector-spaces public open import linear-algebra.right-modules-rings public open import linear-algebra.scalar-multiplication-matrices public open import linear-algebra.scalar-multiplication-tuples public open import linear-algebra.scalar-multiplication-tuples-on-rings public +open import linear-algebra.seminormed-real-vector-spaces public open import linear-algebra.subsets-left-modules-rings public +open import linear-algebra.sums-of-finite-sequences-of-elements-normed-real-vector-spaces public +open import linear-algebra.sums-of-finite-sequences-of-elements-real-banach-spaces public open import linear-algebra.transposition-matrices public open import linear-algebra.tuples-on-commutative-monoids public open import linear-algebra.tuples-on-commutative-rings public @@ -46,4 +52,5 @@ open import linear-algebra.tuples-on-euclidean-domains public open import linear-algebra.tuples-on-monoids public open import linear-algebra.tuples-on-rings public open import linear-algebra.tuples-on-semirings public +open import linear-algebra.vector-spaces public ``` diff --git a/src/linear-algebra/normed-real-vector-spaces.lagda.md b/src/linear-algebra/normed-real-vector-spaces.lagda.md new file mode 100644 index 0000000000..88f59ca969 --- /dev/null +++ b/src/linear-algebra/normed-real-vector-spaces.lagda.md @@ -0,0 +1,426 @@ +# Normed real vector spaces + +```agda +{-# OPTIONS --lossy-unification #-} + +module linear-algebra.normed-real-vector-spaces where +``` + +
Imports + +```agda +open import foundation.action-on-identifications-functions +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.logical-equivalences +open import foundation.propositions +open import foundation.sets +open import foundation.subtypes +open import foundation.universe-levels + +open import group-theory.abelian-groups + +open import linear-algebra.real-vector-spaces +open import linear-algebra.seminormed-real-vector-spaces + +open import metric-spaces.equality-of-metric-spaces +open import metric-spaces.isometries-metric-spaces +open import metric-spaces.located-metric-spaces +open import metric-spaces.metric-spaces +open import metric-spaces.metrics +open import metric-spaces.metrics-of-metric-spaces + +open import real-numbers.absolute-value-real-numbers +open import real-numbers.addition-real-numbers +open import real-numbers.dedekind-real-numbers +open import real-numbers.distance-real-numbers +open import real-numbers.inequality-real-numbers +open import real-numbers.metric-space-of-real-numbers +open import real-numbers.nonnegative-real-numbers +open import real-numbers.raising-universe-levels-real-numbers +open import real-numbers.rational-real-numbers +open import real-numbers.saturation-inequality-nonnegative-real-numbers +open import real-numbers.similarity-real-numbers +``` + +
+ +## Idea + +A +{{#concept "norm" WDID=Q956437 WD="norm" Disambiguation="on a real vector space" Agda=norm-ℝ-Vector-Space}} +on a [real vector space](linear-algebra.real-vector-spaces.md) `V` is a +[seminorm](linear-algebra.seminormed-real-vector-spaces.md) `p` on `V` that is +**extensional**: if `p v = 0`, then `v` is the zero vector. + +A real vector space equipped with such a norm is called a +{{#concept "normed vector space" Disambiguation="normed real vector space" WDID=Q726210 WD="normed vector space" Agda=Normed-ℝ-Vector-Space}}. + +A norm on a real vector space induces a +[located](metric-spaces.located-metric-spaces.md) +[metric space](metric-spaces.metric-spaces.md) on the vector space, defined by +the neighborhood relation that `v` and `w` are in an `ε`-neighborhood of each +other if `p (v - w) ≤ ε`. + +## Definition + +```agda +module _ + {l1 l2 : Level} (V : ℝ-Vector-Space l1 l2) (p : seminorm-ℝ-Vector-Space V) + where + + is-norm-prop-seminorm-ℝ-Vector-Space : Prop (lsuc l1 ⊔ l2) + is-norm-prop-seminorm-ℝ-Vector-Space = + Π-Prop + ( type-ℝ-Vector-Space V) + ( λ v → + hom-Prop + ( Id-Prop (ℝ-Set l1) (pr1 p v) (raise-ℝ l1 zero-ℝ)) + ( is-zero-prop-ℝ-Vector-Space V v)) + + is-norm-seminorm-ℝ-Vector-Space : UU (lsuc l1 ⊔ l2) + is-norm-seminorm-ℝ-Vector-Space = + type-Prop is-norm-prop-seminorm-ℝ-Vector-Space + +norm-ℝ-Vector-Space : {l1 l2 : Level} → ℝ-Vector-Space l1 l2 → UU (lsuc l1 ⊔ l2) +norm-ℝ-Vector-Space V = type-subtype (is-norm-prop-seminorm-ℝ-Vector-Space V) + +Normed-ℝ-Vector-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) +Normed-ℝ-Vector-Space l1 l2 = Σ (ℝ-Vector-Space l1 l2) norm-ℝ-Vector-Space +``` + +## Properties + +```agda +module _ + {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) + where + + vector-space-Normed-ℝ-Vector-Space : ℝ-Vector-Space l1 l2 + vector-space-Normed-ℝ-Vector-Space = pr1 V + + ab-Normed-ℝ-Vector-Space : Ab l2 + ab-Normed-ℝ-Vector-Space = + ab-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + norm-Normed-ℝ-Vector-Space : + norm-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + norm-Normed-ℝ-Vector-Space = pr2 V + + seminorm-Normed-ℝ-Vector-Space : + seminorm-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + seminorm-Normed-ℝ-Vector-Space = pr1 norm-Normed-ℝ-Vector-Space + + seminormed-vector-space-Normed-ℝ-Vector-Space : + Seminormed-ℝ-Vector-Space l1 l2 + seminormed-vector-space-Normed-ℝ-Vector-Space = + ( vector-space-Normed-ℝ-Vector-Space , seminorm-Normed-ℝ-Vector-Space) + + set-Normed-ℝ-Vector-Space : Set l2 + set-Normed-ℝ-Vector-Space = + set-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + type-Normed-ℝ-Vector-Space : UU l2 + type-Normed-ℝ-Vector-Space = + type-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + add-Normed-ℝ-Vector-Space : + type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space → + type-Normed-ℝ-Vector-Space + add-Normed-ℝ-Vector-Space = + add-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + commutative-add-Normed-ℝ-Vector-Space : + (u v : type-Normed-ℝ-Vector-Space) → + add-Normed-ℝ-Vector-Space u v = add-Normed-ℝ-Vector-Space v u + commutative-add-Normed-ℝ-Vector-Space = + commutative-add-Ab ab-Normed-ℝ-Vector-Space + + diff-Normed-ℝ-Vector-Space : + type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space → + type-Normed-ℝ-Vector-Space + diff-Normed-ℝ-Vector-Space = + diff-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + neg-Normed-ℝ-Vector-Space : + type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space + neg-Normed-ℝ-Vector-Space = + neg-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + neg-neg-Normed-ℝ-Vector-Space : + (v : type-Normed-ℝ-Vector-Space) → + neg-Normed-ℝ-Vector-Space (neg-Normed-ℝ-Vector-Space v) = v + neg-neg-Normed-ℝ-Vector-Space = + neg-neg-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + distributive-neg-add-Normed-ℝ-Vector-Space : + (v w : type-Normed-ℝ-Vector-Space) → + neg-Normed-ℝ-Vector-Space (add-Normed-ℝ-Vector-Space v w) = + add-Normed-ℝ-Vector-Space + ( neg-Normed-ℝ-Vector-Space v) + ( neg-Normed-ℝ-Vector-Space w) + distributive-neg-add-Normed-ℝ-Vector-Space = + distributive-neg-add-Ab ab-Normed-ℝ-Vector-Space + + interchange-add-add-Normed-ℝ-Vector-Space : + (u v w x : type-Normed-ℝ-Vector-Space) → + add-Normed-ℝ-Vector-Space + ( add-Normed-ℝ-Vector-Space u v) + ( add-Normed-ℝ-Vector-Space w x) = + add-Normed-ℝ-Vector-Space + ( add-Normed-ℝ-Vector-Space u w) + ( add-Normed-ℝ-Vector-Space v x) + interchange-add-add-Normed-ℝ-Vector-Space = + interchange-add-add-Ab ab-Normed-ℝ-Vector-Space + + zero-Normed-ℝ-Vector-Space : type-Normed-ℝ-Vector-Space + zero-Normed-ℝ-Vector-Space = + zero-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space + + left-unit-law-add-Normed-ℝ-Vector-Space : + (v : type-Normed-ℝ-Vector-Space) → + add-Normed-ℝ-Vector-Space zero-Normed-ℝ-Vector-Space v = v + left-unit-law-add-Normed-ℝ-Vector-Space = + left-unit-law-add-Ab ab-Normed-ℝ-Vector-Space + + right-inverse-law-add-Normed-ℝ-Vector-Space : + (v : type-Normed-ℝ-Vector-Space) → + diff-Normed-ℝ-Vector-Space v v = zero-Normed-ℝ-Vector-Space + right-inverse-law-add-Normed-ℝ-Vector-Space = + right-inverse-law-add-Ab ab-Normed-ℝ-Vector-Space + + map-norm-Normed-ℝ-Vector-Space : type-Normed-ℝ-Vector-Space → ℝ l1 + map-norm-Normed-ℝ-Vector-Space = pr1 (pr1 norm-Normed-ℝ-Vector-Space) + + nonnegative-norm-Normed-ℝ-Vector-Space : type-Normed-ℝ-Vector-Space → ℝ⁰⁺ l1 + nonnegative-norm-Normed-ℝ-Vector-Space = + nonnegative-seminorm-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space) + + dist-Normed-ℝ-Vector-Space : + type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space → ℝ l1 + dist-Normed-ℝ-Vector-Space = + dist-Seminormed-ℝ-Vector-Space seminormed-vector-space-Normed-ℝ-Vector-Space + + nonnegative-dist-Normed-ℝ-Vector-Space : + type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space → ℝ⁰⁺ l1 + nonnegative-dist-Normed-ℝ-Vector-Space = + nonnegative-dist-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space) + + triangular-Normed-ℝ-Vector-Space : + (v w : type-Normed-ℝ-Vector-Space) → + leq-ℝ + ( map-norm-Normed-ℝ-Vector-Space (add-Normed-ℝ-Vector-Space v w)) + ( map-norm-Normed-ℝ-Vector-Space v +ℝ map-norm-Normed-ℝ-Vector-Space w) + triangular-Normed-ℝ-Vector-Space = + triangular-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space) + + is-extensional-norm-Normed-ℝ-Vector-Space : + (v : type-Normed-ℝ-Vector-Space) → + map-norm-Normed-ℝ-Vector-Space v = raise-ℝ l1 zero-ℝ → + v = zero-Normed-ℝ-Vector-Space + is-extensional-norm-Normed-ℝ-Vector-Space = pr2 norm-Normed-ℝ-Vector-Space + + is-extensional-dist-Normed-ℝ-Vector-Space : + (v w : type-Normed-ℝ-Vector-Space) → + dist-Normed-ℝ-Vector-Space v w = raise-ℝ l1 zero-ℝ → + v = w + is-extensional-dist-Normed-ℝ-Vector-Space v w |v-w|=0 = + eq-is-zero-right-subtraction-Ab + ( ab-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space) + ( is-extensional-norm-Normed-ℝ-Vector-Space + ( diff-Normed-ℝ-Vector-Space v w) + ( |v-w|=0)) + + commutative-dist-Normed-ℝ-Vector-Space : + (v w : type-Normed-ℝ-Vector-Space) → + dist-Normed-ℝ-Vector-Space v w = dist-Normed-ℝ-Vector-Space w v + commutative-dist-Normed-ℝ-Vector-Space = + commutative-dist-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space) +``` + +### The metric space of a normed vector space + +```agda +module _ + {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) + where + + metric-Normed-ℝ-Vector-Space : Metric l1 (set-Normed-ℝ-Vector-Space V) + metric-Normed-ℝ-Vector-Space = + ( nonnegative-dist-Normed-ℝ-Vector-Space V , + ( λ v → + similarity-reasoning-ℝ + zero-ℝ + ~ℝ raise-ℝ l1 zero-ℝ + by sim-raise-ℝ l1 zero-ℝ + ~ℝ dist-Normed-ℝ-Vector-Space V v v + by + sim-eq-ℝ + ( inv + ( is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space V) + ( v)))) , + ( λ v w → eq-ℝ⁰⁺ _ _ (commutative-dist-Normed-ℝ-Vector-Space V v w)) , + triangular-dist-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space V) , + ( λ v w 0~dvw → + is-extensional-dist-Normed-ℝ-Vector-Space V v w + ( eq-sim-ℝ + ( similarity-reasoning-ℝ + dist-Normed-ℝ-Vector-Space V v w + ~ℝ zero-ℝ + by symmetric-sim-ℝ 0~dvw + ~ℝ raise-ℝ l1 zero-ℝ + by sim-raise-ℝ l1 zero-ℝ)))) + + metric-space-Normed-ℝ-Vector-Space : Metric-Space l2 l1 + metric-space-Normed-ℝ-Vector-Space = + metric-space-Metric + ( set-Normed-ℝ-Vector-Space V) + ( metric-Normed-ℝ-Vector-Space) + + located-metric-space-Normed-ℝ-Vector-Space : Located-Metric-Space l2 l1 + located-metric-space-Normed-ℝ-Vector-Space = + located-metric-space-Metric + ( set-Normed-ℝ-Vector-Space V) + ( metric-Normed-ℝ-Vector-Space) +``` + +## Properties + +### The real numbers are a normed vector space over themselves with norm `x ↦ |x|` + +```agda +normed-real-vector-space-ℝ : + (l : Level) → Normed-ℝ-Vector-Space l (lsuc l) +normed-real-vector-space-ℝ l = + ( real-vector-space-ℝ l , + ( abs-ℝ , triangle-inequality-abs-ℝ , abs-mul-ℝ) , + λ x |x|=0 → + eq-sim-ℝ + ( similarity-reasoning-ℝ + x + ~ℝ zero-ℝ + by + sim-zero-sim-zero-abs-ℝ x + ( transitive-sim-ℝ _ _ _ + ( sim-raise-ℝ' l zero-ℝ) + ( sim-eq-ℝ |x|=0)) + ~ℝ raise-ℝ l zero-ℝ + by sim-raise-ℝ l zero-ℝ)) + +abstract + eq-metric-space-normed-real-vector-space-metric-space-ℝ : + (l : Level) → + metric-space-Normed-ℝ-Vector-Space (normed-real-vector-space-ℝ l) = + metric-space-ℝ l + eq-metric-space-normed-real-vector-space-metric-space-ℝ l = + eq-isometric-eq-Metric-Space _ _ + ( refl , λ d x y → inv-iff (neighborhood-iff-leq-dist-ℝ d x y)) +``` + +### Negation is an isometry in the metric space of a normed vector space + +```agda +module _ + {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) + where + + abstract + is-isometry-neg-Normed-ℝ-Vector-Space : + is-isometry-Metric-Space + ( metric-space-Normed-ℝ-Vector-Space V) + ( metric-space-Normed-ℝ-Vector-Space V) + ( neg-Normed-ℝ-Vector-Space V) + is-isometry-neg-Normed-ℝ-Vector-Space = + is-isometry-sim-metric-Metric-Space + ( metric-space-Normed-ℝ-Vector-Space V) + ( metric-space-Normed-ℝ-Vector-Space V) + ( nonnegative-dist-Normed-ℝ-Vector-Space V) + ( nonnegative-dist-Normed-ℝ-Vector-Space V) + ( is-metric-metric-space-Metric + ( set-Normed-ℝ-Vector-Space V) + ( metric-Normed-ℝ-Vector-Space V)) + ( is-metric-metric-space-Metric + ( set-Normed-ℝ-Vector-Space V) + ( metric-Normed-ℝ-Vector-Space V)) + ( neg-Normed-ℝ-Vector-Space V) + ( λ x y → + sim-eq-ℝ + ( inv + ( equational-reasoning + dist-Normed-ℝ-Vector-Space V + ( neg-Normed-ℝ-Vector-Space V x) + ( neg-Normed-ℝ-Vector-Space V y) + = dist-Normed-ℝ-Vector-Space V y x + by + ap + ( map-norm-Normed-ℝ-Vector-Space V) + ( right-subtraction-neg-Ab + ( ab-Normed-ℝ-Vector-Space V) + ( _) + ( _)) + = dist-Normed-ℝ-Vector-Space V x y + by commutative-dist-Normed-ℝ-Vector-Space V y x))) +``` + +### Addition is an isometry in the metric space of a normed vector space + +```agda +module _ + {l1 l2 : Level} + (V : Normed-ℝ-Vector-Space l1 l2) + (u : type-Normed-ℝ-Vector-Space V) + where + + abstract + is-isometry-left-add-Normed-ℝ-Vector-Space : + is-isometry-Metric-Space + ( metric-space-Normed-ℝ-Vector-Space V) + ( metric-space-Normed-ℝ-Vector-Space V) + ( add-Normed-ℝ-Vector-Space V u) + is-isometry-left-add-Normed-ℝ-Vector-Space = + is-isometry-sim-metric-Metric-Space + ( metric-space-Normed-ℝ-Vector-Space V) + ( metric-space-Normed-ℝ-Vector-Space V) + ( nonnegative-dist-Normed-ℝ-Vector-Space V) + ( nonnegative-dist-Normed-ℝ-Vector-Space V) + ( is-metric-metric-space-Metric + ( set-Normed-ℝ-Vector-Space V) + ( metric-Normed-ℝ-Vector-Space V)) + ( is-metric-metric-space-Metric + ( set-Normed-ℝ-Vector-Space V) + ( metric-Normed-ℝ-Vector-Space V)) + ( add-Normed-ℝ-Vector-Space V u) + ( λ v w → + sim-eq-ℝ + ( ap + ( map-norm-Normed-ℝ-Vector-Space V) + ( inv + ( right-subtraction-left-add-Ab + ( ab-Normed-ℝ-Vector-Space V) + ( u) + ( v) + ( w))))) +``` + +### The norm of the zero vector is zero + +```agda +module _ + {l1 l2 : Level} + (V : Normed-ℝ-Vector-Space l1 l2) + where + + abstract + is-zero-norm-zero-Normed-ℝ-Vector-Space : + map-norm-Normed-ℝ-Vector-Space V (zero-Normed-ℝ-Vector-Space V) = + raise-ℝ l1 zero-ℝ + is-zero-norm-zero-Normed-ℝ-Vector-Space = + is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space + ( seminormed-vector-space-Normed-ℝ-Vector-Space V) +``` diff --git a/src/linear-algebra/real-banach-spaces.lagda.md b/src/linear-algebra/real-banach-spaces.lagda.md new file mode 100644 index 0000000000..8686f1c2fb --- /dev/null +++ b/src/linear-algebra/real-banach-spaces.lagda.md @@ -0,0 +1,142 @@ +# Real Banach spaces + +```agda +{-# OPTIONS --lossy-unification #-} + +module linear-algebra.real-banach-spaces where +``` + +
Imports + +```agda +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.propositions +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import linear-algebra.normed-real-vector-spaces + +open import lists.sequences + +open import metric-spaces.cauchy-sequences-complete-metric-spaces +open import metric-spaces.cauchy-sequences-metric-spaces +open import metric-spaces.complete-metric-spaces +open import metric-spaces.limits-of-sequences-metric-spaces +open import metric-spaces.metric-spaces + +open import real-numbers.cauchy-completeness-dedekind-real-numbers +open import real-numbers.dedekind-real-numbers +``` + +
+ +## Idea + +A real +{{#concept "Banach space" WDID=Q194397 WD="Banach space" Disambiguation="over the real numbers" Agda=ℝ-Banach-Space}} +is a [normed](linear-algebra.normed-real-vector-spaces.md) +[real vector space](linear-algebra.real-vector-spaces.md) such that the +[metric space](metric-spaces.metric-spaces.md) induced by the norm is +[complete](metric-spaces.complete-metric-spaces.md). + +## Definition + +```agda +is-banach-prop-Normed-ℝ-Vector-Space : + {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) → Prop (l1 ⊔ l2) +is-banach-prop-Normed-ℝ-Vector-Space V = + is-complete-prop-Metric-Space (metric-space-Normed-ℝ-Vector-Space V) + +is-banach-Normed-ℝ-Vector-Space : + {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) → UU (l1 ⊔ l2) +is-banach-Normed-ℝ-Vector-Space V = + type-Prop (is-banach-prop-Normed-ℝ-Vector-Space V) + +ℝ-Banach-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) +ℝ-Banach-Space l1 l2 = + type-subtype (is-banach-prop-Normed-ℝ-Vector-Space {l1} {l2}) + +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + where + + normed-vector-space-ℝ-Banach-Space : Normed-ℝ-Vector-Space l1 l2 + normed-vector-space-ℝ-Banach-Space = pr1 V + + metric-space-ℝ-Banach-Space : Metric-Space l2 l1 + metric-space-ℝ-Banach-Space = + metric-space-Normed-ℝ-Vector-Space normed-vector-space-ℝ-Banach-Space + + is-complete-metric-space-ℝ-Banach-Space : + is-complete-Metric-Space metric-space-ℝ-Banach-Space + is-complete-metric-space-ℝ-Banach-Space = pr2 V + + complete-metric-space-ℝ-Banach-Space : Complete-Metric-Space l2 l1 + complete-metric-space-ℝ-Banach-Space = + ( metric-space-ℝ-Banach-Space , is-complete-metric-space-ℝ-Banach-Space) + + type-ℝ-Banach-Space : UU l2 + type-ℝ-Banach-Space = + type-Normed-ℝ-Vector-Space normed-vector-space-ℝ-Banach-Space + + map-norm-ℝ-Banach-Space : type-ℝ-Banach-Space → ℝ l1 + map-norm-ℝ-Banach-Space = + map-norm-Normed-ℝ-Vector-Space normed-vector-space-ℝ-Banach-Space + + cauchy-sequence-ℝ-Banach-Space : UU (l1 ⊔ l2) + cauchy-sequence-ℝ-Banach-Space = + cauchy-sequence-Metric-Space metric-space-ℝ-Banach-Space + + is-cauchy-sequence-ℝ-Banach-Space : + sequence type-ℝ-Banach-Space → UU l1 + is-cauchy-sequence-ℝ-Banach-Space = + is-cauchy-sequence-Metric-Space metric-space-ℝ-Banach-Space + + map-cauchy-sequence-ℝ-Banach-Space : + cauchy-sequence-ℝ-Banach-Space → sequence type-ℝ-Banach-Space + map-cauchy-sequence-ℝ-Banach-Space = pr1 + + has-limit-sequence-ℝ-Banach-Space : + sequence type-ℝ-Banach-Space → UU (l1 ⊔ l2) + has-limit-sequence-ℝ-Banach-Space = + has-limit-sequence-Metric-Space metric-space-ℝ-Banach-Space + + has-limit-cauchy-sequence-ℝ-Banach-Space : + (σ : cauchy-sequence-ℝ-Banach-Space) → + has-limit-sequence-ℝ-Banach-Space (map-cauchy-sequence-ℝ-Banach-Space σ) + has-limit-cauchy-sequence-ℝ-Banach-Space = + has-limit-cauchy-sequence-Complete-Metric-Space + ( complete-metric-space-ℝ-Banach-Space) + + dist-ℝ-Banach-Space : (u v : type-ℝ-Banach-Space) → ℝ l1 + dist-ℝ-Banach-Space = + dist-Normed-ℝ-Vector-Space normed-vector-space-ℝ-Banach-Space + + commutative-dist-ℝ-Banach-Space : + (u v : type-ℝ-Banach-Space) → + dist-ℝ-Banach-Space u v = dist-ℝ-Banach-Space v u + commutative-dist-ℝ-Banach-Space = + commutative-dist-Normed-ℝ-Vector-Space normed-vector-space-ℝ-Banach-Space + + diff-ℝ-Banach-Space : + type-ℝ-Banach-Space → type-ℝ-Banach-Space → type-ℝ-Banach-Space + diff-ℝ-Banach-Space = + diff-Normed-ℝ-Vector-Space normed-vector-space-ℝ-Banach-Space +``` + +## Properties + +### The real numbers are a real Banach space with norm `x ↦ |x|` + +```agda +real-banach-space-ℝ : (l : Level) → ℝ-Banach-Space l (lsuc l) +real-banach-space-ℝ l = + ( normed-real-vector-space-ℝ l , + inv-tr + ( is-complete-Metric-Space) + ( eq-metric-space-normed-real-vector-space-metric-space-ℝ l) + ( is-complete-metric-space-ℝ l)) +``` diff --git a/src/linear-algebra/real-vector-spaces.lagda.md b/src/linear-algebra/real-vector-spaces.lagda.md new file mode 100644 index 0000000000..79e1d71d95 --- /dev/null +++ b/src/linear-algebra/real-vector-spaces.lagda.md @@ -0,0 +1,248 @@ +# Real vector spaces + +```agda +{-# OPTIONS --lossy-unification #-} + +module linear-algebra.real-vector-spaces where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-functions +open import foundation.identity-types +open import foundation.sets +open import foundation.subtypes +open import foundation.universe-levels + +open import group-theory.abelian-groups +open import group-theory.multiples-of-elements-abelian-groups + +open import linear-algebra.vector-spaces + +open import real-numbers.addition-real-numbers +open import real-numbers.dedekind-real-numbers +open import real-numbers.local-ring-of-real-numbers +open import real-numbers.multiplication-real-numbers +open import real-numbers.negation-real-numbers +open import real-numbers.raising-universe-levels-real-numbers +open import real-numbers.rational-real-numbers +``` + +
+ +## Idea + +A +{{#concept "real vector space" WD="real vector space" WDID=Q46996054 Agda=ℝ-Vector-Space}} +is a [vector space](linear-algebra.vector-spaces.md) over the +[local commutative ring of real numbers](real-numbers.local-ring-of-real-numbers.md). + +## Definition + +```agda +ℝ-Vector-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) +ℝ-Vector-Space l1 l2 = Vector-Space l2 (local-commutative-ring-ℝ l1) +``` + +## Properties + +```agda +module _ + {l1 l2 : Level} (V : ℝ-Vector-Space l1 l2) + where + + ab-ℝ-Vector-Space : Ab l2 + ab-ℝ-Vector-Space = ab-Vector-Space (local-commutative-ring-ℝ l1) V + + set-ℝ-Vector-Space : Set l2 + set-ℝ-Vector-Space = set-Ab ab-ℝ-Vector-Space + + type-ℝ-Vector-Space : UU l2 + type-ℝ-Vector-Space = type-Ab ab-ℝ-Vector-Space + + add-ℝ-Vector-Space : + type-ℝ-Vector-Space → type-ℝ-Vector-Space → type-ℝ-Vector-Space + add-ℝ-Vector-Space = add-Ab ab-ℝ-Vector-Space + + zero-ℝ-Vector-Space : type-ℝ-Vector-Space + zero-ℝ-Vector-Space = zero-Ab ab-ℝ-Vector-Space + + is-zero-prop-ℝ-Vector-Space : subtype l2 type-ℝ-Vector-Space + is-zero-prop-ℝ-Vector-Space = is-zero-prop-Ab ab-ℝ-Vector-Space + + is-zero-ℝ-Vector-Space : type-ℝ-Vector-Space → UU l2 + is-zero-ℝ-Vector-Space = is-zero-Ab ab-ℝ-Vector-Space + + neg-ℝ-Vector-Space : type-ℝ-Vector-Space → type-ℝ-Vector-Space + neg-ℝ-Vector-Space = neg-Ab ab-ℝ-Vector-Space + + mul-ℝ-Vector-Space : ℝ l1 → type-ℝ-Vector-Space → type-ℝ-Vector-Space + mul-ℝ-Vector-Space = mul-Vector-Space (local-commutative-ring-ℝ l1) V + + diff-ℝ-Vector-Space : + type-ℝ-Vector-Space → type-ℝ-Vector-Space → type-ℝ-Vector-Space + diff-ℝ-Vector-Space v w = + add-ℝ-Vector-Space v (neg-ℝ-Vector-Space w) + + associative-add-ℝ-Vector-Space : + (v w x : type-ℝ-Vector-Space) → + add-ℝ-Vector-Space (add-ℝ-Vector-Space v w) x = + add-ℝ-Vector-Space v (add-ℝ-Vector-Space w x) + associative-add-ℝ-Vector-Space = associative-add-Ab ab-ℝ-Vector-Space + + left-unit-law-add-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → add-ℝ-Vector-Space zero-ℝ-Vector-Space v = v + left-unit-law-add-ℝ-Vector-Space = left-unit-law-add-Ab ab-ℝ-Vector-Space + + right-unit-law-add-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → add-ℝ-Vector-Space v zero-ℝ-Vector-Space = v + right-unit-law-add-ℝ-Vector-Space = right-unit-law-add-Ab ab-ℝ-Vector-Space + + left-inverse-law-add-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → + add-ℝ-Vector-Space (neg-ℝ-Vector-Space v) v = zero-ℝ-Vector-Space + left-inverse-law-add-ℝ-Vector-Space = + left-inverse-law-add-Ab ab-ℝ-Vector-Space + + right-inverse-law-add-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → + add-ℝ-Vector-Space v (neg-ℝ-Vector-Space v) = zero-ℝ-Vector-Space + right-inverse-law-add-ℝ-Vector-Space = + right-inverse-law-add-Ab ab-ℝ-Vector-Space + + commutative-add-ℝ-Vector-Space : + (v w : type-ℝ-Vector-Space) → + add-ℝ-Vector-Space v w = add-ℝ-Vector-Space w v + commutative-add-ℝ-Vector-Space = commutative-add-Ab ab-ℝ-Vector-Space + + add-diff-ℝ-Vector-Space : + (v w x : type-ℝ-Vector-Space) → + add-ℝ-Vector-Space (diff-ℝ-Vector-Space v w) (diff-ℝ-Vector-Space w x) = + diff-ℝ-Vector-Space v x + add-diff-ℝ-Vector-Space = add-right-subtraction-Ab ab-ℝ-Vector-Space + + neg-neg-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → neg-ℝ-Vector-Space (neg-ℝ-Vector-Space v) = v + neg-neg-ℝ-Vector-Space = neg-neg-Ab ab-ℝ-Vector-Space + + left-unit-law-mul-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space (raise-ℝ l1 one-ℝ) v = v + left-unit-law-mul-ℝ-Vector-Space = + left-unit-law-mul-Vector-Space (local-commutative-ring-ℝ l1) V + + left-distributive-mul-add-ℝ-Vector-Space : + (r : ℝ l1) (v w : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space r (add-ℝ-Vector-Space v w) = + add-ℝ-Vector-Space (mul-ℝ-Vector-Space r v) (mul-ℝ-Vector-Space r w) + left-distributive-mul-add-ℝ-Vector-Space = + left-distributive-mul-add-Vector-Space (local-commutative-ring-ℝ l1) V + + right-distributive-mul-add-ℝ-Vector-Space : + (r s : ℝ l1) (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space (r +ℝ s) v = + add-ℝ-Vector-Space (mul-ℝ-Vector-Space r v) (mul-ℝ-Vector-Space s v) + right-distributive-mul-add-ℝ-Vector-Space = + right-distributive-mul-add-Vector-Space (local-commutative-ring-ℝ l1) V + + associative-mul-ℝ-Vector-Space : + (r s : ℝ l1) (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space (r *ℝ s) v = + mul-ℝ-Vector-Space r (mul-ℝ-Vector-Space s v) + associative-mul-ℝ-Vector-Space = + associative-mul-Vector-Space (local-commutative-ring-ℝ l1) V + + left-zero-law-mul-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space (raise-ℝ l1 zero-ℝ) v = zero-ℝ-Vector-Space + left-zero-law-mul-ℝ-Vector-Space = + left-zero-law-mul-Vector-Space (local-commutative-ring-ℝ l1) V + + right-zero-law-mul-ℝ-Vector-Space : + (r : ℝ l1) → + mul-ℝ-Vector-Space r zero-ℝ-Vector-Space = zero-ℝ-Vector-Space + right-zero-law-mul-ℝ-Vector-Space = + right-zero-law-mul-Vector-Space (local-commutative-ring-ℝ l1) V + + left-negative-law-mul-ℝ-Vector-Space : + (r : ℝ l1) (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space (neg-ℝ r) v = + neg-ℝ-Vector-Space (mul-ℝ-Vector-Space r v) + left-negative-law-mul-ℝ-Vector-Space = + left-negative-law-mul-Vector-Space (local-commutative-ring-ℝ l1) V + + right-negative-law-mul-ℝ-Vector-Space : + (r : ℝ l1) (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space r (neg-ℝ-Vector-Space v) = + neg-ℝ-Vector-Space (mul-ℝ-Vector-Space r v) + right-negative-law-mul-ℝ-Vector-Space = + right-negative-law-mul-Vector-Space (local-commutative-ring-ℝ l1) V + + mul-neg-one-ℝ-Vector-Space : + (v : type-ℝ-Vector-Space) → + mul-ℝ-Vector-Space (neg-ℝ (raise-ℝ l1 one-ℝ)) v = neg-ℝ-Vector-Space v + mul-neg-one-ℝ-Vector-Space = + mul-neg-one-Vector-Space (local-commutative-ring-ℝ l1) V + + ap-add-ℝ-Vector-Space : + {x x' y y' : type-ℝ-Vector-Space} → x = x' → y = y' → + add-ℝ-Vector-Space x y = add-ℝ-Vector-Space x' y' + ap-add-ℝ-Vector-Space = ap-add-Ab ab-ℝ-Vector-Space +``` + +## Properties + +### Multiplication by a natural number is iterated addition + +```agda +module _ + {l1 l2 : Level} (V : ℝ-Vector-Space l1 l2) + where + + abstract + left-mul-real-ℕ-ℝ-Vector-Space : + (n : ℕ) (v : type-ℝ-Vector-Space V) → + mul-ℝ-Vector-Space V (raise-ℝ l1 (real-ℕ n)) v = + multiple-Ab (ab-ℝ-Vector-Space V) n v + left-mul-real-ℕ-ℝ-Vector-Space 0 v = + left-zero-law-mul-ℝ-Vector-Space V v + left-mul-real-ℕ-ℝ-Vector-Space 1 v = + left-unit-law-mul-ℝ-Vector-Space V v + left-mul-real-ℕ-ℝ-Vector-Space (succ-ℕ n@(succ-ℕ _)) v = + equational-reasoning + mul-ℝ-Vector-Space V (raise-ℝ l1 (real-ℕ (succ-ℕ n))) v + = mul-ℝ-Vector-Space V (raise-ℝ l1 (real-ℕ n) +ℝ raise-ℝ l1 one-ℝ) v + by + ap + ( λ c → mul-ℝ-Vector-Space V c v) + ( equational-reasoning + raise-ℝ l1 (real-ℕ (succ-ℕ n)) + = raise-ℝ l1 (real-ℕ n +ℝ one-ℝ) + by ap (raise-ℝ l1) (inv (add-real-ℕ n 1)) + = raise-ℝ l1 (real-ℕ n) +ℝ raise-ℝ l1 one-ℝ + by distributive-raise-add-ℝ l1 (real-ℕ n) one-ℝ) + = + add-ℝ-Vector-Space V + ( mul-ℝ-Vector-Space V (raise-ℝ l1 (real-ℕ n)) v) + ( mul-ℝ-Vector-Space V (raise-ℝ l1 one-ℝ) v) + by right-distributive-mul-add-ℝ-Vector-Space V _ _ _ + = + multiple-Ab (ab-ℝ-Vector-Space V) (succ-ℕ n) v + by + ap-add-ℝ-Vector-Space + ( V) + ( left-mul-real-ℕ-ℝ-Vector-Space n v) + ( left-unit-law-mul-ℝ-Vector-Space V v) +``` + +### The real numbers are a real vector space + +```agda +real-vector-space-ℝ : (l : Level) → ℝ-Vector-Space l (lsuc l) +real-vector-space-ℝ l = + vector-space-local-commutative-ring-Local-Commutative-Ring + ( local-commutative-ring-ℝ l) +``` diff --git a/src/linear-algebra/seminormed-real-vector-spaces.lagda.md b/src/linear-algebra/seminormed-real-vector-spaces.lagda.md new file mode 100644 index 0000000000..d6a562ec17 --- /dev/null +++ b/src/linear-algebra/seminormed-real-vector-spaces.lagda.md @@ -0,0 +1,608 @@ +# Seminormed real vector spaces + +```agda +{-# OPTIONS --lossy-unification #-} + +module linear-algebra.seminormed-real-vector-spaces where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-positive-rational-numbers +open import elementary-number-theory.positive-rational-numbers + +open import foundation.action-on-identifications-functions +open import foundation.binary-relations +open import foundation.conjunction +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.propositions +open import foundation.sets +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import group-theory.abelian-groups + +open import linear-algebra.real-vector-spaces + +open import metric-spaces.pseudometric-spaces + +open import order-theory.large-posets + +open import real-numbers.absolute-value-real-numbers +open import real-numbers.addition-real-numbers +open import real-numbers.dedekind-real-numbers +open import real-numbers.inequalities-addition-and-subtraction-real-numbers +open import real-numbers.inequality-real-numbers +open import real-numbers.multiplication-positive-real-numbers +open import real-numbers.multiplication-real-numbers +open import real-numbers.negation-real-numbers +open import real-numbers.nonnegative-real-numbers +open import real-numbers.positive-real-numbers +open import real-numbers.raising-universe-levels-real-numbers +open import real-numbers.rational-real-numbers +open import real-numbers.saturation-inequality-nonnegative-real-numbers +open import real-numbers.similarity-real-numbers +open import real-numbers.strict-inequality-real-numbers +``` + +
+ +## Idea + +A +{{#concept "seminorm" WDID=Q1416088 WD="seminorm" Disambiguation="on a real vector space" Agda=seminorm-ℝ-Vector-Space}} +on a [real vector space](linear-algebra.real-vector-spaces.md) `V` is a +[real](real-numbers.dedekind-real-numbers.md)-valued function `p` on the vector +space such that `p (x + y) ≤ p x + p y` for all `x` and `y` in `V`, and +`p (c * x) = |c| * p x` for all real numbers `c` and `x` in `V`. + +These conditions imply that `p 0 = 0` and that `p` is nonnegative. + +A real vector space equipped with such a seminorm is called a +{{#concept "seminormed space" WD="seminormed space" WDID=Q63793693 Agda=Seminormed-ℝ-Vector-Space}}. +A seminormed space has an induced +[pseudometric structure](metric-spaces.pseudometric-spaces.md) defined by the +neighborhood relation that `v` and `w` are in an `ε`-neighborhood of each other +if `p (v - w) ≤ ε`. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Vector-Space l1 l2) + (p : type-ℝ-Vector-Space V → ℝ l1) + where + + is-triangular-prop-seminorm-ℝ-Vector-Space : Prop (l1 ⊔ l2) + is-triangular-prop-seminorm-ℝ-Vector-Space = + Π-Prop + ( type-ℝ-Vector-Space V) + ( λ x → + Π-Prop + ( type-ℝ-Vector-Space V) + ( λ y → leq-prop-ℝ (p (add-ℝ-Vector-Space V x y)) (p x +ℝ p y))) + + is-triangular-seminorm-ℝ-Vector-Space : UU (l1 ⊔ l2) + is-triangular-seminorm-ℝ-Vector-Space = + type-Prop is-triangular-prop-seminorm-ℝ-Vector-Space + + is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space : Prop (lsuc l1 ⊔ l2) + is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space = + Π-Prop + ( ℝ l1) + ( λ c → + Π-Prop + ( type-ℝ-Vector-Space V) + ( λ x → + Id-Prop + ( ℝ-Set l1) + ( p (mul-ℝ-Vector-Space V c x)) + ( abs-ℝ c *ℝ p x))) + + is-absolutely-homogeneous-seminorm-ℝ-Vector-Space : UU (lsuc l1 ⊔ l2) + is-absolutely-homogeneous-seminorm-ℝ-Vector-Space = + type-Prop is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space + + is-seminorm-prop-ℝ-Vector-Space : Prop (lsuc l1 ⊔ l2) + is-seminorm-prop-ℝ-Vector-Space = + is-triangular-prop-seminorm-ℝ-Vector-Space ∧ + is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space + + is-seminorm-ℝ-Vector-Space : UU (lsuc l1 ⊔ l2) + is-seminorm-ℝ-Vector-Space = type-Prop is-seminorm-prop-ℝ-Vector-Space + +seminorm-ℝ-Vector-Space : + {l1 l2 : Level} → ℝ-Vector-Space l1 l2 → UU (lsuc l1 ⊔ l2) +seminorm-ℝ-Vector-Space V = + type-subtype (is-seminorm-prop-ℝ-Vector-Space V) + +Seminormed-ℝ-Vector-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) +Seminormed-ℝ-Vector-Space l1 l2 = + Σ (ℝ-Vector-Space l1 l2) seminorm-ℝ-Vector-Space +``` + +## Properties + +### Vector space properties + +```agda +module _ + {l1 l2 : Level} + (V : Seminormed-ℝ-Vector-Space l1 l2) + where + + vector-space-Seminormed-ℝ-Vector-Space : ℝ-Vector-Space l1 l2 + vector-space-Seminormed-ℝ-Vector-Space = pr1 V + + set-Seminormed-ℝ-Vector-Space : Set l2 + set-Seminormed-ℝ-Vector-Space = + set-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + type-Seminormed-ℝ-Vector-Space : UU l2 + type-Seminormed-ℝ-Vector-Space = + type-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + seminorm-Seminormed-ℝ-Vector-Space : + seminorm-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + seminorm-Seminormed-ℝ-Vector-Space = pr2 V + + map-seminorm-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space → ℝ l1 + map-seminorm-Seminormed-ℝ-Vector-Space = + pr1 seminorm-Seminormed-ℝ-Vector-Space + + zero-Seminormed-ℝ-Vector-Space : type-Seminormed-ℝ-Vector-Space + zero-Seminormed-ℝ-Vector-Space = + zero-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + is-zero-prop-Seminormed-ℝ-Vector-Space : + subtype l2 type-Seminormed-ℝ-Vector-Space + is-zero-prop-Seminormed-ℝ-Vector-Space = + is-zero-prop-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + is-zero-Seminormed-ℝ-Vector-Space : type-Seminormed-ℝ-Vector-Space → UU l2 + is-zero-Seminormed-ℝ-Vector-Space = + is-zero-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + add-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space → + type-Seminormed-ℝ-Vector-Space + add-Seminormed-ℝ-Vector-Space = + add-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + mul-Seminormed-ℝ-Vector-Space : + ℝ l1 → type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space + mul-Seminormed-ℝ-Vector-Space = + mul-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + neg-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space + neg-Seminormed-ℝ-Vector-Space = + neg-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + diff-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space → + type-Seminormed-ℝ-Vector-Space + diff-Seminormed-ℝ-Vector-Space v w = + add-Seminormed-ℝ-Vector-Space v (neg-Seminormed-ℝ-Vector-Space w) + + right-inverse-law-add-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space) → + add-Seminormed-ℝ-Vector-Space v (neg-Seminormed-ℝ-Vector-Space v) = + zero-Seminormed-ℝ-Vector-Space + right-inverse-law-add-Seminormed-ℝ-Vector-Space = + right-inverse-law-add-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + add-diff-Seminormed-ℝ-Vector-Space : + (v w x : type-Seminormed-ℝ-Vector-Space) → + add-Seminormed-ℝ-Vector-Space + ( diff-Seminormed-ℝ-Vector-Space v w) + ( diff-Seminormed-ℝ-Vector-Space w x) = + diff-Seminormed-ℝ-Vector-Space v x + add-diff-Seminormed-ℝ-Vector-Space = + add-diff-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + neg-neg-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space) → + neg-Seminormed-ℝ-Vector-Space (neg-Seminormed-ℝ-Vector-Space v) = v + neg-neg-Seminormed-ℝ-Vector-Space = + neg-neg-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + left-zero-law-mul-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space) → + mul-Seminormed-ℝ-Vector-Space (raise-ℝ l1 zero-ℝ) v = + zero-Seminormed-ℝ-Vector-Space + left-zero-law-mul-Seminormed-ℝ-Vector-Space = + left-zero-law-mul-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + mul-neg-one-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space) → + mul-Seminormed-ℝ-Vector-Space (neg-ℝ (raise-ℝ l1 one-ℝ)) v = + neg-Seminormed-ℝ-Vector-Space v + mul-neg-one-Seminormed-ℝ-Vector-Space = + mul-neg-one-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space + + distributive-neg-diff-Seminormed-ℝ-Vector-Space : + (v w : type-Seminormed-ℝ-Vector-Space) → + neg-Seminormed-ℝ-Vector-Space (diff-Seminormed-ℝ-Vector-Space v w) = + diff-Seminormed-ℝ-Vector-Space w v + distributive-neg-diff-Seminormed-ℝ-Vector-Space = + neg-right-subtraction-Ab + ( ab-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space) + + triangular-Seminormed-ℝ-Vector-Space : + (v w : type-Seminormed-ℝ-Vector-Space) → + leq-ℝ + ( map-seminorm-Seminormed-ℝ-Vector-Space + ( add-Seminormed-ℝ-Vector-Space v w)) + ( map-seminorm-Seminormed-ℝ-Vector-Space v +ℝ + map-seminorm-Seminormed-ℝ-Vector-Space w) + triangular-Seminormed-ℝ-Vector-Space = + pr1 (pr2 seminorm-Seminormed-ℝ-Vector-Space) + + is-absolutely-homogeneous-Seminormed-ℝ-Vector-Space : + (c : ℝ l1) (v : type-Seminormed-ℝ-Vector-Space) → + map-seminorm-Seminormed-ℝ-Vector-Space + ( mul-Seminormed-ℝ-Vector-Space c v) = + abs-ℝ c *ℝ map-seminorm-Seminormed-ℝ-Vector-Space v + is-absolutely-homogeneous-Seminormed-ℝ-Vector-Space = + pr2 (pr2 seminorm-Seminormed-ℝ-Vector-Space) + + dist-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space → ℝ l1 + dist-Seminormed-ℝ-Vector-Space v w = + map-seminorm-Seminormed-ℝ-Vector-Space + ( diff-Seminormed-ℝ-Vector-Space v w) +``` + +### The seminorm of the zero vector in a seminormed real vector space is zero + +```agda +module _ + {l1 l2 : Level} + (V : Seminormed-ℝ-Vector-Space l1 l2) + where + + abstract + is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space : + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( zero-Seminormed-ℝ-Vector-Space V) = + raise-ℝ l1 zero-ℝ + is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space = + eq-sim-ℝ + ( similarity-reasoning-ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( zero-Seminormed-ℝ-Vector-Space V) + ~ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( mul-Seminormed-ℝ-Vector-Space + ( V) + ( raise-ℝ l1 zero-ℝ) + ( zero-Seminormed-ℝ-Vector-Space V)) + by + sim-eq-ℝ + ( ap + ( map-seminorm-Seminormed-ℝ-Vector-Space V) + ( inv (left-zero-law-mul-Seminormed-ℝ-Vector-Space V _))) + ~ℝ + abs-ℝ (raise-ℝ l1 zero-ℝ) *ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( zero-Seminormed-ℝ-Vector-Space V) + by + sim-eq-ℝ + ( is-absolutely-homogeneous-Seminormed-ℝ-Vector-Space V _ _) + ~ℝ + abs-ℝ zero-ℝ *ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( zero-Seminormed-ℝ-Vector-Space V) + by + preserves-sim-right-mul-ℝ _ _ _ + ( preserves-sim-abs-ℝ (sim-raise-ℝ' l1 zero-ℝ)) + ~ℝ + zero-ℝ *ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( zero-Seminormed-ℝ-Vector-Space V) + by sim-eq-ℝ (ap-mul-ℝ abs-zero-ℝ refl) + ~ℝ zero-ℝ + by left-zero-law-mul-ℝ _ + ~ℝ raise-ℝ l1 zero-ℝ + by sim-raise-ℝ l1 zero-ℝ) + + is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space V) → + dist-Seminormed-ℝ-Vector-Space V v v = raise-ℝ l1 zero-ℝ + is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space v = + ( ap + ( map-seminorm-Seminormed-ℝ-Vector-Space V) + ( right-inverse-law-add-Seminormed-ℝ-Vector-Space V v)) ∙ + ( is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space) +``` + +### The seminorm of the negation of a vector is equal to the seminorm of the vector + +```agda +module _ + {l1 l2 : Level} + (V : Seminormed-ℝ-Vector-Space l1 l2) + where + + abstract + seminorm-neg-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space V) → + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( neg-Seminormed-ℝ-Vector-Space V v) = + map-seminorm-Seminormed-ℝ-Vector-Space V v + seminorm-neg-Seminormed-ℝ-Vector-Space v = + eq-sim-ℝ + ( similarity-reasoning-ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( neg-Seminormed-ℝ-Vector-Space V v) + ~ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( mul-Seminormed-ℝ-Vector-Space + ( V) + ( neg-ℝ (raise-ℝ l1 one-ℝ)) + ( v)) + by + sim-eq-ℝ + ( ap + ( map-seminorm-Seminormed-ℝ-Vector-Space V) + ( inv (mul-neg-one-Seminormed-ℝ-Vector-Space V v))) + ~ℝ + abs-ℝ (neg-ℝ (raise-ℝ l1 one-ℝ)) *ℝ + map-seminorm-Seminormed-ℝ-Vector-Space V v + by + sim-eq-ℝ + ( is-absolutely-homogeneous-Seminormed-ℝ-Vector-Space V _ _) + ~ℝ + abs-ℝ (raise-ℝ l1 one-ℝ) *ℝ + map-seminorm-Seminormed-ℝ-Vector-Space V v + by sim-eq-ℝ (ap-mul-ℝ (abs-neg-ℝ _) refl) + ~ℝ abs-ℝ one-ℝ *ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v + by + preserves-sim-right-mul-ℝ _ _ _ + ( preserves-sim-abs-ℝ (sim-raise-ℝ' l1 one-ℝ)) + ~ℝ one-ℝ *ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v + by + sim-eq-ℝ (ap-mul-ℝ (abs-real-ℝ⁺ one-ℝ⁺) refl) + ~ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v + by sim-eq-ℝ (left-unit-law-mul-ℝ _)) + + commutative-dist-Seminormed-ℝ-Vector-Space : + (v w : type-Seminormed-ℝ-Vector-Space V) → + dist-Seminormed-ℝ-Vector-Space V v w = + dist-Seminormed-ℝ-Vector-Space V w v + commutative-dist-Seminormed-ℝ-Vector-Space v w = + ( inv + ( ap + ( map-seminorm-Seminormed-ℝ-Vector-Space V) + ( distributive-neg-diff-Seminormed-ℝ-Vector-Space V w v))) ∙ + ( seminorm-neg-Seminormed-ℝ-Vector-Space _) +``` + +### The distance function on a seminormed vector space satisfies the triangle inequality + +```agda +module _ + {l1 l2 : Level} + (V : Seminormed-ℝ-Vector-Space l1 l2) + where + + abstract + triangular-dist-Seminormed-ℝ-Vector-Space : + (v w x : type-Seminormed-ℝ-Vector-Space V) → + leq-ℝ + ( dist-Seminormed-ℝ-Vector-Space V v x) + ( dist-Seminormed-ℝ-Vector-Space V v w +ℝ + dist-Seminormed-ℝ-Vector-Space V w x) + triangular-dist-Seminormed-ℝ-Vector-Space v w x = + let + open inequality-reasoning-Large-Poset ℝ-Large-Poset + in + chain-of-inequalities + dist-Seminormed-ℝ-Vector-Space V v x + ≤ map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( add-Seminormed-ℝ-Vector-Space + ( V) + ( diff-Seminormed-ℝ-Vector-Space V v w) + ( diff-Seminormed-ℝ-Vector-Space V w x)) + by + leq-eq-ℝ + ( ap + ( map-seminorm-Seminormed-ℝ-Vector-Space V) + ( inv (add-diff-Seminormed-ℝ-Vector-Space V v w x))) + ≤ dist-Seminormed-ℝ-Vector-Space V v w +ℝ + dist-Seminormed-ℝ-Vector-Space V w x + by triangular-Seminormed-ℝ-Vector-Space V _ _ +``` + +### The seminorm of a vector in a seminormed vector space is nonnegative + +```agda +module _ + {l1 l2 : Level} + (V : Seminormed-ℝ-Vector-Space l1 l2) + where + + abstract + is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space : + (v : type-Seminormed-ℝ-Vector-Space V) → + is-nonnegative-ℝ (map-seminorm-Seminormed-ℝ-Vector-Space V v) + is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space v = + let + open inequality-reasoning-Large-Poset ℝ-Large-Poset + in + reflects-leq-left-mul-ℝ⁺ + ( positive-real-ℕ⁺ (2 , λ ())) + ( zero-ℝ) + ( map-seminorm-Seminormed-ℝ-Vector-Space V v) + ( chain-of-inequalities + real-ℝ⁺ (positive-real-ℕ⁺ (2 , (λ ()))) *ℝ zero-ℝ + ≤ zero-ℝ + by leq-sim-ℝ (right-zero-law-mul-ℝ _) + ≤ raise-ℝ l1 zero-ℝ + by leq-sim-ℝ (sim-raise-ℝ l1 zero-ℝ) + ≤ dist-Seminormed-ℝ-Vector-Space V v v + by + leq-eq-ℝ + ( inv (is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space V v)) + ≤ map-seminorm-Seminormed-ℝ-Vector-Space V v +ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( neg-Seminormed-ℝ-Vector-Space V v) + by triangular-Seminormed-ℝ-Vector-Space V _ _ + ≤ map-seminorm-Seminormed-ℝ-Vector-Space V v +ℝ + map-seminorm-Seminormed-ℝ-Vector-Space V v + by + leq-eq-ℝ + ( ap-add-ℝ + ( refl) + ( seminorm-neg-Seminormed-ℝ-Vector-Space V v)) + ≤ real-ℕ 2 *ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v + by leq-eq-ℝ (inv (left-mul-real-ℕ 2 _))) + + nonnegative-seminorm-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space V → ℝ⁰⁺ l1 + nonnegative-seminorm-Seminormed-ℝ-Vector-Space v = + ( map-seminorm-Seminormed-ℝ-Vector-Space V v , + is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space v) +``` + +### The pseudometric space induced by a seminorm + +```agda +module _ + {l1 l2 : Level} (V : Seminormed-ℝ-Vector-Space l1 l2) + where + + nonnegative-dist-Seminormed-ℝ-Vector-Space : + type-Seminormed-ℝ-Vector-Space V → type-Seminormed-ℝ-Vector-Space V → ℝ⁰⁺ l1 + nonnegative-dist-Seminormed-ℝ-Vector-Space v w = + ( dist-Seminormed-ℝ-Vector-Space V v w , + is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space V _) + + neighborhood-prop-Seminormed-ℝ-Vector-Space : + ℚ⁺ → Relation-Prop l1 (type-Seminormed-ℝ-Vector-Space V) + neighborhood-prop-Seminormed-ℝ-Vector-Space ε v w = + leq-prop-ℝ + ( dist-Seminormed-ℝ-Vector-Space V v w) + ( real-ℚ⁺ ε) + + neighborhood-Seminormed-ℝ-Vector-Space : + ℚ⁺ → Relation l1 (type-Seminormed-ℝ-Vector-Space V) + neighborhood-Seminormed-ℝ-Vector-Space d = + type-Relation-Prop (neighborhood-prop-Seminormed-ℝ-Vector-Space d) + + abstract + refl-neighborhood-Seminormed-ℝ-Vector-Space : + (ε : ℚ⁺) (v : type-Seminormed-ℝ-Vector-Space V) → + neighborhood-Seminormed-ℝ-Vector-Space ε v v + refl-neighborhood-Seminormed-ℝ-Vector-Space ε v = + leq-le-ℝ + ( preserves-le-left-sim-ℝ + ( real-ℚ⁺ ε) + ( zero-ℝ) + ( dist-Seminormed-ℝ-Vector-Space V v v) + ( similarity-reasoning-ℝ + zero-ℝ + ~ℝ raise-ℝ l1 zero-ℝ + by sim-raise-ℝ l1 zero-ℝ + ~ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( zero-Seminormed-ℝ-Vector-Space V) + by + sim-eq-ℝ + ( inv (is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space V)) + ~ℝ + map-seminorm-Seminormed-ℝ-Vector-Space + ( V) + ( diff-Seminormed-ℝ-Vector-Space V v v) + by + sim-eq-ℝ + ( ap + ( map-seminorm-Seminormed-ℝ-Vector-Space V) + ( inv + ( right-inverse-law-add-Seminormed-ℝ-Vector-Space V v)))) + ( preserves-is-positive-real-ℚ (is-positive-rational-ℚ⁺ ε))) + + symmetric-neighborhood-Seminormed-ℝ-Vector-Space : + (d : ℚ⁺) (v w : type-Seminormed-ℝ-Vector-Space V) → + neighborhood-Seminormed-ℝ-Vector-Space d v w → + neighborhood-Seminormed-ℝ-Vector-Space d w v + symmetric-neighborhood-Seminormed-ℝ-Vector-Space d v w = + tr + ( λ z → leq-ℝ z (real-ℚ⁺ d)) + ( commutative-dist-Seminormed-ℝ-Vector-Space V v w) + + triangular-neighborhood-Seminormed-ℝ-Vector-Space : + (v w x : type-Seminormed-ℝ-Vector-Space V) (d1 d2 : ℚ⁺) → + neighborhood-Seminormed-ℝ-Vector-Space d2 w x → + neighborhood-Seminormed-ℝ-Vector-Space d1 v w → + neighborhood-Seminormed-ℝ-Vector-Space (d1 +ℚ⁺ d2) v x + triangular-neighborhood-Seminormed-ℝ-Vector-Space + v w x d1 d2 Nd2wx Nd1vw = + let + open inequality-reasoning-Large-Poset ℝ-Large-Poset + in + chain-of-inequalities + dist-Seminormed-ℝ-Vector-Space V v x + ≤ dist-Seminormed-ℝ-Vector-Space V v w +ℝ + dist-Seminormed-ℝ-Vector-Space V w x + by triangular-dist-Seminormed-ℝ-Vector-Space V v w x + ≤ real-ℚ⁺ d1 +ℝ real-ℚ⁺ d2 + by preserves-leq-add-ℝ Nd1vw Nd2wx + ≤ real-ℚ⁺ (d1 +ℚ⁺ d2) + by leq-eq-ℝ (add-real-ℚ _ _) + + saturated-neighborhood-Seminormed-ℝ-Vector-Space : + (d : ℚ⁺) (v w : type-Seminormed-ℝ-Vector-Space V) → + ((δ : ℚ⁺) → neighborhood-Seminormed-ℝ-Vector-Space (d +ℚ⁺ δ) v w) → + neighborhood-Seminormed-ℝ-Vector-Space d v w + saturated-neighborhood-Seminormed-ℝ-Vector-Space d v w H = + saturated-leq-ℝ⁰⁺ + ( nonnegative-dist-Seminormed-ℝ-Vector-Space v w) + ( nonnegative-real-ℚ⁺ d) + ( λ δ → + inv-tr + ( leq-ℝ (dist-Seminormed-ℝ-Vector-Space V v w)) + ( add-real-ℚ _ _) + ( H δ)) + + pseudometric-structure-Seminormed-ℝ-Vector-Space : + Pseudometric-Structure l1 (type-Seminormed-ℝ-Vector-Space V) + pseudometric-structure-Seminormed-ℝ-Vector-Space = + ( neighborhood-prop-Seminormed-ℝ-Vector-Space , + refl-neighborhood-Seminormed-ℝ-Vector-Space , + symmetric-neighborhood-Seminormed-ℝ-Vector-Space , + triangular-neighborhood-Seminormed-ℝ-Vector-Space , + saturated-neighborhood-Seminormed-ℝ-Vector-Space) + + pseudometric-space-Seminormed-ℝ-Vector-Space : Pseudometric-Space l2 l1 + pseudometric-space-Seminormed-ℝ-Vector-Space = + ( type-Seminormed-ℝ-Vector-Space V , + pseudometric-structure-Seminormed-ℝ-Vector-Space) +``` + +### The real numbers are a seminormed vector space over themselves with seminorm `x ↦ |x|` + +```agda +seminormed-real-vector-space-ℝ : + (l : Level) → Seminormed-ℝ-Vector-Space l (lsuc l) +seminormed-real-vector-space-ℝ l = + ( real-vector-space-ℝ l , abs-ℝ , triangle-inequality-abs-ℝ , abs-mul-ℝ) +``` diff --git a/src/linear-algebra/sums-of-finite-sequences-of-elements-normed-real-vector-spaces.lagda.md b/src/linear-algebra/sums-of-finite-sequences-of-elements-normed-real-vector-spaces.lagda.md new file mode 100644 index 0000000000..3bdbe8634c --- /dev/null +++ b/src/linear-algebra/sums-of-finite-sequences-of-elements-normed-real-vector-spaces.lagda.md @@ -0,0 +1,94 @@ +# Sums of finite sequences of elements in normed real vector spaces + +```agda +module linear-algebra.sums-of-finite-sequences-of-elements-normed-real-vector-spaces where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.function-types +open import foundation.universe-levels + +open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups + +open import linear-algebra.normed-real-vector-spaces + +open import lists.finite-sequences + +open import order-theory.large-posets + +open import real-numbers.addition-real-numbers +open import real-numbers.dedekind-real-numbers +open import real-numbers.inequalities-addition-and-subtraction-real-numbers +open import real-numbers.inequality-real-numbers +open import real-numbers.sums-of-finite-sequences-of-real-numbers + +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +The +{{#concept "sum" Disambiguation="of a finite sequence of elements of a normed vector space over ℝ" Agda=sum-fin-sequence-type-Normed-ℝ-Vector-Space}} +of a [finite sequence](lists.finite-sequences.md) of elements of a +[normed vector space](linear-algebra.normed-real-vector-spaces.md) over the +[real numbers](real-numbers.dedekind-real-numbers.md) is the +[sum of the sequence](group-theory.sums-of-finite-sequences-of-elements-abelian-groups.md) +in the [abelian group](group-theory.abelian-groups.md) of the vector space under +addition. + +## Definition + +```agda +sum-fin-sequence-type-Normed-ℝ-Vector-Space : + {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) (n : ℕ) → + fin-sequence (type-Normed-ℝ-Vector-Space V) n → type-Normed-ℝ-Vector-Space V +sum-fin-sequence-type-Normed-ℝ-Vector-Space V = + sum-fin-sequence-type-Ab (ab-Normed-ℝ-Vector-Space V) +``` + +## Properties + +### The norm of the sum of a finite sequence is at most the sum of the norms of the terms of the sequence + +```agda +module _ + {l1 l2 : Level} + (V : Normed-ℝ-Vector-Space l1 l2) + where + + abstract + triangle-inequality-norm-sum-fin-sequence-type-Normed-ℝ-Vector-Space : + (n : ℕ) (σ : fin-sequence (type-Normed-ℝ-Vector-Space V) n) → + leq-ℝ + ( map-norm-Normed-ℝ-Vector-Space V + ( sum-fin-sequence-type-Normed-ℝ-Vector-Space V n σ)) + ( sum-fin-sequence-ℝ n (map-norm-Normed-ℝ-Vector-Space V ∘ σ)) + triangle-inequality-norm-sum-fin-sequence-type-Normed-ℝ-Vector-Space 0 σ = + leq-eq-ℝ (is-zero-norm-zero-Normed-ℝ-Vector-Space V) + triangle-inequality-norm-sum-fin-sequence-type-Normed-ℝ-Vector-Space + (succ-ℕ n) σ = + let + open inequality-reasoning-Large-Poset ℝ-Large-Poset + in + chain-of-inequalities + map-norm-Normed-ℝ-Vector-Space V + ( sum-fin-sequence-type-Normed-ℝ-Vector-Space V (succ-ℕ n) σ) + ≤ ( map-norm-Normed-ℝ-Vector-Space V + ( sum-fin-sequence-type-Normed-ℝ-Vector-Space V + ( n) + ( σ ∘ inl-Fin n))) +ℝ + ( map-norm-Normed-ℝ-Vector-Space V (σ (neg-one-Fin n))) + by triangular-Normed-ℝ-Vector-Space V _ _ + ≤ sum-fin-sequence-ℝ (succ-ℕ n) (map-norm-Normed-ℝ-Vector-Space V ∘ σ) + by + preserves-leq-right-add-ℝ _ _ _ + ( triangle-inequality-norm-sum-fin-sequence-type-Normed-ℝ-Vector-Space + ( n) + ( σ ∘ inl-Fin n)) +``` diff --git a/src/linear-algebra/sums-of-finite-sequences-of-elements-real-banach-spaces.lagda.md b/src/linear-algebra/sums-of-finite-sequences-of-elements-real-banach-spaces.lagda.md new file mode 100644 index 0000000000..ba3aa4cac9 --- /dev/null +++ b/src/linear-algebra/sums-of-finite-sequences-of-elements-real-banach-spaces.lagda.md @@ -0,0 +1,67 @@ +# Sums of finite sequences of elements in real Banach spaces + +```agda +module linear-algebra.sums-of-finite-sequences-of-elements-real-banach-spaces where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.function-types +open import foundation.universe-levels + +open import linear-algebra.real-banach-spaces +open import linear-algebra.sums-of-finite-sequences-of-elements-normed-real-vector-spaces + +open import lists.finite-sequences + +open import real-numbers.inequality-real-numbers +open import real-numbers.sums-of-finite-sequences-of-real-numbers +``` + +
+ +## Idea + +The +{{#concept "sum" Disambiguation="of a finite sequence of elements of a real Banach space" Agda=sum-fin-sequence-type-ℝ-Banach-Space}} +of a [finite sequence](lists.finite-sequences.md) of elements of a +[real Banach space](linear-algebra.real-banach-spaces.md) is the +[sum of the sequence](group-theory.sums-of-finite-sequences-of-elements-abelian-groups.md) +in the [abelian group](group-theory.abelian-groups.md) of the space under +addition. + +## Definition + +```agda +sum-fin-sequence-type-ℝ-Banach-Space : + {l1 l2 : Level} (V : ℝ-Banach-Space l1 l2) → + (n : ℕ) → fin-sequence (type-ℝ-Banach-Space V) n → type-ℝ-Banach-Space V +sum-fin-sequence-type-ℝ-Banach-Space V = + sum-fin-sequence-type-Normed-ℝ-Vector-Space + ( normed-vector-space-ℝ-Banach-Space V) +``` + +## Properties + +### The norm of the sum of a finite sequence is at most the sum of the norms of the terms of the sequence + +```agda +module _ + {l1 l2 : Level} + (V : ℝ-Banach-Space l1 l2) + where + + abstract + triangle-inequality-norm-sum-fin-sequence-type-ℝ-Banach-Space : + (n : ℕ) (σ : fin-sequence (type-ℝ-Banach-Space V) n) → + leq-ℝ + ( map-norm-ℝ-Banach-Space V + ( sum-fin-sequence-type-ℝ-Banach-Space V n σ)) + ( sum-fin-sequence-ℝ n (map-norm-ℝ-Banach-Space V ∘ σ)) + triangle-inequality-norm-sum-fin-sequence-type-ℝ-Banach-Space = + triangle-inequality-norm-sum-fin-sequence-type-Normed-ℝ-Vector-Space + ( normed-vector-space-ℝ-Banach-Space V) +``` diff --git a/src/linear-algebra/vector-spaces.lagda.md b/src/linear-algebra/vector-spaces.lagda.md new file mode 100644 index 0000000000..55c407c4c5 --- /dev/null +++ b/src/linear-algebra/vector-spaces.lagda.md @@ -0,0 +1,190 @@ +# Vector spaces + +```agda +module linear-algebra.vector-spaces where +``` + +
Imports + +```agda +open import commutative-algebra.local-commutative-rings + +open import foundation.identity-types +open import foundation.sets +open import foundation.universe-levels + +open import group-theory.abelian-groups + +open import linear-algebra.left-modules-commutative-rings +``` + +
+ +## Idea + +A {{#concept "vector space" WD="vector space" WDID=Q125977}} is a +[left module](linear-algebra.left-modules-rings.md) over a +[local commutative ring](commutative-algebra.local-commutative-rings.md). + +## Definition + +```agda +Vector-Space : + {l1 : Level} (l2 : Level) → Local-Commutative-Ring l1 → UU (l1 ⊔ lsuc l2) +Vector-Space l2 R = + left-module-Commutative-Ring l2 (commutative-ring-Local-Commutative-Ring R) +``` + +## Properties + +```agda +module _ + {l1 l2 : Level} (R : Local-Commutative-Ring l1) (V : Vector-Space l2 R) + where + + ab-Vector-Space : Ab l2 + ab-Vector-Space = + ab-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + set-Vector-Space : Set l2 + set-Vector-Space = set-Ab ab-Vector-Space + + type-Vector-Space : UU l2 + type-Vector-Space = type-Ab ab-Vector-Space + + add-Vector-Space : type-Vector-Space → type-Vector-Space → type-Vector-Space + add-Vector-Space = add-Ab ab-Vector-Space + + zero-Vector-Space : type-Vector-Space + zero-Vector-Space = zero-Ab ab-Vector-Space + + neg-Vector-Space : type-Vector-Space → type-Vector-Space + neg-Vector-Space = neg-Ab ab-Vector-Space + + mul-Vector-Space : + type-Local-Commutative-Ring R → type-Vector-Space → type-Vector-Space + mul-Vector-Space = + mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + associative-add-Vector-Space : + (v w x : type-Vector-Space) → + add-Vector-Space (add-Vector-Space v w) x = + add-Vector-Space v (add-Vector-Space w x) + associative-add-Vector-Space = associative-add-Ab ab-Vector-Space + + left-unit-law-add-Vector-Space : + (v : type-Vector-Space) → add-Vector-Space zero-Vector-Space v = v + left-unit-law-add-Vector-Space = left-unit-law-add-Ab ab-Vector-Space + + right-unit-law-add-Vector-Space : + (v : type-Vector-Space) → add-Vector-Space v zero-Vector-Space = v + right-unit-law-add-Vector-Space = right-unit-law-add-Ab ab-Vector-Space + + left-inverse-law-add-Vector-Space : + (v : type-Vector-Space) → + add-Vector-Space (neg-Vector-Space v) v = zero-Vector-Space + left-inverse-law-add-Vector-Space = left-inverse-law-add-Ab ab-Vector-Space + + right-inverse-law-add-Vector-Space : + (v : type-Vector-Space) → + add-Vector-Space v (neg-Vector-Space v) = zero-Vector-Space + right-inverse-law-add-Vector-Space = right-inverse-law-add-Ab ab-Vector-Space + + commutative-add-Vector-Space : + (v w : type-Vector-Space) → add-Vector-Space v w = add-Vector-Space w v + commutative-add-Vector-Space = commutative-add-Ab ab-Vector-Space + + left-unit-law-mul-Vector-Space : + (v : type-Vector-Space) → + mul-Vector-Space (one-Local-Commutative-Ring R) v = v + left-unit-law-mul-Vector-Space = + left-unit-law-mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + left-distributive-mul-add-Vector-Space : + (r : type-Local-Commutative-Ring R) (v w : type-Vector-Space) → + mul-Vector-Space r (add-Vector-Space v w) = + add-Vector-Space (mul-Vector-Space r v) (mul-Vector-Space r w) + left-distributive-mul-add-Vector-Space = + left-distributive-mul-add-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + right-distributive-mul-add-Vector-Space : + (r s : type-Local-Commutative-Ring R) (v : type-Vector-Space) → + mul-Vector-Space (add-Local-Commutative-Ring R r s) v = + add-Vector-Space (mul-Vector-Space r v) (mul-Vector-Space s v) + right-distributive-mul-add-Vector-Space = + right-distributive-mul-add-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + associative-mul-Vector-Space : + (r s : type-Local-Commutative-Ring R) (v : type-Vector-Space) → + mul-Vector-Space (mul-Local-Commutative-Ring R r s) v = + mul-Vector-Space r (mul-Vector-Space s v) + associative-mul-Vector-Space = + associative-mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + left-zero-law-mul-Vector-Space : + (v : type-Vector-Space) → + mul-Vector-Space (zero-Local-Commutative-Ring R) v = zero-Vector-Space + left-zero-law-mul-Vector-Space = + left-zero-law-mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + right-zero-law-mul-Vector-Space : + (r : type-Local-Commutative-Ring R) → + mul-Vector-Space r zero-Vector-Space = zero-Vector-Space + right-zero-law-mul-Vector-Space = + right-zero-law-mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + left-negative-law-mul-Vector-Space : + (r : type-Local-Commutative-Ring R) (v : type-Vector-Space) → + mul-Vector-Space (neg-Local-Commutative-Ring R r) v = + neg-Vector-Space (mul-Vector-Space r v) + left-negative-law-mul-Vector-Space = + left-negative-law-mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + right-negative-law-mul-Vector-Space : + (r : type-Local-Commutative-Ring R) (v : type-Vector-Space) → + mul-Vector-Space r (neg-Vector-Space v) = + neg-Vector-Space (mul-Vector-Space r v) + right-negative-law-mul-Vector-Space = + right-negative-law-mul-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) + + mul-neg-one-Vector-Space : + (v : type-Vector-Space) → + mul-Vector-Space + ( neg-Local-Commutative-Ring R (one-Local-Commutative-Ring R)) + ( v) = + neg-Vector-Space v + mul-neg-one-Vector-Space = + mul-neg-one-left-module-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) + ( V) +``` + +### Any local commutative ring is a vector space over itself + +```agda +vector-space-local-commutative-ring-Local-Commutative-Ring : + {l : Level} (R : Local-Commutative-Ring l) → Vector-Space l R +vector-space-local-commutative-ring-Local-Commutative-Ring R = + left-module-commutative-ring-Commutative-Ring + ( commutative-ring-Local-Commutative-Ring R) +``` diff --git a/src/literature/100-theorems.lagda.md b/src/literature/100-theorems.lagda.md index 862d0a1cea..81353f5e14 100644 --- a/src/literature/100-theorems.lagda.md +++ b/src/literature/100-theorems.lagda.md @@ -46,6 +46,15 @@ open import foundation.cantor-schroder-bernstein-decidable-embeddings using ( Cantor-Schröder-Bernstein-WLPO) ``` +### 34. Divergence of the Harmonic Series {#34} + +**Author:** [Louis Wasserman](https://github.com/lowasser) + +```agda +open import elementary-number-theory.harmonic-series-rational-numbers using + ( grows-without-bound-harmonic-series-ℚ) +``` + ### 42. Sum of the Reciprocals of the Triangular Numbers {#42} **Author:** [Louis Wasserman](https://github.com/lowasser) diff --git a/src/metric-spaces/limits-of-sequences-metric-spaces.lagda.md b/src/metric-spaces/limits-of-sequences-metric-spaces.lagda.md index 2cfda0f25e..984330b2f5 100644 --- a/src/metric-spaces/limits-of-sequences-metric-spaces.lagda.md +++ b/src/metric-spaces/limits-of-sequences-metric-spaces.lagda.md @@ -31,6 +31,7 @@ open import foundation.universe-levels open import lists.sequences open import metric-spaces.cartesian-products-metric-spaces +open import metric-spaces.isometries-metric-spaces open import metric-spaces.metric-spaces open import metric-spaces.modulated-uniformly-continuous-functions-metric-spaces open import metric-spaces.sequences-metric-spaces @@ -383,6 +384,46 @@ module _ map-is-inhabited short-map-limit-modulus-sequence-Metric-Space ``` +### Isometries between metric spaces preserve limits + +```agda +module _ + {la la' lb lb' : Level} + (A : Metric-Space la la') + (B : Metric-Space lb lb') + (f : isometry-Metric-Space A B) + (u : sequence-type-Metric-Space A) + (lim : type-Metric-Space A) + where + + isometry-map-limit-modulus-sequence-Metric-Space : + limit-modulus-sequence-Metric-Space A u lim → + limit-modulus-sequence-Metric-Space + ( B) + ( map-sequence + ( map-isometry-Metric-Space A B f) + ( u)) + ( map-isometry-Metric-Space A B f lim) + isometry-map-limit-modulus-sequence-Metric-Space = + short-map-limit-modulus-sequence-Metric-Space + ( A) + ( B) + ( short-isometry-Metric-Space A B f) + ( u) + ( lim) + + preserves-limits-sequence-isometry-Metric-Space : + is-limit-sequence-Metric-Space A u lim → + is-limit-sequence-Metric-Space + ( B) + ( map-sequence + ( map-isometry-Metric-Space A B f) + ( u)) + ( map-isometry-Metric-Space A B f lim) + preserves-limits-sequence-isometry-Metric-Space = + map-is-inhabited isometry-map-limit-modulus-sequence-Metric-Space +``` + ### If two sequences have limits in metric spaces, their pairing has a limit in the product space The converse has yet to be proved. diff --git a/src/metric-spaces/metrics-of-metric-spaces.lagda.md b/src/metric-spaces/metrics-of-metric-spaces.lagda.md index ea6ba29759..f3b1b5bcff 100644 --- a/src/metric-spaces/metrics-of-metric-spaces.lagda.md +++ b/src/metric-spaces/metrics-of-metric-spaces.lagda.md @@ -21,13 +21,17 @@ open import foundation.transport-along-identifications open import foundation.universe-levels open import metric-spaces.equality-of-metric-spaces +open import metric-spaces.functions-metric-spaces +open import metric-spaces.isometries-metric-spaces open import metric-spaces.located-metric-spaces open import metric-spaces.metric-spaces open import metric-spaces.metrics +open import metric-spaces.short-functions-metric-spaces open import real-numbers.addition-nonnegative-real-numbers open import real-numbers.dedekind-real-numbers open import real-numbers.inequality-nonnegative-real-numbers +open import real-numbers.inequality-real-numbers open import real-numbers.nonnegative-real-numbers open import real-numbers.rational-real-numbers open import real-numbers.saturation-inequality-nonnegative-real-numbers @@ -109,7 +113,7 @@ module _ is-reflexive-is-metric-of-Metric-Space : is-reflexive-distance-function (set-Metric-Space M) ρ is-reflexive-is-metric-of-Metric-Space x = - sim-zero-le-positive-rational-ℝ⁰⁺ + sim-zero-leq-positive-rational-ℝ⁰⁺ ( ρ x x) ( λ ε → forward-implication @@ -266,6 +270,109 @@ module _ ( isometric-equiv-metric-is-metric-of-Metric-Space M ρ is-metric-M-ρ) ``` +### If `M` and `N` are metric spaces with metrics `dM` and `dN`, a function `f : M → N` is an isometry if and only if `dM x y` is similar to `dN (f x) (f y)` for all `x, y : M` + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} + (M : Metric-Space l1 l2) + (N : Metric-Space l3 l4) + (dM : distance-function l5 (set-Metric-Space M)) + (dN : distance-function l6 (set-Metric-Space N)) + (is-metric-dM : is-metric-of-Metric-Space M dM) + (is-metric-dN : is-metric-of-Metric-Space N dN) + (f : type-function-Metric-Space M N) + where + + abstract + is-isometry-sim-metric-Metric-Space : + ((x y : type-Metric-Space M) → sim-ℝ⁰⁺ (dM x y) (dN (f x) (f y))) → + is-isometry-Metric-Space M N f + is-isometry-sim-metric-Metric-Space H d x y = + logical-equivalence-reasoning + neighborhood-Metric-Space M d x y + ↔ leq-ℝ (real-ℝ⁰⁺ (dM x y)) (real-ℚ⁺ d) + by is-metric-dM d x y + ↔ leq-ℝ (real-ℝ⁰⁺ (dN (f x) (f y))) (real-ℚ⁺ d) + by leq-iff-left-sim-ℝ (H x y) + ↔ neighborhood-Metric-Space N d (f x) (f y) + by inv-iff (is-metric-dN d (f x) (f y)) + + sim-metric-is-isometry-Metric-Space : + is-isometry-Metric-Space M N f → + (x y : type-Metric-Space M) → + sim-ℝ⁰⁺ (dM x y) (dN (f x) (f y)) + sim-metric-is-isometry-Metric-Space H x y = + sim-leq-same-positive-rational-ℝ⁰⁺ + ( dM x y) + ( dN (f x) (f y)) + ( λ d → + logical-equivalence-reasoning + leq-ℝ (real-ℝ⁰⁺ (dM x y)) (real-ℚ⁺ d) + ↔ neighborhood-Metric-Space M d x y + by inv-iff (is-metric-dM d x y) + ↔ neighborhood-Metric-Space N d (f x) (f y) + by H d x y + ↔ leq-ℝ (real-ℝ⁰⁺ (dN (f x) (f y))) (real-ℚ⁺ d) + by is-metric-dN d (f x) (f y)) + + is-isometry-iff-sim-metric-Metric-Space : + is-isometry-Metric-Space M N f ↔ + ((x y : type-Metric-Space M) → sim-ℝ⁰⁺ (dM x y) (dN (f x) (f y))) + is-isometry-iff-sim-metric-Metric-Space = + ( sim-metric-is-isometry-Metric-Space , + is-isometry-sim-metric-Metric-Space) +``` + +### If `M` and `N` are metric spaces with metrics `dM` and `dN`, a function `f : M → N` is short if and only if `dN (f x) (f y) ≤ dM x y` for all `x, y : M` + +```agda +module _ + {l1 l2 l3 l4 l5 l6 : Level} + (M : Metric-Space l1 l2) + (N : Metric-Space l3 l4) + (dM : distance-function l5 (set-Metric-Space M)) + (dN : distance-function l6 (set-Metric-Space N)) + (is-metric-dM : is-metric-of-Metric-Space M dM) + (is-metric-dN : is-metric-of-Metric-Space N dN) + (f : type-function-Metric-Space M N) + where + + abstract + is-short-function-leq-metric-Metric-Space : + ((x y : type-Metric-Space M) → leq-ℝ⁰⁺ (dN (f x) (f y)) (dM x y)) → + is-short-function-Metric-Space M N f + is-short-function-leq-metric-Metric-Space H d x y Ndxy = + backward-implication + ( is-metric-dN d (f x) (f y)) + ( transitive-leq-ℝ + ( real-ℝ⁰⁺ (dN (f x) (f y))) + ( real-ℝ⁰⁺ (dM x y)) + ( real-ℚ⁺ d) + ( forward-implication (is-metric-dM d x y) Ndxy) + ( H x y)) + + leq-metric-is-short-function-Metric-Space : + is-short-function-Metric-Space M N f → + (x y : type-Metric-Space M) → + leq-ℝ⁰⁺ (dN (f x) (f y)) (dM x y) + leq-metric-is-short-function-Metric-Space H x y = + leq-leq-positive-rational-ℝ⁰⁺ + ( dN (f x) (f y)) + ( dM x y) + ( λ d dMxy≤d → + forward-implication + ( is-metric-dN d (f x) (f y)) + ( H d x y (backward-implication (is-metric-dM d x y) dMxy≤d))) + + is-short-function-iff-leq-metric-Metric-Space : + is-short-function-Metric-Space M N f ↔ + ((x y : type-Metric-Space M) → leq-ℝ⁰⁺ (dN (f x) (f y)) (dM x y)) + is-short-function-iff-leq-metric-Metric-Space = + ( leq-metric-is-short-function-Metric-Space , + is-short-function-leq-metric-Metric-Space) +``` + ## See also - [Metrics of metric spaces are uniformly continuous](metric-spaces.metrics-of-metric-spaces-are-uniformly-continuous.md) diff --git a/src/metric-spaces/metrics.lagda.md b/src/metric-spaces/metrics.lagda.md index 6ed22735b3..67cc1c541a 100644 --- a/src/metric-spaces/metrics.lagda.md +++ b/src/metric-spaces/metrics.lagda.md @@ -297,7 +297,7 @@ module _ is-tight-Pseudometric-Space (pseudometric-space-Metric X μ) is-tight-pseudometric-space-Metric x y H = is-extensional-dist-Metric X μ x y - ( sim-zero-le-positive-rational-ℝ⁰⁺ (dist-Metric X μ x y) H) + ( sim-zero-leq-positive-rational-ℝ⁰⁺ (dist-Metric X μ x y) H) ``` ### The pseudometric space induced by a metric is extensional diff --git a/src/order-theory.lagda.md b/src/order-theory.lagda.md index 538d9ef259..c4bcb8c5a7 100644 --- a/src/order-theory.lagda.md +++ b/src/order-theory.lagda.md @@ -103,6 +103,7 @@ open import order-theory.maximal-chains-preorders public open import order-theory.meet-semilattices public open import order-theory.meet-suplattices public open import order-theory.meets-finite-families-meet-semilattices public +open import order-theory.monotonic-sequences-posets public open import order-theory.nuclei-large-locales public open import order-theory.opposite-large-posets public open import order-theory.opposite-large-preorders public diff --git a/src/order-theory/monotonic-sequences-posets.lagda.md b/src/order-theory/monotonic-sequences-posets.lagda.md new file mode 100644 index 0000000000..048129132b --- /dev/null +++ b/src/order-theory/monotonic-sequences-posets.lagda.md @@ -0,0 +1,84 @@ +# Monotonic sequences in posets + +```agda +module order-theory.monotonic-sequences-posets where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.propositions +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import lists.sequences + +open import order-theory.order-preserving-maps-posets +open import order-theory.posets +``` + +
+ +## Idea + +A +{{#concept "monotonic sequence" Agda=monotonic-sequence-Poset Disambiguation="in a poset"}} +in a [poset](order-theory.posets.md) `P` is a [sequence](lists.sequences.md) +`aₙ` such that whenever `m ≤ n`, `aₘ ≤ aₙ`. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (P : Poset l1 l2) + where + + is-monotonic-prop-sequence-Poset : subtype l2 (sequence (type-Poset P)) + is-monotonic-prop-sequence-Poset a = preserves-order-prop-Poset ℕ-Poset P a + + is-monotonic-sequence-Poset : sequence (type-Poset P) → UU l2 + is-monotonic-sequence-Poset a = type-Prop (is-monotonic-prop-sequence-Poset a) +``` + +## Properties + +### If `aₙ ≤ aₙ₊₁` for all `n`, then the sequence `aₙ` is monotonic + +```agda +module _ + {l1 l2 : Level} + (P : Poset l1 l2) + where + + abstract + is-monotonic-sequence-is-increasing-Poset : + (a : sequence (type-Poset P)) → + ((n : ℕ) → leq-Poset P (a n) (a (succ-ℕ n))) → + is-monotonic-sequence-Poset P a + is-monotonic-sequence-is-increasing-Poset a H m n m≤n = + let + (l , l+m=n) = subtraction-leq-ℕ m n m≤n + in + tr + ( λ k → leq-Poset P (a m) (a k)) + ( commutative-add-ℕ m l ∙ l+m=n) + ( lemma l) + where + lemma : (k : ℕ) → leq-Poset P (a m) (a (m +ℕ k)) + lemma 0 = refl-leq-Poset P (a m) + lemma (succ-ℕ k) = + transitive-leq-Poset P + ( a m) + ( a (m +ℕ k)) + ( a (m +ℕ succ-ℕ k)) + ( H (m +ℕ k)) + ( lemma k) +``` diff --git a/src/real-numbers.lagda.md b/src/real-numbers.lagda.md index 139b1a33aa..e1d9a1f129 100644 --- a/src/real-numbers.lagda.md +++ b/src/real-numbers.lagda.md @@ -9,7 +9,10 @@ open import real-numbers.absolute-value-closed-intervals-real-numbers public open import real-numbers.absolute-value-real-numbers public open import real-numbers.accumulation-points-subsets-real-numbers public open import real-numbers.addition-lower-dedekind-real-numbers public +open import real-numbers.addition-negative-real-numbers public open import real-numbers.addition-nonnegative-real-numbers public +open import real-numbers.addition-nonzero-real-numbers public +open import real-numbers.addition-positive-real-numbers public open import real-numbers.addition-real-numbers public open import real-numbers.addition-upper-dedekind-real-numbers public open import real-numbers.apartness-real-numbers public @@ -45,13 +48,14 @@ open import real-numbers.large-multiplicative-monoid-of-real-numbers public open import real-numbers.large-ring-of-real-numbers public open import real-numbers.limits-sequences-real-numbers public open import real-numbers.lipschitz-continuity-multiplication-real-numbers public +open import real-numbers.local-ring-of-real-numbers public open import real-numbers.located-metric-space-of-real-numbers public open import real-numbers.lower-dedekind-real-numbers public open import real-numbers.maximum-finite-families-real-numbers public open import real-numbers.maximum-inhabited-finitely-enumerable-subsets-real-numbers public open import real-numbers.maximum-lower-dedekind-real-numbers public open import real-numbers.maximum-upper-dedekind-real-numbers public -open import real-numbers.metric-abelian-group-of-real-numbers public +open import real-numbers.metric-additive-group-of-real-numbers public open import real-numbers.metric-space-of-nonnegative-real-numbers public open import real-numbers.metric-space-of-real-numbers public open import real-numbers.minimum-finite-families-real-numbers public @@ -60,6 +64,7 @@ open import real-numbers.minimum-lower-dedekind-real-numbers public open import real-numbers.minimum-upper-dedekind-real-numbers public open import real-numbers.multiplication-negative-real-numbers public open import real-numbers.multiplication-nonnegative-real-numbers public +open import real-numbers.multiplication-nonzero-real-numbers public open import real-numbers.multiplication-positive-and-negative-real-numbers public open import real-numbers.multiplication-positive-real-numbers public open import real-numbers.multiplication-real-numbers public @@ -97,6 +102,7 @@ open import real-numbers.strict-inequality-nonnegative-real-numbers public open import real-numbers.strict-inequality-positive-real-numbers public open import real-numbers.strict-inequality-real-numbers public open import real-numbers.subsets-real-numbers public +open import real-numbers.sums-of-finite-sequences-of-real-numbers public open import real-numbers.suprema-families-real-numbers public open import real-numbers.totally-bounded-subsets-real-numbers public open import real-numbers.transposition-addition-subtraction-cuts-dedekind-real-numbers public diff --git a/src/real-numbers/absolute-value-real-numbers.lagda.md b/src/real-numbers/absolute-value-real-numbers.lagda.md index 6e56c70a08..371e592c16 100644 --- a/src/real-numbers/absolute-value-real-numbers.lagda.md +++ b/src/real-numbers/absolute-value-real-numbers.lagda.md @@ -14,6 +14,7 @@ open import elementary-number-theory.rational-numbers open import elementary-number-theory.squares-rational-numbers open import foundation.action-on-identifications-functions +open import foundation.binary-transport open import foundation.dependent-pair-types open import foundation.disjunction open import foundation.empty-types @@ -39,6 +40,7 @@ open import real-numbers.negative-real-numbers open import real-numbers.nonnegative-real-numbers open import real-numbers.positive-and-negative-real-numbers open import real-numbers.positive-real-numbers +open import real-numbers.raising-universe-levels-real-numbers open import real-numbers.rational-real-numbers open import real-numbers.saturation-inequality-real-numbers open import real-numbers.similarity-real-numbers @@ -90,6 +92,23 @@ abstract opaque preserves-sim-max-ℝ _ _ x~x' _ _ (preserves-sim-neg-ℝ x~x') ``` +### The absolute value commutes with raising the universe level of a real number + +```agda +abstract + abs-raise-ℝ : + {l1 : Level} (l2 : Level) (x : ℝ l1) → + abs-ℝ (raise-ℝ l2 x) = raise-ℝ l2 (abs-ℝ x) + abs-raise-ℝ l2 x = + eq-sim-ℝ + ( similarity-reasoning-ℝ + abs-ℝ (raise-ℝ l2 x) + ~ℝ abs-ℝ x + by preserves-sim-abs-ℝ (sim-raise-ℝ' l2 x) + ~ℝ raise-ℝ l2 (abs-ℝ x) + by sim-raise-ℝ l2 (abs-ℝ x)) +``` + ### The absolute value of a real number is nonnegative ```agda @@ -183,6 +202,22 @@ module _ ### If `|x| = 0` then `x = 0` ```agda +module _ + {l : Level} (x : ℝ l) (|x|~0 : sim-ℝ (abs-ℝ x) zero-ℝ) + where + + abstract + sim-zero-sim-zero-abs-ℝ : sim-ℝ x zero-ℝ + sim-zero-sim-zero-abs-ℝ = + sim-sim-leq-ℝ + ( transitive-leq-ℝ _ _ _ (leq-sim-ℝ |x|~0) (leq-abs-ℝ x) , + binary-tr + ( leq-ℝ) + ( neg-zero-ℝ) + ( neg-neg-ℝ x) + ( neg-leq-ℝ + ( transitive-leq-ℝ _ _ _ (leq-sim-ℝ |x|~0) (neg-leq-abs-ℝ x)))) + module _ (x : ℝ lzero) (|x|=0 : abs-ℝ x = zero-ℝ) where @@ -190,14 +225,7 @@ module _ abstract is-zero-is-zero-abs-ℝ : x = zero-ℝ is-zero-is-zero-abs-ℝ = - antisymmetric-leq-ℝ - ( x) - ( zero-ℝ) - ( tr (leq-ℝ x) |x|=0 (leq-abs-ℝ x)) - ( tr - ( λ y → leq-ℝ y x) - ( (ap neg-ℝ |x|=0) ∙ neg-zero-ℝ) - ( leq-neg-abs-ℝ x)) + eq-sim-ℝ (sim-zero-sim-zero-abs-ℝ x (sim-eq-ℝ |x|=0)) ``` ### If `|x| ≤ 0` then `|x| = 0` and `x = 0` diff --git a/src/real-numbers/addition-negative-real-numbers.lagda.md b/src/real-numbers/addition-negative-real-numbers.lagda.md new file mode 100644 index 0000000000..c3e3cef113 --- /dev/null +++ b/src/real-numbers/addition-negative-real-numbers.lagda.md @@ -0,0 +1,85 @@ +# Addition of negative real numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module real-numbers.addition-negative-real-numbers where +``` + +
Imports + +```agda +open import foundation.dependent-pair-types +open import foundation.disjunction +open import foundation.functoriality-disjunction +open import foundation.transport-along-identifications +open import foundation.universe-levels + +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.negation-real-numbers +open import real-numbers.negative-real-numbers +open import real-numbers.positive-and-negative-real-numbers +open import real-numbers.positive-real-numbers +open import real-numbers.rational-real-numbers +open import real-numbers.strict-inequalities-addition-and-subtraction-real-numbers +open import real-numbers.strict-inequality-real-numbers +``` + +
+ +## Idea + +The [negative](real-numbers.negative-real-numbers.md) +[real numbers](real-numbers.dedekind-real-numbers.md) are closed under +[addition](real-numbers.addition-real-numbers.md). + +## Definition + +```agda +abstract + is-negative-add-ℝ : + {l1 l2 : Level} {x : ℝ l1} {y : ℝ l2} → is-negative-ℝ x → is-negative-ℝ y → + is-negative-ℝ (x +ℝ y) + is-negative-add-ℝ {x = x} {y = y} x<0 y<0 = + transitive-le-ℝ + ( x +ℝ y) + ( x) + ( zero-ℝ) + ( x<0) + ( tr + ( le-ℝ (x +ℝ y)) + ( right-unit-law-add-ℝ x) + ( preserves-le-left-add-ℝ x y zero-ℝ y<0)) + +add-ℝ⁻ : {l1 l2 : Level} → ℝ⁻ l1 → ℝ⁻ l2 → ℝ⁻ (l1 ⊔ l2) +add-ℝ⁻ (x , x<0) (y , y<0) = (add-ℝ x y , is-negative-add-ℝ x<0 y<0) + +infixl 35 _+ℝ⁻_ + +_+ℝ⁻_ : {l1 l2 : Level} → ℝ⁻ l1 → ℝ⁻ l2 → ℝ⁻ (l1 ⊔ l2) +_+ℝ⁻_ = add-ℝ⁻ +``` + +## Properties + +### If `x + y` is negative, `x` or `y` is negative + +```agda +abstract + is-negative-either-is-negative-add-ℝ : + {l1 l2 : Level} (x : ℝ l1) (y : ℝ l2) → is-negative-ℝ (x +ℝ y) → + disjunction-type (is-negative-ℝ x) (is-negative-ℝ y) + is-negative-either-is-negative-add-ℝ x y x+y<0 = + map-disjunction + ( is-negative-is-positive-neg-ℝ x) + ( is-negative-is-positive-neg-ℝ y) + ( is-positive-either-is-positive-add-ℝ + ( neg-ℝ x) + ( neg-ℝ y) + ( tr + ( is-positive-ℝ) + ( distributive-neg-add-ℝ x y) + ( neg-is-negative-ℝ (x +ℝ y) x+y<0))) +``` diff --git a/src/real-numbers/addition-nonnegative-real-numbers.lagda.md b/src/real-numbers/addition-nonnegative-real-numbers.lagda.md index 6c29699df8..22600ad7dc 100644 --- a/src/real-numbers/addition-nonnegative-real-numbers.lagda.md +++ b/src/real-numbers/addition-nonnegative-real-numbers.lagda.md @@ -12,9 +12,12 @@ module real-numbers.addition-nonnegative-real-numbers where open import elementary-number-theory.addition-nonnegative-rational-numbers open import elementary-number-theory.addition-positive-rational-numbers open import elementary-number-theory.nonnegative-rational-numbers +open import elementary-number-theory.positive-and-negative-rational-numbers open import elementary-number-theory.positive-rational-numbers +open import foundation.coproduct-types open import foundation.dependent-pair-types +open import foundation.disjunction open import foundation.identity-types open import foundation.transport-along-identifications open import foundation.universe-levels @@ -133,3 +136,21 @@ module _ le-ℝ⁰⁺ x y → le-ℝ⁰⁺ z w → le-ℝ⁰⁺ (x +ℝ⁰⁺ z) (y +ℝ⁰⁺ w) preserves-le-add-ℝ⁰⁺ = preserves-le-add-ℝ ``` + +### Addition with a nonnegative real number is an inflationary map + +```agda +abstract + leq-left-add-real-ℝ⁰⁺ : + {l1 l2 : Level} → (x : ℝ l1) (d : ℝ⁰⁺ l2) → leq-ℝ x (x +ℝ real-ℝ⁰⁺ d) + leq-left-add-real-ℝ⁰⁺ x d⁺@(d , pos-d) = + tr + ( λ y → leq-ℝ y (x +ℝ d)) + ( right-unit-law-add-ℝ x) + ( preserves-leq-left-add-ℝ x zero-ℝ d pos-d) + +leq-right-add-real-ℝ⁰⁺ : + {l1 l2 : Level} → (x : ℝ l1) (d : ℝ⁰⁺ l2) → leq-ℝ x (real-ℝ⁰⁺ d +ℝ x) +leq-right-add-real-ℝ⁰⁺ x d = + tr (leq-ℝ x) (commutative-add-ℝ x (real-ℝ⁰⁺ d)) (leq-left-add-real-ℝ⁰⁺ x d) +``` diff --git a/src/real-numbers/addition-nonzero-real-numbers.lagda.md b/src/real-numbers/addition-nonzero-real-numbers.lagda.md new file mode 100644 index 0000000000..e59f5b96f1 --- /dev/null +++ b/src/real-numbers/addition-nonzero-real-numbers.lagda.md @@ -0,0 +1,56 @@ +# Addition of nonzero real numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module real-numbers.addition-nonzero-real-numbers where +``` + +
Imports + +```agda +open import foundation.dependent-pair-types +open import foundation.disjunction +open import foundation.functoriality-disjunction +open import foundation.universe-levels + +open import real-numbers.addition-negative-real-numbers +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.nonzero-real-numbers +``` + +
+ +## Idea + +On this page we describe properties of +[addition](real-numbers.addition-real-numbers.md) of +[nonzero](real-numbers.nonzero-real-numbers.md) +[real numbers](real-numbers.dedekind-real-numbers.md). + +## Properties + +### If `x + y` is nonzero, `x` is nonzero or `y` is nonzero + +```agda +abstract + is-nonzero-either-is-nonzero-add-ℝ : + {l1 l2 : Level} (x : ℝ l1) (y : ℝ l2) → + is-nonzero-ℝ (x +ℝ y) → + disjunction-type (is-nonzero-ℝ x) (is-nonzero-ℝ y) + is-nonzero-either-is-nonzero-add-ℝ x y = + elim-disjunction + ( is-nonzero-prop-ℝ x ∨ is-nonzero-prop-ℝ y) + ( λ x+y<0 → + map-disjunction + ( inl-disjunction) + ( inl-disjunction) + ( is-negative-either-is-negative-add-ℝ x y x+y<0)) + ( λ 0Imports + +```agda +open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.nonnegative-rational-numbers +open import elementary-number-theory.positive-and-negative-rational-numbers + +open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.disjunction +open import foundation.existential-quantification +open import foundation.identity-types +open import foundation.propositional-truncations +open import foundation.transport-along-identifications +open import foundation.universe-levels + +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.negation-real-numbers +open import real-numbers.positive-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 +``` + +
+ +## Idea + +The [positive](real-numbers.positive-real-numbers.md) +[real numbers](real-numbers.dedekind-real-numbers.md) are closed under +[addition](real-numbers.addition-real-numbers.md). + +## Definition + +```agda +abstract + is-positive-add-ℝ : + {l1 l2 : Level} {x : ℝ l1} {y : ℝ l2} → is-positive-ℝ x → is-positive-ℝ y → + is-positive-ℝ (x +ℝ y) + is-positive-add-ℝ {x = x} {y = y} 0Imports ```agda +open import elementary-number-theory.addition-integers +open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.addition-positive-rational-numbers open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.integers +open import elementary-number-theory.natural-numbers open import elementary-number-theory.rational-numbers open import elementary-number-theory.strict-inequality-rational-numbers @@ -385,6 +389,23 @@ module _ pr2 iff-translate-left-sim-ℝ = reflects-sim-left-add-ℝ z x y ``` +### Raising the universe level of real numbers distributes over addition + +```agda +abstract + distributive-raise-add-ℝ : + {l1 l2 : Level} (l3 : Level) (x : ℝ l1) (y : ℝ l2) → + raise-ℝ l3 (x +ℝ y) = raise-ℝ l3 x +ℝ raise-ℝ l3 y + distributive-raise-add-ℝ l3 x y = + eq-sim-ℝ + ( similarity-reasoning-ℝ + raise-ℝ l3 (x +ℝ y) + ~ℝ x +ℝ y + by sim-raise-ℝ' l3 (x +ℝ y) + ~ℝ raise-ℝ l3 x +ℝ raise-ℝ l3 y + by preserves-sim-add-ℝ (sim-raise-ℝ l3 x) (sim-raise-ℝ l3 y)) +``` + ### The inclusion of rational numbers preserves addition ```agda @@ -427,6 +448,34 @@ abstract = x +ℝ real-ℚ (p +ℚ q) by ap (x +ℝ_) (add-real-ℚ p q) ``` +### The inclusion of integers preserves addition + +```agda +abstract + add-real-ℤ : (x y : ℤ) → real-ℤ x +ℝ real-ℤ y = real-ℤ (x +ℤ y) + add-real-ℤ x y = + equational-reasoning + real-ℤ x +ℝ real-ℤ y + = real-ℚ (rational-ℤ x +ℚ rational-ℤ y) + by add-real-ℚ _ _ + = real-ℤ (x +ℤ y) + by ap real-ℚ (add-rational-ℤ x y) +``` + +### The inclusion of natural numbers preserves addition + +```agda +abstract + add-real-ℕ : (x y : ℕ) → real-ℕ x +ℝ real-ℕ y = real-ℕ (x +ℕ y) + add-real-ℕ x y = + equational-reasoning + real-ℕ x +ℝ real-ℕ y + = real-ℤ (int-ℕ x +ℤ int-ℕ y) + by add-real-ℤ _ _ + = real-ℕ (x +ℕ y) + by ap real-ℤ (add-int-ℕ x y) +``` + ### Interchange laws for addition on real numbers ```agda diff --git a/src/real-numbers/binary-maximum-real-numbers.lagda.md b/src/real-numbers/binary-maximum-real-numbers.lagda.md index b225ca7890..8ea3ab74b6 100644 --- a/src/real-numbers/binary-maximum-real-numbers.lagda.md +++ b/src/real-numbers/binary-maximum-real-numbers.lagda.md @@ -28,6 +28,7 @@ open import order-theory.join-semilattices open import order-theory.large-join-semilattices open import order-theory.least-upper-bounds-large-posets +open import real-numbers.addition-positive-real-numbers open import real-numbers.dedekind-real-numbers open import real-numbers.difference-real-numbers open import real-numbers.inequality-real-numbers diff --git a/src/real-numbers/cauchy-completeness-dedekind-real-numbers.lagda.md b/src/real-numbers/cauchy-completeness-dedekind-real-numbers.lagda.md index 6e102ad464..ce1647b2d5 100644 --- a/src/real-numbers/cauchy-completeness-dedekind-real-numbers.lagda.md +++ b/src/real-numbers/cauchy-completeness-dedekind-real-numbers.lagda.md @@ -38,6 +38,7 @@ open import metric-spaces.convergent-cauchy-approximations-metric-spaces open import metric-spaces.limits-of-cauchy-approximations-metric-spaces open import metric-spaces.metric-spaces +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 diff --git a/src/real-numbers/cauchy-sequences-real-numbers.lagda.md b/src/real-numbers/cauchy-sequences-real-numbers.lagda.md index 6876201386..8a716b033f 100644 --- a/src/real-numbers/cauchy-sequences-real-numbers.lagda.md +++ b/src/real-numbers/cauchy-sequences-real-numbers.lagda.md @@ -9,8 +9,12 @@ module real-numbers.cauchy-sequences-real-numbers where
Imports ```agda +open import foundation.dependent-pair-types +open import foundation.inhabited-types open import foundation.universe-levels +open import lists.sequences + open import metric-spaces.cartesian-products-metric-spaces open import metric-spaces.cauchy-sequences-complete-metric-spaces open import metric-spaces.cauchy-sequences-metric-spaces @@ -18,6 +22,7 @@ open import metric-spaces.cauchy-sequences-metric-spaces open import real-numbers.cauchy-completeness-dedekind-real-numbers open import real-numbers.dedekind-real-numbers open import real-numbers.isometry-addition-real-numbers +open import real-numbers.limits-sequences-real-numbers open import real-numbers.metric-space-of-real-numbers ``` @@ -39,6 +44,9 @@ is a [Cauchy sequence](metric-spaces.cauchy-sequences-metric-spaces.md) in the ## Definition ```agda +is-cauchy-sequence-ℝ : {l : Level} → sequence (ℝ l) → UU l +is-cauchy-sequence-ℝ {l} = is-cauchy-sequence-Metric-Space (metric-space-ℝ l) + cauchy-sequence-ℝ : (l : Level) → UU (lsuc l) cauchy-sequence-ℝ l = cauchy-sequence-Metric-Space (metric-space-ℝ l) ``` @@ -70,3 +78,20 @@ add-cauchy-sequence-ℝ {l1} {l2} u v = ( u) ( v)) ``` + +### If a sequence has a limit, there exists a modulus making it a Cauchy sequence + +```agda +abstract + exists-cauchy-modulus-has-limit-sequence-ℝ : + {l : Level} (σ : sequence (ℝ l)) → + has-limit-sequence-ℝ σ → + is-inhabited (is-cauchy-sequence-ℝ σ) + exists-cauchy-modulus-has-limit-sequence-ℝ {l} σ (lim , is-lim) = + map-is-inhabited + ( is-cauchy-has-limit-modulus-sequence-Metric-Space + ( metric-space-ℝ l) + ( σ) + ( lim)) + ( is-lim) +``` diff --git a/src/real-numbers/distance-real-numbers.lagda.md b/src/real-numbers/distance-real-numbers.lagda.md index 8b9f67f22b..7527cdf664 100644 --- a/src/real-numbers/distance-real-numbers.lagda.md +++ b/src/real-numbers/distance-real-numbers.lagda.md @@ -248,6 +248,16 @@ abstract ( leq-transpose-right-add-ℝ _ _ _ y≤z+x) ``` +### The difference of two real numbers is at most their distance + +```agda +abstract + leq-diff-dist-ℝ : + {l1 l2 : Level} (x : ℝ l1) (y : ℝ l2) → + leq-ℝ (x -ℝ y) (dist-ℝ x y) + leq-diff-dist-ℝ _ _ = leq-abs-ℝ _ +``` + ### Addition preserves distance between real numbers ```agda diff --git a/src/real-numbers/inequality-real-numbers.lagda.md b/src/real-numbers/inequality-real-numbers.lagda.md index 1d9d46febf..d44ee49da3 100644 --- a/src/real-numbers/inequality-real-numbers.lagda.md +++ b/src/real-numbers/inequality-real-numbers.lagda.md @@ -328,6 +328,21 @@ module _ preserves-leq-right-sim-ℝ : leq-ℝ z x → leq-ℝ z y preserves-leq-right-sim-ℝ z≤x q qImports + +```agda +open import commutative-algebra.local-commutative-rings + +open import foundation.dependent-pair-types +open import foundation.functoriality-disjunction +open import foundation.universe-levels + +open import real-numbers.addition-nonzero-real-numbers +open import real-numbers.addition-real-numbers +open import real-numbers.large-ring-of-real-numbers +open import real-numbers.multiplicative-inverses-nonzero-real-numbers +open import real-numbers.nonzero-real-numbers +``` + +
+ +## Idea + +The [ring of real numbers](real-numbers.large-ring-of-real-numbers.md) is a +[local](commutative-algebra.local-commutative-rings.md) +[commutative ring](commutative-algebra.commutative-rings.md). Notably, this is +one of the strongest alternatives for the concept of field that applies to the +[Dedekind real numbers](real-numbers.dedekind-real-numbers.md) constructively. + +## Definition + +```agda +is-local-commutative-ring-ℝ : + (l : Level) → is-local-Commutative-Ring (commutative-ring-ℝ l) +is-local-commutative-ring-ℝ l x y is-invertible-x+y = + map-disjunction + ( is-invertible-is-nonzero-ℝ x) + ( is-invertible-is-nonzero-ℝ y) + ( is-nonzero-either-is-nonzero-add-ℝ + ( x) + ( y) + ( is-nonzero-is-invertible-ℝ (x +ℝ y) is-invertible-x+y)) + +local-commutative-ring-ℝ : (l : Level) → Local-Commutative-Ring (lsuc l) +local-commutative-ring-ℝ l = + ( commutative-ring-ℝ l , is-local-commutative-ring-ℝ l) +``` diff --git a/src/real-numbers/metric-abelian-group-of-real-numbers.lagda.md b/src/real-numbers/metric-additive-group-of-real-numbers.lagda.md similarity index 71% rename from src/real-numbers/metric-abelian-group-of-real-numbers.lagda.md rename to src/real-numbers/metric-additive-group-of-real-numbers.lagda.md index 3402489495..db74d26fd0 100644 --- a/src/real-numbers/metric-abelian-group-of-real-numbers.lagda.md +++ b/src/real-numbers/metric-additive-group-of-real-numbers.lagda.md @@ -3,12 +3,13 @@ ```agda {-# OPTIONS --lossy-unification #-} -module real-numbers.metric-abelian-group-of-real-numbers where +module real-numbers.metric-additive-group-of-real-numbers where ```
Imports ```agda +open import analysis.complete-metric-abelian-groups open import analysis.metric-abelian-groups open import foundation.dependent-pair-types @@ -16,6 +17,7 @@ open import foundation.universe-levels open import metric-spaces.pseudometric-spaces +open import real-numbers.cauchy-completeness-dedekind-real-numbers open import real-numbers.isometry-addition-real-numbers open import real-numbers.isometry-negation-real-numbers open import real-numbers.large-additive-group-of-real-numbers @@ -34,11 +36,16 @@ The [Dedekind real numbers](real-numbers.dedekind-real-numbers.md) form a ## Definition ```agda -metric-ab-ℝ : (l : Level) → Metric-Ab (lsuc l) l -metric-ab-ℝ l = +metric-ab-add-ℝ : (l : Level) → Metric-Ab (lsuc l) l +metric-ab-add-ℝ l = ( ab-add-ℝ l , structure-Pseudometric-Space (pseudometric-space-ℝ l) , is-extensional-pseudometric-space-ℝ , is-isometry-neg-ℝ , is-isometry-left-add-ℝ) + +complete-metric-ab-add-ℝ : (l : Level) → Complete-Metric-Ab (lsuc l) l +complete-metric-ab-add-ℝ l = + ( metric-ab-add-ℝ l , + is-complete-metric-space-ℝ l) ``` diff --git a/src/real-numbers/multiplication-nonzero-real-numbers.lagda.md b/src/real-numbers/multiplication-nonzero-real-numbers.lagda.md new file mode 100644 index 0000000000..5f6c869630 --- /dev/null +++ b/src/real-numbers/multiplication-nonzero-real-numbers.lagda.md @@ -0,0 +1,68 @@ +# Multiplication of nonzero real numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module real-numbers.multiplication-nonzero-real-numbers where +``` + +
Imports + +```agda +open import foundation.dependent-pair-types +open import foundation.disjunction +open import foundation.function-types +open import foundation.universe-levels + +open import real-numbers.dedekind-real-numbers +open import real-numbers.multiplication-negative-real-numbers +open import real-numbers.multiplication-positive-and-negative-real-numbers +open import real-numbers.multiplication-positive-real-numbers +open import real-numbers.multiplication-real-numbers +open import real-numbers.multiplicative-inverses-nonzero-real-numbers +open import real-numbers.nonzero-real-numbers +``` + +
+ +## Idea + +The +{{#concept "product" Disambiguation="of pairs of nonzero real numbers" Agda=mul-nonzero-ℝ}} +of two [nonzero](real-numbers.nonzero-real-numbers.md) +[real numbers](real-numbers.dedekind-real-numbers.md) is their +[product](real-numbers.multiplication-real-numbers.md) as real numbers, and is +itself nonzero. + +## Definition + +```agda +abstract + is-nonzero-mul-ℝ : + {l1 l2 : Level} {x : ℝ l1} {y : ℝ l2} → is-nonzero-ℝ x → is-nonzero-ℝ y → + is-nonzero-ℝ (x *ℝ y) + is-nonzero-mul-ℝ {x = x} {y = y} x#0 y#0 = + let + motive = is-nonzero-prop-ℝ (x *ℝ y) + in + elim-disjunction + ( motive) + ( λ x<0 → + elim-disjunction + ( motive) + ( inr-disjunction ∘ is-positive-mul-is-negative-ℝ x<0) + ( inl-disjunction ∘ is-negative-mul-negative-positive-ℝ x<0) + ( y#0)) + ( λ 0Imports ```agda +open import foundation.action-on-identifications-functions open import foundation.binary-transport open import foundation.dependent-pair-types open import foundation.disjunction @@ -25,10 +26,13 @@ open import real-numbers.dedekind-real-numbers open import real-numbers.difference-real-numbers open import real-numbers.negation-real-numbers open import real-numbers.negative-real-numbers +open import real-numbers.nonnegative-real-numbers open import real-numbers.positive-and-negative-real-numbers open import real-numbers.positive-real-numbers open import real-numbers.rational-real-numbers open import real-numbers.similarity-real-numbers +open import real-numbers.square-roots-nonnegative-real-numbers +open import real-numbers.squares-real-numbers open import real-numbers.strict-inequalities-addition-and-subtraction-real-numbers open import real-numbers.strict-inequality-real-numbers ``` @@ -162,3 +166,40 @@ module _ ( neg-le-ℝ |x|-ε<-x)))) ( approximate-below-abs-ℝ x ε) ``` + +### `x` is nonzero if and only if `x²` is positive + +```agda +module _ + {l : Level} (x : ℝ l) + where + + abstract + is-positive-square-is-nonzero-ℝ : + is-nonzero-ℝ x → is-positive-ℝ (square-ℝ x) + is-positive-square-is-nonzero-ℝ = + elim-disjunction + ( is-positive-prop-ℝ (square-ℝ x)) + ( λ is-neg-x → is-positive-square-ℝ⁻ (x , is-neg-x)) + ( λ is-pos-x → is-positive-square-ℝ⁺ (x , is-pos-x)) + + is-nonzero-square-is-positive-ℝ : + is-positive-ℝ (square-ℝ x) → is-nonzero-ℝ x + is-nonzero-square-is-positive-ℝ 0Imports ```agda +open import foundation.cartesian-product-types open import foundation.dependent-pair-types +open import foundation.logical-equivalences +open import foundation.negation open import foundation.transport-along-identifications open import foundation.universe-levels @@ -78,6 +81,38 @@ neg-ℝ⁻ : {l : Level} → ℝ⁻ l → ℝ⁺ l neg-ℝ⁻ (x , is-neg-x) = (neg-ℝ x , neg-is-negative-ℝ x is-neg-x) ``` +### A real number is negative if and only if its negation is positive + +```agda +abstract + is-negative-is-positive-neg-ℝ : + {l : Level} (x : ℝ l) → is-positive-ℝ (neg-ℝ x) → is-negative-ℝ x + is-negative-is-positive-neg-ℝ x 0<-x = + tr is-negative-ℝ (neg-neg-ℝ x) (neg-is-positive-ℝ (neg-ℝ x) 0<-x) + +is-negative-iff-neg-is-positive-ℝ : + {l : Level} (x : ℝ l) → is-negative-ℝ x ↔ is-positive-ℝ (neg-ℝ x) +is-negative-iff-neg-is-positive-ℝ x = + ( neg-is-negative-ℝ x , + is-negative-is-positive-neg-ℝ x) +``` + +### A real number is positive if and only if its negation is negative + +```agda +abstract + is-positive-is-negative-neg-ℝ : + {l : Level} (x : ℝ l) → is-negative-ℝ (neg-ℝ x) → is-positive-ℝ x + is-positive-is-negative-neg-ℝ x -x<0 = + tr is-positive-ℝ (neg-neg-ℝ x) (neg-is-negative-ℝ (neg-ℝ x) -x<0) + +is-positive-iff-neg-is-negative-ℝ : + {l : Level} (x : ℝ l) → is-positive-ℝ x ↔ is-negative-ℝ (neg-ℝ x) +is-positive-iff-neg-is-negative-ℝ x = + ( neg-is-positive-ℝ x , + is-positive-is-negative-neg-ℝ x) +``` + ### If a nonnegative real number `x` is less than a real number `y`, `y` is positive ```agda @@ -87,3 +122,13 @@ abstract is-positive-ℝ y is-positive-le-ℝ⁰⁺ (x , 0≤x) y = concatenate-leq-le-ℝ zero-ℝ x y 0≤x ``` + +### Real numbers are not both negative and nonnegative + +```agda +abstract + is-not-negative-and-nonnegative-ℝ : + {l : Level} {x : ℝ l} → ¬ (is-negative-ℝ x × is-nonnegative-ℝ x) + is-not-negative-and-nonnegative-ℝ {x = x} (x<0 , 0≤x) = + not-leq-le-ℝ x zero-ℝ x<0 0≤x +``` diff --git a/src/real-numbers/positive-real-numbers.lagda.md b/src/real-numbers/positive-real-numbers.lagda.md index ab55377d25..d14d3b0658 100644 --- a/src/real-numbers/positive-real-numbers.lagda.md +++ b/src/real-numbers/positive-real-numbers.lagda.md @@ -9,6 +9,10 @@ module real-numbers.positive-real-numbers where
Imports ```agda +open import elementary-number-theory.integers +open import elementary-number-theory.natural-numbers +open import elementary-number-theory.nonzero-natural-numbers +open import elementary-number-theory.positive-integers open import elementary-number-theory.positive-rational-numbers open import elementary-number-theory.rational-numbers open import elementary-number-theory.strict-inequality-positive-rational-numbers @@ -202,44 +206,6 @@ exists-ℚ⁺-in-lower-cut-ℝ⁺ : exists-ℚ⁺-in-lower-cut-ℝ⁺ = ind-Σ exists-ℚ⁺-in-lower-cut-is-positive-ℝ ``` -### Addition with a positive real number is a strictly inflationary map - -```agda -abstract opaque - unfolding add-ℝ le-ℝ - - le-left-add-real-ℝ⁺ : - {l1 l2 : Level} → (x : ℝ l1) (d : ℝ⁺ l2) → le-ℝ x (x +ℝ real-ℝ⁺ d) - le-left-add-real-ℝ⁺ x d⁺@(d , pos-d) = - tr - ( λ y → le-ℝ y (x +ℝ d)) - ( right-unit-law-add-ℝ x) - ( preserves-le-left-add-ℝ x zero-ℝ d pos-d) - -le-right-add-real-ℝ⁺ : - {l1 l2 : Level} → (x : ℝ l1) (d : ℝ⁺ l2) → le-ℝ x (real-ℝ⁺ d +ℝ x) -le-right-add-real-ℝ⁺ x d = - tr (le-ℝ x) (commutative-add-ℝ x (real-ℝ⁺ d)) (le-left-add-real-ℝ⁺ x d) -``` - -### Subtraction by a positive real number is a strictly deflationary map - -```agda -abstract - le-diff-real-ℝ⁺ : - {l1 l2 : Level} → (x : ℝ l1) (d : ℝ⁺ l2) → le-ℝ (x -ℝ real-ℝ⁺ d) x - le-diff-real-ℝ⁺ x d⁺@(d , _) = - preserves-le-right-sim-ℝ - ( x -ℝ d) - ( (x -ℝ d) +ℝ d) - ( x) - ( tr - ( λ y → sim-ℝ y x) - ( right-swap-add-ℝ x d (neg-ℝ d)) - ( cancel-right-add-diff-ℝ x d)) - ( le-left-add-real-ℝ⁺ (x -ℝ d) d⁺) -``` - ### `x < y` if and only if `y - x` is positive ```agda @@ -291,6 +257,32 @@ one-ℝ⁺ : ℝ⁺ lzero one-ℝ⁺ = positive-real-ℚ⁺ one-ℚ⁺ ``` +### The canonical embedding of integers preserves positivity + +```agda +abstract + preserves-is-positive-real-ℤ : + {x : ℤ} → is-positive-ℤ x → is-positive-ℝ (real-ℤ x) + preserves-is-positive-real-ℤ pos-x = + preserves-is-positive-real-ℚ (is-positive-rational-ℤ pos-x) + +positive-real-ℤ⁺ : ℤ⁺ → ℝ⁺ lzero +positive-real-ℤ⁺ (x , pos-x) = (real-ℤ x , preserves-is-positive-real-ℤ pos-x) +``` + +### The canonical embedding of a nonzero natural number is positive + +```agda +abstract + is-positive-real-is-nonzero-ℕ : + {n : ℕ} → is-nonzero-ℕ n → is-positive-ℝ (real-ℕ n) + is-positive-real-is-nonzero-ℕ n≠0 = + preserves-is-positive-real-ℤ (is-positive-int-is-nonzero-ℕ _ n≠0) + +positive-real-ℕ⁺ : ℕ⁺ → ℝ⁺ lzero +positive-real-ℕ⁺ (n , n≠0) = (real-ℕ n , is-positive-real-is-nonzero-ℕ n≠0) +``` + ### `x` is positive if and only if there exists a positive rational number it is not less than or equal to ```agda diff --git a/src/real-numbers/raising-universe-levels-real-numbers.lagda.md b/src/real-numbers/raising-universe-levels-real-numbers.lagda.md index c3f1b1d417..8a8d783ae8 100644 --- a/src/real-numbers/raising-universe-levels-real-numbers.lagda.md +++ b/src/real-numbers/raising-universe-levels-real-numbers.lagda.md @@ -170,9 +170,13 @@ module _ opaque unfolding sim-ℝ - sim-raise-ℝ : {l0 : Level} → (l : Level) → (x : ℝ l0) → sim-ℝ x (raise-ℝ l x) + sim-raise-ℝ : {l0 : Level} (l : Level) (x : ℝ l0) → sim-ℝ x (raise-ℝ l x) pr1 (sim-raise-ℝ l x) _ = map-raise pr2 (sim-raise-ℝ l x) _ = map-inv-raise + +abstract + sim-raise-ℝ' : {l0 : Level} (l : Level) (x : ℝ l0) → sim-ℝ (raise-ℝ l x) x + sim-raise-ℝ' l x = symmetric-sim-ℝ (sim-raise-ℝ l x) ``` ### Raising a real to its own level is the identity diff --git a/src/real-numbers/rational-real-numbers.lagda.md b/src/real-numbers/rational-real-numbers.lagda.md index 285729c4a4..4e48764ed5 100644 --- a/src/real-numbers/rational-real-numbers.lagda.md +++ b/src/real-numbers/rational-real-numbers.lagda.md @@ -10,6 +10,7 @@ module real-numbers.rational-real-numbers where ```agda open import elementary-number-theory.integers +open import elementary-number-theory.natural-numbers open import elementary-number-theory.nonnegative-rational-numbers open import elementary-number-theory.positive-rational-numbers open import elementary-number-theory.rational-numbers @@ -83,6 +84,13 @@ real-ℤ : ℤ → ℝ lzero real-ℤ x = real-ℚ (rational-ℤ x) ``` +### The canonical map from `ℕ` to `ℝ lzero` + +```agda +real-ℕ : ℕ → ℝ lzero +real-ℕ n = real-ℤ (int-ℕ n) +``` + ### Zero as a real number ```agda diff --git a/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md b/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md index 69f3a5fb11..ef8ef84722 100644 --- a/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md +++ b/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md @@ -57,15 +57,16 @@ module _ ### If a nonnegative real number is less than or equal to all positive rational numbers, it is similar to zero ```agda -sim-zero-le-positive-rational-ℝ⁰⁺ : - {l : Level} (x : ℝ⁰⁺ l) → - ((ε : ℚ⁺) → leq-ℝ⁰⁺ x (nonnegative-real-ℚ⁺ ε)) → - sim-zero-ℝ⁰⁺ x -sim-zero-le-positive-rational-ℝ⁰⁺ x H = - sim-sim-leq-ℝ - ( leq-zero-ℝ⁰⁺ x , - saturated-leq-ℝ⁰⁺ - ( x) - ( zero-ℝ⁰⁺) - ( λ ε → inv-tr (leq-ℝ⁰⁺ x) (left-unit-law-add-ℝ⁰⁺ _) (H ε))) +abstract + sim-zero-leq-positive-rational-ℝ⁰⁺ : + {l : Level} (x : ℝ⁰⁺ l) → + ((ε : ℚ⁺) → leq-ℝ⁰⁺ x (nonnegative-real-ℚ⁺ ε)) → + sim-zero-ℝ⁰⁺ x + sim-zero-leq-positive-rational-ℝ⁰⁺ x H = + sim-sim-leq-ℝ + ( leq-zero-ℝ⁰⁺ x , + saturated-leq-ℝ⁰⁺ + ( x) + ( zero-ℝ⁰⁺) + ( λ ε → inv-tr (leq-ℝ⁰⁺ x) (left-unit-law-add-ℝ⁰⁺ _) (H ε))) ``` diff --git a/src/real-numbers/series-real-numbers.lagda.md b/src/real-numbers/series-real-numbers.lagda.md index f3d0ecf21e..e85b062a00 100644 --- a/src/real-numbers/series-real-numbers.lagda.md +++ b/src/real-numbers/series-real-numbers.lagda.md @@ -16,7 +16,7 @@ open import foundation.universe-levels open import lists.sequences open import real-numbers.dedekind-real-numbers -open import real-numbers.metric-abelian-group-of-real-numbers +open import real-numbers.metric-additive-group-of-real-numbers ```
@@ -26,13 +26,13 @@ open import real-numbers.metric-abelian-group-of-real-numbers A {{#concept "series" Disambiguation="of real numbers" Agda=series-ℝ}} of [real numbers](real-numbers.dedekind-real-numbers.md) is an infinite sum $$∑_{n=0}^∞ a_n$$, which is evaluated for convergence in the -[metric abelian group of real numbers](real-numbers.metric-abelian-group-of-real-numbers.md). +[metric abelian group of real numbers](real-numbers.metric-additive-group-of-real-numbers.md). ## Definition ```agda series-ℝ : (l : Level) → UU (lsuc l) -series-ℝ l = series-Metric-Ab (metric-ab-ℝ l) +series-ℝ l = series-Metric-Ab (metric-ab-add-ℝ l) series-terms-ℝ : {l : Level} → sequence (ℝ l) → series-ℝ l series-terms-ℝ = series-terms-Metric-Ab diff --git a/src/real-numbers/square-roots-nonnegative-real-numbers.lagda.md b/src/real-numbers/square-roots-nonnegative-real-numbers.lagda.md index d73dc98a0f..d7c62f6516 100644 --- a/src/real-numbers/square-roots-nonnegative-real-numbers.lagda.md +++ b/src/real-numbers/square-roots-nonnegative-real-numbers.lagda.md @@ -53,10 +53,14 @@ open import real-numbers.inequality-real-numbers open import real-numbers.multiplication-nonnegative-real-numbers open import real-numbers.multiplication-real-numbers open import real-numbers.nonnegative-real-numbers +open import real-numbers.positive-and-negative-real-numbers +open import real-numbers.positive-real-numbers open import real-numbers.rational-real-numbers open import real-numbers.similarity-nonnegative-real-numbers open import real-numbers.similarity-real-numbers open import real-numbers.squares-real-numbers +open import real-numbers.strict-inequality-nonnegative-real-numbers +open import real-numbers.strict-inequality-real-numbers ```
@@ -646,3 +650,21 @@ abstract ( is-section-square-ℝ⁰⁺ x) ( is-section-square-ℝ⁰⁺ y))))))) ``` + +### The square root of a positive real number is positive + +```agda +abstract opaque + unfolding real-sqrt-ℝ⁰⁺ + + is-positive-sqrt-ℝ⁺ : + {l : Level} (x : ℝ⁺ l) → is-positive-ℝ (real-sqrt-ℝ⁰⁺ (nonnegative-ℝ⁺ x)) + is-positive-sqrt-ℝ⁺ x⁺@(x , _) = + is-positive-zero-in-lower-cut-ℝ + ( real-sqrt-ℝ⁰⁺ (nonnegative-ℝ⁺ x⁺)) + ( λ _ → + inv-tr + ( is-in-lower-cut-ℝ x) + ( left-zero-law-mul-ℚ zero-ℚ) + ( zero-in-lower-cut-ℝ⁺ x⁺)) +``` diff --git a/src/real-numbers/squares-real-numbers.lagda.md b/src/real-numbers/squares-real-numbers.lagda.md index 86d106d8c6..d64d870327 100644 --- a/src/real-numbers/squares-real-numbers.lagda.md +++ b/src/real-numbers/squares-real-numbers.lagda.md @@ -20,6 +20,7 @@ open import elementary-number-theory.negative-rational-numbers open import elementary-number-theory.nonnegative-rational-numbers open import elementary-number-theory.positive-rational-numbers open import elementary-number-theory.rational-numbers +open import elementary-number-theory.square-roots-positive-rational-numbers open import elementary-number-theory.squares-rational-numbers open import elementary-number-theory.strict-inequality-rational-numbers @@ -31,8 +32,11 @@ open import foundation.propositional-truncations open import foundation.transport-along-identifications open import foundation.universe-levels +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.enclosing-closed-rational-intervals-real-numbers +open import real-numbers.inequality-nonnegative-real-numbers open import real-numbers.multiplication-nonnegative-real-numbers open import real-numbers.multiplication-positive-real-numbers open import real-numbers.multiplication-real-numbers @@ -218,6 +222,25 @@ abstract ( preserves-le-right-mul-ℝ⁺ (y , is-positive-le-ℝ⁰⁺ x⁰⁺ y xImports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups + +open import lists.finite-sequences + +open import real-numbers.dedekind-real-numbers +open import real-numbers.large-additive-group-of-real-numbers +``` + + + +## Idea + +The +{{#concept "sum operation" Disambiguation="of a finite sequence in ℝ" WD="sum" WDID=Q218005 Agda=sum-fin-sequence-ℝ}} +extends the operation of [addition](real-numbers.addition-real-numbers.md) on +the [real numbers](real-numbers.dedekind-real-numbers.md) to any +[finite sequence](lists.finite-sequences.md) of real numbers. + +## Definition + +```agda +sum-fin-sequence-ℝ : {l : Level} (n : ℕ) → fin-sequence (ℝ l) n → ℝ l +sum-fin-sequence-ℝ {l} = sum-fin-sequence-type-Ab (ab-add-ℝ l) +``` diff --git a/src/ring-theory/arithmetic-series-semirings.lagda.md b/src/ring-theory/arithmetic-series-semirings.lagda.md index af626c0a4d..653e708c38 100644 --- a/src/ring-theory/arithmetic-series-semirings.lagda.md +++ b/src/ring-theory/arithmetic-series-semirings.lagda.md @@ -180,7 +180,7 @@ module _ compute-sum-add-mul-nat-Semiring n = ap-binary ( add-Semiring R) - ( inv (constant-sum-fin-sequence-type-Semiring R (succ-ℕ n) a)) + ( inv (sum-constant-fin-sequence-type-Semiring R (succ-ℕ n) a)) ( ( ap ( λ i → multiple-Semiring R i d) ( htpy-sum-leq-triangular-ℕ n)) ∙ diff --git a/src/ring-theory/sums-of-finite-sequences-of-elements-rings.lagda.md b/src/ring-theory/sums-of-finite-sequences-of-elements-rings.lagda.md index c65dd2c1a7..17eec95acf 100644 --- a/src/ring-theory/sums-of-finite-sequences-of-elements-rings.lagda.md +++ b/src/ring-theory/sums-of-finite-sequences-of-elements-rings.lagda.md @@ -26,6 +26,7 @@ open import linear-algebra.linear-maps-left-modules-rings open import lists.finite-sequences +open import ring-theory.multiples-of-elements-rings open import ring-theory.rings open import ring-theory.sums-of-finite-sequences-of-elements-semirings @@ -254,6 +255,18 @@ module _ ( λ c x → inv (left-distributive-mul-sum-fin-sequence-type-Ring R n c x)) ``` +### The sum of a constant finite sequence in a ring is scalar multiplication by the length of the sequence + +```agda +abstract + sum-constant-fin-sequence-type-Ring : + {l : Level} (R : Ring l) (n : ℕ) (x : type-Ring R) → + sum-fin-sequence-type-Ring R n (λ _ → x) = + multiple-Ring R n x + sum-constant-fin-sequence-type-Ring R = + sum-constant-fin-sequence-type-Semiring ( semiring-Ring R) +``` + ## See also - [Sums of finite families of elements in rings](ring-theory.sums-of-finite-families-of-elements-rings.md) diff --git a/src/ring-theory/sums-of-finite-sequences-of-elements-semirings.lagda.md b/src/ring-theory/sums-of-finite-sequences-of-elements-semirings.lagda.md index fc420c7089..be44be3ed9 100644 --- a/src/ring-theory/sums-of-finite-sequences-of-elements-semirings.lagda.md +++ b/src/ring-theory/sums-of-finite-sequences-of-elements-semirings.lagda.md @@ -286,12 +286,12 @@ module _ ```agda abstract - constant-sum-fin-sequence-type-Semiring : + sum-constant-fin-sequence-type-Semiring : {l : Level} (R : Semiring l) (n : ℕ) (x : type-Semiring R) → sum-fin-sequence-type-Semiring R n (λ _ → x) = multiple-Semiring R n x - constant-sum-fin-sequence-type-Semiring R = - constant-sum-fin-sequence-type-Commutative-Monoid + sum-constant-fin-sequence-type-Semiring R = + sum-constant-fin-sequence-type-Commutative-Monoid ( additive-commutative-monoid-Semiring R) ```