diff --git a/src/commutative-algebra/geometric-sequences-commutative-semirings.lagda.md b/src/commutative-algebra/geometric-sequences-commutative-semirings.lagda.md
index 1e4b7ed9f9..71fcbc05c1 100644
--- a/src/commutative-algebra/geometric-sequences-commutative-semirings.lagda.md
+++ b/src/commutative-algebra/geometric-sequences-commutative-semirings.lagda.md
@@ -341,7 +341,7 @@ module _
ap-add-Commutative-Semiring R
( ap
( seq-standard-geometric-sequence-Commutative-Semiring R a r)
- ( is-zero-nat-zero-Fin {n}))
+ ( nat-zero-Fin n))
( htpy-sum-fin-sequence-type-Commutative-Semiring R n
( λ i →
ap
diff --git a/src/elementary-number-theory/congruence-natural-numbers.lagda.md b/src/elementary-number-theory/congruence-natural-numbers.lagda.md
index 0abb907785..7e3142369f 100644
--- a/src/elementary-number-theory/congruence-natural-numbers.lagda.md
+++ b/src/elementary-number-theory/congruence-natural-numbers.lagda.md
@@ -141,7 +141,7 @@ eq-cong-nat-Fin (succ-ℕ k) x y H =
cong-is-zero-nat-zero-Fin :
{k : ℕ} → cong-ℕ (succ-ℕ k) (nat-Fin (succ-ℕ k) (zero-Fin k)) zero-ℕ
cong-is-zero-nat-zero-Fin {k} =
- cong-identification-ℕ (succ-ℕ k) (is-zero-nat-zero-Fin {k})
+ cong-identification-ℕ (succ-ℕ k) (nat-zero-Fin k)
```
```agda
diff --git a/src/elementary-number-theory/finitary-natural-numbers.lagda.md b/src/elementary-number-theory/finitary-natural-numbers.lagda.md
index 57acf9d9c0..2d96a63866 100644
--- a/src/elementary-number-theory/finitary-natural-numbers.lagda.md
+++ b/src/elementary-number-theory/finitary-natural-numbers.lagda.md
@@ -193,7 +193,7 @@ convert-based-succ-based-ℕ
( succ-ℕ k) (constant-based-ℕ .(succ-ℕ k) (inr _)) =
( ap
( λ t → ((succ-ℕ k) *ℕ (succ-ℕ t)) +ℕ t)
- ( is-zero-nat-zero-Fin {k})) ∙
+ ( nat-zero-Fin k)) ∙
( right-unit-law-mul-ℕ (succ-ℕ k))
convert-based-succ-based-ℕ (succ-ℕ k) (unary-op-based-ℕ .(succ-ℕ k) (inl x) n) =
ap
@@ -205,7 +205,7 @@ convert-based-succ-based-ℕ
( ( ( succ-ℕ k) *ℕ
( succ-ℕ (convert-based-ℕ (succ-ℕ k) (succ-based-ℕ (succ-ℕ k) n))))
+ℕ_)
- ( is-zero-nat-zero-Fin {k})) ∙
+ ( nat-zero-Fin k)) ∙
( ( ap
( ((succ-ℕ k) *ℕ_) ∘ succ-ℕ)
( convert-based-succ-based-ℕ (succ-ℕ k) n)) ∙
@@ -218,7 +218,7 @@ convert-based-succ-based-ℕ
is-section-inv-convert-based-ℕ :
(k n : ℕ) → convert-based-ℕ (succ-ℕ k) (inv-convert-based-ℕ k n) = n
-is-section-inv-convert-based-ℕ k zero-ℕ = is-zero-nat-zero-Fin {k}
+is-section-inv-convert-based-ℕ k zero-ℕ = nat-zero-Fin k
is-section-inv-convert-based-ℕ k (succ-ℕ n) =
( convert-based-succ-based-ℕ (succ-ℕ k) (inv-convert-based-ℕ k n)) ∙
( ap succ-ℕ (is-section-inv-convert-based-ℕ k n))
diff --git a/src/elementary-number-theory/inequality-standard-finite-types.lagda.md b/src/elementary-number-theory/inequality-standard-finite-types.lagda.md
index 86135f39fc..a3514373d2 100644
--- a/src/elementary-number-theory/inequality-standard-finite-types.lagda.md
+++ b/src/elementary-number-theory/inequality-standard-finite-types.lagda.md
@@ -24,6 +24,7 @@ open import foundation.propositions
open import foundation.unit-type
open import foundation.universe-levels
+open import order-theory.order-preserving-maps-posets
open import order-theory.posets
open import order-theory.preorders
@@ -146,6 +147,18 @@ abstract
reflects-leq-nat-Fin (succ-ℕ k) {inr star} {inr star} H = star
```
+### The reverse embedding of the standard finite types in the natural numbers reverses inequality
+
+```agda
+abstract
+ is-decreasing-nat-Fin-reverse :
+ (k : ℕ) (x y : Fin k) → leq-Fin k x y →
+ leq-ℕ (nat-Fin-reverse k y) (nat-Fin-reverse k x)
+ is-decreasing-nat-Fin-reverse (succ-ℕ k) x (inr star) x≤y = star
+ is-decreasing-nat-Fin-reverse (succ-ℕ k) (inl x) (inl y) x≤y =
+ is-decreasing-nat-Fin-reverse k x y x≤y
+```
+
### Ordering on the standard finite types is decidable
```agda
@@ -169,3 +182,26 @@ linear-leq-Fin (succ-ℕ k) (inl x) (inl y) = linear-leq-Fin k x y
linear-leq-Fin (succ-ℕ k) (inl x) (inr y) = inl star
linear-leq-Fin (succ-ℕ k) (inr x) y = inr star
```
+
+### `inr-Fin` preserves inequality
+
+```agda
+abstract
+ preserves-order-inr-Fin :
+ (n : ℕ) →
+ preserves-order-Poset (Fin-Poset n) (Fin-Poset (succ-ℕ n)) (inr-Fin n)
+ preserves-order-inr-Fin (succ-ℕ n) (inl x) (inl y) x≤y =
+ preserves-order-inr-Fin n x y x≤y
+ preserves-order-inr-Fin (succ-ℕ n) (inl x) (inr star) _ = star
+ preserves-order-inr-Fin (succ-ℕ n) (inr x) (inr star) _ = star
+```
+
+### `zero-Fin n` is the least element of `Fin (succ-ℕ n)`
+
+```agda
+abstract
+ leq-zero-Fin :
+ (n : ℕ) (i : Fin (succ-ℕ n)) → leq-Fin (succ-ℕ n) (zero-Fin n) i
+ leq-zero-Fin n (inr star) = star
+ leq-zero-Fin (succ-ℕ n) (inl i) = leq-zero-Fin n i
+```
diff --git a/src/elementary-number-theory/modular-arithmetic-standard-finite-types.lagda.md b/src/elementary-number-theory/modular-arithmetic-standard-finite-types.lagda.md
index 302d0c9537..06bfd5591f 100644
--- a/src/elementary-number-theory/modular-arithmetic-standard-finite-types.lagda.md
+++ b/src/elementary-number-theory/modular-arithmetic-standard-finite-types.lagda.md
@@ -72,7 +72,7 @@ cong-nat-succ-Fin (succ-ℕ k) (inr _) =
{ nat-Fin (succ-ℕ k) (zero-Fin k)}
{ zero-ℕ}
{ succ-ℕ k}
- ( is-zero-nat-zero-Fin {k})
+ ( nat-zero-Fin k)
( cong-zero-ℕ' (succ-ℕ k))
cong-nat-mod-succ-ℕ :
@@ -181,7 +181,7 @@ is-surjective-mod-succ-ℕ k =
leq-nat-mod-succ-ℕ :
(k x : ℕ) → leq-ℕ (nat-Fin (succ-ℕ k) (mod-succ-ℕ k x)) x
leq-nat-mod-succ-ℕ k zero-ℕ =
- concatenate-eq-leq-ℕ zero-ℕ (is-zero-nat-zero-Fin {k}) (refl-leq-ℕ zero-ℕ)
+ concatenate-eq-leq-ℕ zero-ℕ (nat-zero-Fin k) (refl-leq-ℕ zero-ℕ)
leq-nat-mod-succ-ℕ k (succ-ℕ x) =
transitive-leq-ℕ
( nat-Fin (succ-ℕ k) (mod-succ-ℕ k (succ-ℕ x)))
@@ -611,8 +611,8 @@ left-zero-law-mul-Fin k x =
( succ-ℕ k)
{ (nat-Fin (succ-ℕ k) (zero-Fin k)) *ℕ (nat-Fin (succ-ℕ k) x)}
{ nat-Fin (succ-ℕ k) (zero-Fin k)}
- ( ( ap (_*ℕ (nat-Fin (succ-ℕ k) x)) (is-zero-nat-zero-Fin {k})) ∙
- ( inv (is-zero-nat-zero-Fin {k}))))) ∙
+ ( ( ap (_*ℕ (nat-Fin (succ-ℕ k) x)) (nat-zero-Fin k)) ∙
+ ( inv (nat-zero-Fin k))))) ∙
( is-section-nat-Fin k (zero-Fin k))
right-zero-law-mul-Fin :
diff --git a/src/elementary-number-theory/modular-arithmetic.lagda.md b/src/elementary-number-theory/modular-arithmetic.lagda.md
index b63e1fc243..3921c89047 100644
--- a/src/elementary-number-theory/modular-arithmetic.lagda.md
+++ b/src/elementary-number-theory/modular-arithmetic.lagda.md
@@ -150,7 +150,7 @@ abstract
is-zero-int-zero-ℤ-Mod : (k : ℕ) → is-zero-ℤ (int-ℤ-Mod k (zero-ℤ-Mod k))
is-zero-int-zero-ℤ-Mod (zero-ℕ) = refl
- is-zero-int-zero-ℤ-Mod (succ-ℕ k) = ap int-ℕ (is-zero-nat-zero-Fin {k})
+ is-zero-int-zero-ℤ-Mod (succ-ℕ k) = ap int-ℕ (nat-zero-Fin k)
int-ℤ-Mod-bounded :
(k : ℕ) → (x : ℤ-Mod (succ-ℕ k)) →
diff --git a/src/elementary-number-theory/rational-numbers.lagda.md b/src/elementary-number-theory/rational-numbers.lagda.md
index 81bfd369b5..d5b08eebd8 100644
--- a/src/elementary-number-theory/rational-numbers.lagda.md
+++ b/src/elementary-number-theory/rational-numbers.lagda.md
@@ -14,6 +14,7 @@ open import elementary-number-theory.integers
open import elementary-number-theory.mediant-integer-fractions
open import elementary-number-theory.multiplication-integers
open import elementary-number-theory.natural-numbers
+open import elementary-number-theory.nonzero-natural-numbers
open import elementary-number-theory.positive-and-negative-integers
open import elementary-number-theory.positive-integers
open import elementary-number-theory.reduced-integer-fractions
@@ -117,6 +118,9 @@ pr2 (rational-ℤ x) = is-one-gcd-one-ℤ' x
```agda
rational-ℕ : ℕ → ℚ
rational-ℕ n = rational-ℤ (int-ℕ n)
+
+rational-ℕ⁺ : ℕ⁺ → ℚ
+rational-ℕ⁺ n = rational-ℕ (nat-ℕ⁺ n)
```
### Negative one, zero and one
diff --git a/src/finite-group-theory/simpson-delooping-sign-homomorphism.lagda.md b/src/finite-group-theory/simpson-delooping-sign-homomorphism.lagda.md
index 23130c0507..79a689660a 100644
--- a/src/finite-group-theory/simpson-delooping-sign-homomorphism.lagda.md
+++ b/src/finite-group-theory/simpson-delooping-sign-homomorphism.lagda.md
@@ -135,7 +135,7 @@ module _
( sign-homomorphism-Fin-2 n
( Fin-Type-With-Cardinality-ℕ n)
( inv-equiv (inv-equiv f ∘e g)))) +ℕ_)
- ( is-zero-nat-zero-Fin {k = 1}) ∙
+ ( nat-zero-Fin 1) ∙
( is-section-nat-Fin 1
( sign-homomorphism-Fin-2 n
( Fin-Type-With-Cardinality-ℕ n)
diff --git a/src/foundation/null-homotopic-maps.lagda.md b/src/foundation/null-homotopic-maps.lagda.md
index 23da431fc0..b2fb80e9b6 100644
--- a/src/foundation/null-homotopic-maps.lagda.md
+++ b/src/foundation/null-homotopic-maps.lagda.md
@@ -7,6 +7,7 @@ module foundation.null-homotopic-maps where
Imports
```agda
+open import foundation.action-on-identifications-functions
open import foundation.coherently-constant-maps
open import foundation.commuting-triangles-of-identifications
open import foundation.constant-maps
@@ -14,6 +15,7 @@ open import foundation.dependent-pair-types
open import foundation.dependent-products-propositions
open import foundation.empty-types
open import foundation.equivalences-contractible-types
+open import foundation.function-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.homotopy-induction
open import foundation.identity-types
@@ -366,6 +368,21 @@ module _
( is-null-homotopic-null-homotopic-map f)
```
+### Null-homotopic maps are preserved by left composition
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3}
+ (f : B → C) {g : A → B}
+ (K@(b , fa=b) : is-null-homotopic-map g)
+ where
+
+ left-comp-is-null-homotopic-map : is-null-homotopic-map (f ∘ g)
+ left-comp-is-null-homotopic-map =
+ ( f b ,
+ λ a → ap f (fa=b a))
+```
+
## See also
- Null-homotopic maps are
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 e0436da863..e21cf5f9ab 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
@@ -21,6 +21,7 @@ open import foundation.equivalences
open import foundation.function-types
open import foundation.homotopies
open import foundation.identity-types
+open import foundation.unit-type
open import foundation.universe-levels
open import group-theory.abelian-groups
@@ -321,20 +322,21 @@ module _
sum-telescope-fin-sequence-type-Ab :
(n : ℕ) (u : fin-sequence-type-Ab G (succ-ℕ n)) →
sum-fin-sequence-type-Ab G n (telescope-fin-sequence-type-Ab n u) =
- right-subtraction-Ab G (head-fin-sequence n u) (last-fin-sequence n u)
+ right-subtraction-Ab G (last-fin-sequence n u) (head-fin-sequence n u)
sum-telescope-fin-sequence-type-Ab 0 u =
- inv (right-inverse-law-add-Ab G (head-fin-sequence 0 u))
+ inv (right-inverse-law-add-Ab G (u (inr star)))
sum-telescope-fin-sequence-type-Ab (succ-ℕ n) u =
( ap-add-Ab G
- ( sum-telescope-fin-sequence-type-Ab n (tail-fin-sequence (succ-ℕ n) u))
+ ( sum-telescope-fin-sequence-type-Ab
+ ( n)
+ ( tail-fin-sequence (succ-ℕ n) u))
( refl)) ∙
- ( commutative-add-Ab G _ _) ∙
( add-right-subtraction-Ab G _ _ _)
sum-telescope-fin-sequence-type-Ab' :
(n : ℕ) (u : fin-sequence-type-Ab G (succ-ℕ n)) →
sum-fin-sequence-type-Ab G n (telescope-fin-sequence-type-Ab' n u) =
- right-subtraction-Ab G (last-fin-sequence n u) (head-fin-sequence n u)
+ right-subtraction-Ab G (head-fin-sequence n u) (last-fin-sequence n u)
sum-telescope-fin-sequence-type-Ab' n u =
( htpy-sum-fin-sequence-type-Ab G
( n)
diff --git a/src/lists.lagda.md b/src/lists.lagda.md
index b8fb537ab6..4ec538b113 100644
--- a/src/lists.lagda.md
+++ b/src/lists.lagda.md
@@ -23,6 +23,7 @@ open import lists.functoriality-tuples-finite-sequences public
open import lists.insert-at-index-finite-sequences public
open import lists.lists public
open import lists.lists-discrete-types public
+open import lists.nonempty-arrays public
open import lists.pairs-of-successive-elements-finite-sequences public
open import lists.partial-sequences public
open import lists.permutation-lists public
diff --git a/src/lists/arrays.lagda.md b/src/lists/arrays.lagda.md
index 08bc9b865b..91dd108515 100644
--- a/src/lists/arrays.lagda.md
+++ b/src/lists/arrays.lagda.md
@@ -71,19 +71,6 @@ module _
is-empty-array : array A → UU lzero
is-empty-array = type-Prop ∘ is-empty-array-Prop
- is-nonempty-array-Prop : array A → Prop lzero
- is-nonempty-array-Prop (zero-ℕ , t) = empty-Prop
- is-nonempty-array-Prop (succ-ℕ n , t) = unit-Prop
-
- is-nonempty-array : array A → UU lzero
- is-nonempty-array = type-Prop ∘ is-nonempty-array-Prop
-
- head-array : (t : array A) → is-nonempty-array t → A
- head-array (succ-ℕ n , f) _ = f (inr star)
-
- tail-array : (t : array A) → is-nonempty-array t → array A
- tail-array (succ-ℕ n , f) _ = n , f ∘ inl
-
cons-array : A → array A → array A
cons-array a t =
( succ-ℕ (length-array t) ,
diff --git a/src/lists/finite-sequences.lagda.md b/src/lists/finite-sequences.lagda.md
index c481b3bba9..27f4e84e9d 100644
--- a/src/lists/finite-sequences.lagda.md
+++ b/src/lists/finite-sequences.lagda.md
@@ -181,7 +181,7 @@ module _
eq-zero-fin-sequence-sequence :
(n : ℕ) → fin-sequence-sequence (succ-ℕ n) (zero-Fin n) = u 0
- eq-zero-fin-sequence-sequence n = ap u (is-zero-nat-zero-Fin {n})
+ eq-zero-fin-sequence-sequence n = ap u (nat-zero-Fin n)
eq-skip-zero-fin-sequence-sequence :
(n : ℕ) (i : Fin n) →
diff --git a/src/lists/nonempty-arrays.lagda.md b/src/lists/nonempty-arrays.lagda.md
new file mode 100644
index 0000000000..c9410440e9
--- /dev/null
+++ b/src/lists/nonempty-arrays.lagda.md
@@ -0,0 +1,83 @@
+# Nonempty arrays
+
+```agda
+module lists.nonempty-arrays where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.natural-numbers
+open import elementary-number-theory.nonzero-natural-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.empty-types
+open import foundation.function-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.unit-type
+open import foundation.universe-levels
+
+open import lists.arrays
+open import lists.finite-sequences
+
+open import univalent-combinatorics.standard-finite-types
+```
+
+
+
+## Idea
+
+An [array](lists.arrays.md) is
+{{#concept "nonempty" Disambiguation="arrays" Agda=is-nonempty-array}} if it has
+at least one element.
+
+## Definition
+
+```agda
+module _
+ {l : Level} {A : UU l}
+ where
+
+ is-nonempty-array-Prop : array A → Prop lzero
+ is-nonempty-array-Prop (zero-ℕ , t) = empty-Prop
+ is-nonempty-array-Prop (succ-ℕ n , t) = unit-Prop
+
+ is-nonempty-array : array A → UU lzero
+ is-nonempty-array = type-Prop ∘ is-nonempty-array-Prop
+
+nonempty-array : {l : Level} → UU l → UU l
+nonempty-array A = type-subtype (is-nonempty-array-Prop {A = A})
+
+module _
+ {l : Level} {A : UU l}
+ where
+
+ length-nonempty-array : nonempty-array A → ℕ
+ length-nonempty-array ((n , _) , _) = n
+
+ is-nonzero-length-nonempty-array :
+ (a : nonempty-array A) → is-nonzero-ℕ (length-nonempty-array a)
+ is-nonzero-length-nonempty-array ((succ-ℕ n , _) , _) ()
+
+ nonzero-length-nonempty-array : nonempty-array A → ℕ⁺
+ nonzero-length-nonempty-array a =
+ ( length-nonempty-array a ,
+ is-nonzero-length-nonempty-array a)
+
+ fin-sequence-nonempty-array :
+ (a : nonempty-array A) → fin-sequence A (length-nonempty-array a)
+ fin-sequence-nonempty-array ((_ , u) , _) = u
+
+ head-nonempty-array : nonempty-array A → A
+ head-nonempty-array ((succ-ℕ n , u) , _) = u (neg-one-Fin n)
+
+ tail-nonempty-array : nonempty-array A → array A
+ tail-nonempty-array ((succ-ℕ n , u) , _) = (n , u ∘ inl-Fin n)
+
+ last-nonempty-array : nonempty-array A → A
+ last-nonempty-array ((succ-ℕ n , u) , _) = u (zero-Fin n)
+
+ init-nonempty-array : nonempty-array A → array A
+ init-nonempty-array ((succ-ℕ n , u) , _) = (n , u ∘ skip-zero-Fin n)
+```
diff --git a/src/lists/pairs-of-successive-elements-finite-sequences.lagda.md b/src/lists/pairs-of-successive-elements-finite-sequences.lagda.md
index 56e8e4845c..d14baa06a9 100644
--- a/src/lists/pairs-of-successive-elements-finite-sequences.lagda.md
+++ b/src/lists/pairs-of-successive-elements-finite-sequences.lagda.md
@@ -39,6 +39,6 @@ pair-succ-fin-sequence :
{l : Level} {A : UU l} (n : ℕ) →
fin-sequence A (succ-ℕ n) → fin-sequence (A × A) n
pair-succ-fin-sequence n a i =
- ( a (skip-zero-Fin n i) ,
- a (inl-Fin n i))
+ ( a (inl-Fin n i) ,
+ a (inr-Fin n i))
```
diff --git a/src/literature/introduction-to-homotopy-type-theory.lagda.md b/src/literature/introduction-to-homotopy-type-theory.lagda.md
index 61eb61ff0d..c03837a988 100644
--- a/src/literature/introduction-to-homotopy-type-theory.lagda.md
+++ b/src/literature/introduction-to-homotopy-type-theory.lagda.md
@@ -1202,7 +1202,7 @@ open import elementary-number-theory.modular-arithmetic-standard-finite-types us
```agda
open import univalent-combinatorics.standard-finite-types using
- ( is-zero-nat-zero-Fin -- ι(zero) = 0
+ ( nat-zero-Fin -- ι(zero) = 0
; nat-skip-zero-Fin -- ι(skip-zero x) = ι(x) + 1
)
open import elementary-number-theory.modular-arithmetic-standard-finite-types using
diff --git a/src/order-theory.lagda.md b/src/order-theory.lagda.md
index 85707fe438..06c4b28dac 100644
--- a/src/order-theory.lagda.md
+++ b/src/order-theory.lagda.md
@@ -62,6 +62,9 @@ open import order-theory.homomorphisms-meet-suplattices public
open import order-theory.homomorphisms-suplattices public
open import order-theory.ideals-preorders public
open import order-theory.incidence-algebras public
+open import order-theory.increasing-arrays-posets public
+open import order-theory.increasing-finite-sequences-posets public
+open import order-theory.increasing-nonempty-arrays-posets public
open import order-theory.increasing-sequences-posets public
open import order-theory.inflationary-maps-posets public
open import order-theory.inflationary-maps-preorders public
@@ -83,6 +86,7 @@ open import order-theory.large-join-semilattices public
open import order-theory.large-locales public
open import order-theory.large-meet-semilattices public
open import order-theory.large-meet-subsemilattices public
+open import order-theory.large-poset-closed-intervals-large-posets public
open import order-theory.large-posets public
open import order-theory.large-preorders public
open import order-theory.large-quotient-locales public
diff --git a/src/order-theory/closed-intervals-large-posets.lagda.md b/src/order-theory/closed-intervals-large-posets.lagda.md
index fdde553f93..753fdd7b28 100644
--- a/src/order-theory/closed-intervals-large-posets.lagda.md
+++ b/src/order-theory/closed-intervals-large-posets.lagda.md
@@ -59,6 +59,12 @@ module _
subtype-closed-interval-Large-Poset _ [a,b] =
is-in-closed-interval-prop-Large-Poset [a,b]
+ type-closed-interval-Large-Poset :
+ {l1 l2 : Level} (l3 : Level) →
+ closed-interval-Large-Poset l1 l2 → UU (α l3 ⊔ β l1 l3 ⊔ β l3 l2)
+ type-closed-interval-Large-Poset l3 [a,b] =
+ type-subtype (subtype-closed-interval-Large-Poset l3 [a,b])
+
lower-bound-closed-interval-Large-Poset :
{l1 l2 : Level} → closed-interval-Large-Poset l1 l2 → type-Large-Poset P l1
lower-bound-closed-interval-Large-Poset ((a , b) , _) = a
@@ -66,4 +72,9 @@ module _
upper-bound-closed-interval-Large-Poset :
{l1 l2 : Level} → closed-interval-Large-Poset l1 l2 → type-Large-Poset P l2
upper-bound-closed-interval-Large-Poset ((a , b) , _) = b
+
+ singleton-closed-interval-Large-Poset :
+ {l : Level} → type-Large-Poset P l → closed-interval-Large-Poset l l
+ singleton-closed-interval-Large-Poset x =
+ ( (x , x) , refl-leq-Large-Poset P x)
```
diff --git a/src/order-theory/increasing-arrays-posets.lagda.md b/src/order-theory/increasing-arrays-posets.lagda.md
new file mode 100644
index 0000000000..c96578ae8c
--- /dev/null
+++ b/src/order-theory/increasing-arrays-posets.lagda.md
@@ -0,0 +1,49 @@
+# Increasing arrays in posets
+
+```agda
+module order-theory.increasing-arrays-posets where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import lists.arrays
+open import lists.nonempty-arrays
+
+open import order-theory.increasing-finite-sequences-posets
+open import order-theory.posets
+```
+
+
+
+## Idea
+
+An [array](lists.arrays.md) in a [poset](order-theory.posets.md) is
+{{#concept "increasing" Disambiguation="array in a poset" Agda=is-increasing-array-type-Poset}}
+if its associated [finite sequence](lists.finite-sequences.md) is
+[increasing](order-theory.increasing-finite-sequences-posets.md).
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ is-increasing-prop-array-type-Poset : subtype l2 (array (type-Poset P))
+ is-increasing-prop-array-type-Poset (n , u) =
+ is-increasing-prop-fin-sequence-type-Poset P n u
+
+ is-increasing-array-type-Poset : array (type-Poset P) → UU l2
+ is-increasing-array-type-Poset =
+ is-in-subtype is-increasing-prop-array-type-Poset
+
+ increasing-array-type-Poset : UU (l1 ⊔ l2)
+ increasing-array-type-Poset =
+ type-subtype is-increasing-prop-array-type-Poset
+```
diff --git a/src/order-theory/increasing-finite-sequences-posets.lagda.md b/src/order-theory/increasing-finite-sequences-posets.lagda.md
new file mode 100644
index 0000000000..f388fd30bb
--- /dev/null
+++ b/src/order-theory/increasing-finite-sequences-posets.lagda.md
@@ -0,0 +1,176 @@
+# Increasing finite sequences in posets
+
+```agda
+module order-theory.increasing-finite-sequences-posets where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.inequality-standard-finite-types
+open import elementary-number-theory.natural-numbers
+
+open import foundation.conjunction
+open import foundation.coproduct-types
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.propositions
+open import foundation.raising-universe-levels-unit-type
+open import foundation.subtypes
+open import foundation.unit-type
+open import foundation.universe-levels
+
+open import lists.finite-sequences
+open import lists.pairs-of-successive-elements-finite-sequences
+
+open import order-theory.closed-intervals-posets
+open import order-theory.opposite-posets
+open import order-theory.order-preserving-maps-posets
+open import order-theory.posets
+
+open import univalent-combinatorics.standard-finite-types
+```
+
+
+
+## Idea
+
+A [finite sequence](lists.finite-sequences.md) of elements of a
+[poset](order-theory.posets.md) is
+{{#concept "increasing" Disambiguation="finite sequence in a poset" Agda=is-increasing-fin-sequence-type-Poset}}
+if each element is less than or equal to the next.
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ is-increasing-prop-fin-sequence-type-Poset :
+ (n : ℕ) → subtype l2 (fin-sequence (type-Poset P) n)
+ is-increasing-prop-fin-sequence-type-Poset n =
+ preserves-order-prop-Poset (Fin-Poset n) P
+
+ is-increasing-fin-sequence-type-Poset :
+ (n : ℕ) → fin-sequence (type-Poset P) n → UU l2
+ is-increasing-fin-sequence-type-Poset n =
+ is-in-subtype (is-increasing-prop-fin-sequence-type-Poset n)
+
+ increasing-fin-sequence-type-Poset : ℕ → UU (l1 ⊔ l2)
+ increasing-fin-sequence-type-Poset n =
+ type-subtype (is-increasing-prop-fin-sequence-type-Poset n)
+
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ (n : ℕ)
+ ((u , H) : increasing-fin-sequence-type-Poset P n)
+ where
+
+ fin-sequence-increasing-fin-sequence-type-Poset :
+ fin-sequence (type-Poset P) n
+ fin-sequence-increasing-fin-sequence-type-Poset = u
+
+ is-increasing-fin-sequence-increasing-fin-sequence-type-Poset :
+ is-increasing-fin-sequence-type-Poset
+ ( P)
+ ( n)
+ ( fin-sequence-increasing-fin-sequence-type-Poset)
+ is-increasing-fin-sequence-increasing-fin-sequence-type-Poset = H
+```
+
+## Properties
+
+### A finite sequence `a₁, ..., aₙ` is increasing if and only if `a₁ ≤ a₂ ∧ a₂ ≤ a₃ ∧ ... ∧ aₙ₋₁ ≤ aₙ`
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ is-increasing-leq-next-prop-fin-sequence-type-Poset :
+ (n : ℕ) → subtype l2 (fin-sequence (type-Poset P) n)
+ is-increasing-leq-next-prop-fin-sequence-type-Poset 0 _ = raise-unit-Prop l2
+ is-increasing-leq-next-prop-fin-sequence-type-Poset 1 _ = raise-unit-Prop l2
+ is-increasing-leq-next-prop-fin-sequence-type-Poset (succ-ℕ n@(succ-ℕ _)) u =
+ ( is-increasing-leq-next-prop-fin-sequence-type-Poset
+ ( n)
+ ( tail-fin-sequence n u)) ∧
+ ( leq-prop-Poset P (u (inl (inr star))) (u (inr star)))
+
+ is-increasing-leq-next-fin-sequence-type-Poset :
+ (n : ℕ) → fin-sequence (type-Poset P) n → UU l2
+ is-increasing-leq-next-fin-sequence-type-Poset n =
+ is-in-subtype (is-increasing-leq-next-prop-fin-sequence-type-Poset n)
+
+ abstract
+ is-increasing-is-increasing-leq-next-fin-sequence-type-Poset :
+ (n : ℕ) (u : fin-sequence (type-Poset P) n) →
+ is-increasing-leq-next-fin-sequence-type-Poset n u →
+ is-increasing-fin-sequence-type-Poset P n u
+ is-increasing-is-increasing-leq-next-fin-sequence-type-Poset
+ (succ-ℕ _) u H (inr star) (inr star) _ =
+ refl-leq-Poset P (u (inr star))
+ is-increasing-is-increasing-leq-next-fin-sequence-type-Poset
+ (succ-ℕ n@(succ-ℕ _)) u (incr-tail-u , u₋₂≤u₋₁) (inl i) (inr star) _ =
+ transitive-leq-Poset
+ ( P)
+ ( u (inl i))
+ ( u (inl (inr star)))
+ ( u (inr star))
+ ( u₋₂≤u₋₁)
+ ( is-increasing-is-increasing-leq-next-fin-sequence-type-Poset
+ ( n)
+ ( tail-fin-sequence n u)
+ ( incr-tail-u)
+ ( i)
+ ( inr star)
+ ( star))
+ is-increasing-is-increasing-leq-next-fin-sequence-type-Poset
+ ( succ-ℕ n@(succ-ℕ _)) u (incr-tail-u , _) (inl i) (inl j) i≤j =
+ is-increasing-is-increasing-leq-next-fin-sequence-type-Poset
+ ( n)
+ ( tail-fin-sequence n u)
+ ( incr-tail-u)
+ ( i)
+ ( j)
+ ( i≤j)
+
+ is-increasing-leq-next-is-increasing-fin-sequence-type-Poset :
+ (n : ℕ) (u : fin-sequence (type-Poset P) n) →
+ is-increasing-fin-sequence-type-Poset P n u →
+ is-increasing-leq-next-fin-sequence-type-Poset n u
+ is-increasing-leq-next-is-increasing-fin-sequence-type-Poset 0 u H =
+ raise-star
+ is-increasing-leq-next-is-increasing-fin-sequence-type-Poset 1 u H =
+ raise-star
+ is-increasing-leq-next-is-increasing-fin-sequence-type-Poset
+ (succ-ℕ n@(succ-ℕ _)) u H =
+ ( is-increasing-leq-next-is-increasing-fin-sequence-type-Poset
+ ( n)
+ ( tail-fin-sequence n u)
+ ( λ i j → H (inl i) (inl j)) ,
+ H (inl (inr star)) (inr star) star)
+```
+
+### Given an increasing sequence `a₁ ≤ a₂ ≤ ... ≤ aₙ`, the sequence of intervals `[a₁, a₂], [a₂, a₃], ..., [aₙ₋₁, aₙ]`
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ closed-intervals-increasing-fin-sequence-type-Poset :
+ (n : ℕ) → increasing-fin-sequence-type-Poset P (succ-ℕ n) →
+ fin-sequence (closed-interval-Poset P) n
+ closed-intervals-increasing-fin-sequence-type-Poset n (u , H) i =
+ ( pair-succ-fin-sequence n u i ,
+ H (inl-Fin n i) (inr-Fin n i) (leq-succ-Fin n i))
+```
diff --git a/src/order-theory/increasing-nonempty-arrays-posets.lagda.md b/src/order-theory/increasing-nonempty-arrays-posets.lagda.md
new file mode 100644
index 0000000000..8893aa2cef
--- /dev/null
+++ b/src/order-theory/increasing-nonempty-arrays-posets.lagda.md
@@ -0,0 +1,210 @@
+# Increasing nonempty arrays in posets
+
+```agda
+module order-theory.increasing-nonempty-arrays-posets where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.inequality-standard-finite-types
+open import elementary-number-theory.natural-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.subtypes
+open import foundation.unit-type
+open import foundation.universe-levels
+
+open import lists.arrays
+open import lists.finite-sequences
+open import lists.nonempty-arrays
+
+open import order-theory.increasing-arrays-posets
+open import order-theory.increasing-finite-sequences-posets
+open import order-theory.opposite-posets
+open import order-theory.order-preserving-maps-posets
+open import order-theory.posets
+
+open import univalent-combinatorics.standard-finite-types
+```
+
+
+
+## Idea
+
+A [nonempty array](lists.nonempty-arrays.md) in a
+[poset](order-theory.posets.md) is
+{{#concept "increasing" Disambiguation="nonempty array in a poset" Agda=is-increasing-nonempty-array-type-Poset}}
+if its associated [finite sequence](lists.finite-sequences.md) is
+[increasing](order-theory.increasing-finite-sequences-posets.md).
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ is-increasing-prop-nonempty-array-type-Poset :
+ subtype l2 (nonempty-array (type-Poset P))
+ is-increasing-prop-nonempty-array-type-Poset (u , is-nonempty-u) =
+ is-increasing-prop-array-type-Poset P u
+
+ is-increasing-nonempty-array-type-Poset :
+ nonempty-array (type-Poset P) → UU l2
+ is-increasing-nonempty-array-type-Poset =
+ is-in-subtype is-increasing-prop-nonempty-array-type-Poset
+
+ increasing-nonempty-array-type-Poset : UU (l1 ⊔ l2)
+ increasing-nonempty-array-type-Poset =
+ type-subtype is-increasing-prop-nonempty-array-type-Poset
+
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ nonempty-array-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → nonempty-array (type-Poset P)
+ nonempty-array-increasing-nonempty-array-type-Poset = pr1
+
+ is-increasing-nonempty-array-increasing-nonempty-array-type-Poset :
+ (u : increasing-nonempty-array-type-Poset P) →
+ is-increasing-nonempty-array-type-Poset
+ ( P)
+ ( nonempty-array-increasing-nonempty-array-type-Poset u)
+ is-increasing-nonempty-array-increasing-nonempty-array-type-Poset = pr2
+
+ array-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → array (type-Poset P)
+ array-increasing-nonempty-array-type-Poset ((u , _) , _) = u
+
+ length-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → ℕ
+ length-increasing-nonempty-array-type-Poset (((n , _) , _) , _) = n
+
+ head-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → type-Poset P
+ head-increasing-nonempty-array-type-Poset =
+ head-nonempty-array ∘ nonempty-array-increasing-nonempty-array-type-Poset
+
+ last-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → type-Poset P
+ last-increasing-nonempty-array-type-Poset =
+ last-nonempty-array ∘ nonempty-array-increasing-nonempty-array-type-Poset
+
+ fin-sequence-increasing-nonempty-array-type-Poset :
+ (u : increasing-nonempty-array-type-Poset P) →
+ fin-sequence (type-Poset P) (length-increasing-nonempty-array-type-Poset u)
+ fin-sequence-increasing-nonempty-array-type-Poset (((_ , u) , _) , _) = u
+```
+
+## Properties
+
+### The tail of an increasing nonempty array is increasing
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ array-tail-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → array (type-Poset P)
+ array-tail-increasing-nonempty-array-type-Poset (u , _) =
+ tail-nonempty-array u
+
+ abstract
+ is-increasing-array-tail-increasing-nonempty-array-type-Poset :
+ (u : increasing-nonempty-array-type-Poset P) →
+ is-increasing-array-type-Poset
+ ( P)
+ ( array-tail-increasing-nonempty-array-type-Poset u)
+ is-increasing-array-tail-increasing-nonempty-array-type-Poset
+ (((succ-ℕ n , u) , _) , H) i j =
+ H (inl-Fin n i) (inl-Fin n j)
+
+ tail-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → increasing-array-type-Poset P
+ tail-increasing-nonempty-array-type-Poset
+ uu@(((succ-ℕ n , u) , _) , is-increasing-u) =
+ ( (n , tail-fin-sequence n u) ,
+ is-increasing-array-tail-increasing-nonempty-array-type-Poset uu)
+```
+
+### The initial segment of an increasing nonempty array is increasing
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ array-init-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → array (type-Poset P)
+ array-init-increasing-nonempty-array-type-Poset (u , _) =
+ init-nonempty-array u
+
+ abstract
+ is-increasing-array-init-increasing-nonempty-array-type-Poset :
+ (u : increasing-nonempty-array-type-Poset P) →
+ is-increasing-array-type-Poset
+ ( P)
+ ( array-init-increasing-nonempty-array-type-Poset u)
+ is-increasing-array-init-increasing-nonempty-array-type-Poset
+ (((succ-ℕ n , u) , _) , H) =
+ preserves-order-comp-Poset
+ ( Fin-Poset n)
+ ( Fin-Poset (succ-ℕ n))
+ ( P)
+ ( u , H)
+ ( inr-Fin n , preserves-order-inr-Fin n)
+
+ init-increasing-nonempty-array-type-Poset :
+ increasing-nonempty-array-type-Poset P → increasing-array-type-Poset P
+ init-increasing-nonempty-array-type-Poset u =
+ ( array-init-increasing-nonempty-array-type-Poset u ,
+ is-increasing-array-init-increasing-nonempty-array-type-Poset u)
+```
+
+### The head of a nonempty array is its greatest element
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ abstract
+ is-greatest-element-head-increasing-nonempty-array-type-Poset :
+ (u : increasing-nonempty-array-type-Poset P)
+ (i : Fin (length-increasing-nonempty-array-type-Poset P u)) →
+ leq-Poset P
+ ( fin-sequence-increasing-nonempty-array-type-Poset P u i)
+ ( head-increasing-nonempty-array-type-Poset P u)
+ is-greatest-element-head-increasing-nonempty-array-type-Poset
+ (((succ-ℕ n , u) , _) , H) i =
+ H i (neg-one-Fin n) star
+```
+
+### The last element of a nonempty array is its least element
+
+```agda
+module _
+ {l1 l2 : Level}
+ (P : Poset l1 l2)
+ where
+
+ abstract
+ is-least-element-last-increasing-nonempty-array-type-Poset :
+ (u : increasing-nonempty-array-type-Poset P)
+ (i : Fin (length-increasing-nonempty-array-type-Poset P u)) →
+ leq-Poset P
+ ( last-increasing-nonempty-array-type-Poset P u)
+ ( fin-sequence-increasing-nonempty-array-type-Poset P u i)
+ is-least-element-last-increasing-nonempty-array-type-Poset
+ (((succ-ℕ n , u) , _) , H) i =
+ H (zero-Fin n) i (leq-zero-Fin n i)
+```
diff --git a/src/order-theory/large-poset-closed-intervals-large-posets.lagda.md b/src/order-theory/large-poset-closed-intervals-large-posets.lagda.md
new file mode 100644
index 0000000000..db38dc8151
--- /dev/null
+++ b/src/order-theory/large-poset-closed-intervals-large-posets.lagda.md
@@ -0,0 +1,169 @@
+# The large poset of closed intervals in large posets
+
+```agda
+module order-theory.large-poset-closed-intervals-large-posets where
+```
+
+Imports
+
+```agda
+open import foundation.conjunction
+open import foundation.dependent-pair-types
+open import foundation.equality-cartesian-product-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import order-theory.closed-intervals-large-posets
+open import order-theory.large-posets
+open import order-theory.large-preorders
+```
+
+
+
+## Idea
+
+In a [large poset](order-theory.large-posets.md) `P`, the type of
+[closed intervals](order-theory.closed-intervals-large-posets.md) itself forms a
+large poset under the containment relation, in which `[a, b]` is contained in
+`[c, d]` if `c ≤ a` and `b ≤ d`.
+
+## Definition
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level} (P : Large-Poset α β)
+ where
+
+ leq-prop-closed-interval-Large-Poset :
+ {l1 l2 l3 l4 : Level} →
+ closed-interval-Large-Poset P l1 l2 →
+ closed-interval-Large-Poset P l3 l4 →
+ Prop (β l2 l4 ⊔ β l3 l1)
+ leq-prop-closed-interval-Large-Poset ((a , b) , _) ((c , d) , _) =
+ leq-prop-Large-Poset P c a ∧ leq-prop-Large-Poset P b d
+
+ leq-closed-interval-Large-Poset :
+ {l1 l2 l3 l4 : Level} →
+ closed-interval-Large-Poset P l1 l2 →
+ closed-interval-Large-Poset P l3 l4 →
+ UU (β l2 l4 ⊔ β l3 l1)
+ leq-closed-interval-Large-Poset [a,b] [c,d] =
+ type-Prop (leq-prop-closed-interval-Large-Poset [a,b] [c,d])
+```
+
+## Properties
+
+### Containment of closed intervals is reflexive
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level} (P : Large-Poset α β)
+ where
+
+ abstract
+ refl-leq-closed-interval-Large-Poset :
+ {l1 l2 : Level} ([a,b] : closed-interval-Large-Poset P l1 l2) →
+ leq-closed-interval-Large-Poset P [a,b] [a,b]
+ refl-leq-closed-interval-Large-Poset ((a , b) , _) =
+ ( refl-leq-Large-Poset P a ,
+ refl-leq-Large-Poset P b)
+```
+
+### Containment of closed intervals is transitive
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level} (P : Large-Poset α β)
+ where
+
+ abstract
+ transitive-leq-closed-interval-Large-Poset :
+ {l1 l2 l3 l4 l5 l6 : Level}
+ ([a,b] : closed-interval-Large-Poset P l1 l2)
+ ([c,d] : closed-interval-Large-Poset P l3 l4)
+ ([e,f] : closed-interval-Large-Poset P l5 l6) →
+ leq-closed-interval-Large-Poset P [c,d] [e,f] →
+ leq-closed-interval-Large-Poset P [a,b] [c,d] →
+ leq-closed-interval-Large-Poset P [a,b] [e,f]
+ transitive-leq-closed-interval-Large-Poset
+ ((a , b) , _) ((c , d) , _) ((e , f) , _) (e≤c , d≤f) (c≤a , b≤d) =
+ ( transitive-leq-Large-Poset P e c a c≤a e≤c ,
+ transitive-leq-Large-Poset P b d f d≤f b≤d)
+```
+
+### Containment of closed intervals is antisymmetric
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level} (P : Large-Poset α β)
+ where
+
+ abstract
+ antisymmetric-leq-closed-interval-Large-Poset :
+ {l1 l2 : Level}
+ ([a,b] [c,d] : closed-interval-Large-Poset P l1 l2) →
+ leq-closed-interval-Large-Poset P [a,b] [c,d] →
+ leq-closed-interval-Large-Poset P [c,d] [a,b] →
+ [a,b] = [c,d]
+ antisymmetric-leq-closed-interval-Large-Poset
+ ((a , b) , _) ((c , d) , _) (c≤a , b≤d) (a≤c , d≤b) =
+ eq-type-subtype
+ ( ind-Σ (leq-prop-Large-Poset P))
+ ( eq-pair
+ ( antisymmetric-leq-Large-Poset P a c a≤c c≤a)
+ ( antisymmetric-leq-Large-Poset P b d b≤d d≤b))
+```
+
+### The large poset of closed intervals
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level} (P : Large-Poset α β)
+ where
+
+ large-preorder-closed-interval-Large-Poset :
+ Large-Preorder (λ l → α l ⊔ β l l) (λ l1 l2 → β l1 l2 ⊔ β l2 l1)
+ large-preorder-closed-interval-Large-Poset =
+ make-Large-Preorder
+ ( λ l → closed-interval-Large-Poset P l l)
+ ( leq-prop-closed-interval-Large-Poset P)
+ ( refl-leq-closed-interval-Large-Poset P)
+ ( transitive-leq-closed-interval-Large-Poset P)
+
+ large-poset-closed-interval-Large-Poset :
+ Large-Poset (λ l → α l ⊔ β l l) (λ l1 l2 → β l1 l2 ⊔ β l2 l1)
+ large-poset-closed-interval-Large-Poset =
+ make-Large-Poset
+ ( large-preorder-closed-interval-Large-Poset)
+ ( antisymmetric-leq-closed-interval-Large-Poset P)
+```
+
+### If `[a, b]` is contained in `[c, d]`, then the subtype of `[a, b]` is contained in the subtype of `[c, d]`
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level} (P : Large-Poset α β)
+ where
+
+ abstract
+ leq-subtype-leq-closed-interval-Large-Poset :
+ {l1 l2 l3 l4 l5 : Level}
+ ([a,b] : closed-interval-Large-Poset P l1 l2)
+ ([c,d] : closed-interval-Large-Poset P l3 l4) →
+ leq-closed-interval-Large-Poset P [a,b] [c,d] →
+ subtype-closed-interval-Large-Poset P l5 [a,b] ⊆
+ subtype-closed-interval-Large-Poset P l5 [c,d]
+ leq-subtype-leq-closed-interval-Large-Poset [a,b] [c,d] [a,b]⊆[c,d] x =
+ transitive-leq-closed-interval-Large-Poset
+ ( P)
+ ( singleton-closed-interval-Large-Poset P x)
+ ( [a,b])
+ ( [c,d])
+ ( [a,b]⊆[c,d])
+```
+
+## See also
+
+- [The (small) poset of closed intervals in (small) posets](order-theory.poset-closed-intervals-posets.md)
diff --git a/src/order-theory/least-upper-bounds-large-posets.lagda.md b/src/order-theory/least-upper-bounds-large-posets.lagda.md
index dfa918f385..3532cb35f1 100644
--- a/src/order-theory/least-upper-bounds-large-posets.lagda.md
+++ b/src/order-theory/least-upper-bounds-large-posets.lagda.md
@@ -10,8 +10,10 @@ module order-theory.least-upper-bounds-large-posets where
open import foundation.dependent-pair-types
open import foundation.function-types
open import foundation.logical-equivalences
+open import foundation.transport-along-identifications
open import foundation.type-arithmetic-cartesian-product-types
open import foundation.universe-levels
+open import foundation.weakly-constant-maps
open import order-theory.dependent-products-large-posets
open import order-theory.large-posets
@@ -373,3 +375,34 @@ module _
is-binary-least-upper-bound-swap-Large-Poset P y x x
( left-leq-right-least-upper-bound-Large-Poset y x y≤x)
```
+
+### If a family of elements is weakly constant, any of its elements is a least upper bound
+
+```agda
+module _
+ {α : Level → Level} {β : Level → Level → Level}
+ (P : Large-Poset α β)
+ {l1 l2 : Level} {I : UU l1} (x : I → type-Large-Poset P l2)
+ (wc-x : is-weakly-constant-map x)
+ (i : I)
+ where abstract
+
+ is-least-upper-bound-element-weakly-constant-family-of-elements-Large-Poset :
+ is-least-upper-bound-family-of-elements-Large-Poset
+ ( P)
+ ( x)
+ ( x i)
+ pr1
+ ( is-least-upper-bound-element-weakly-constant-family-of-elements-Large-Poset
+ y)
+ x≤y =
+ x≤y i
+ pr2
+ ( is-least-upper-bound-element-weakly-constant-family-of-elements-Large-Poset
+ y)
+ xi≤y j =
+ tr
+ ( λ z → leq-Large-Poset P z y)
+ ( wc-x i j)
+ ( xi≤y)
+```
diff --git a/src/real-numbers.lagda.md b/src/real-numbers.lagda.md
index 074bfbfe97..c1b50147fd 100644
--- a/src/real-numbers.lagda.md
+++ b/src/real-numbers.lagda.md
@@ -66,6 +66,7 @@ open import real-numbers.iterated-halving-difference-real-numbers public
open import real-numbers.large-additive-group-of-real-numbers public
open import real-numbers.large-multiplicative-group-of-positive-real-numbers public
open import real-numbers.large-multiplicative-monoid-of-real-numbers public
+open import real-numbers.large-poset-closed-intervals-real-numbers public
open import real-numbers.large-ring-of-real-numbers public
open import real-numbers.limits-of-endomaps-real-numbers public
open import real-numbers.limits-of-sequences-real-numbers public
@@ -108,6 +109,7 @@ open import real-numbers.nonpositive-real-numbers public
open import real-numbers.nonzero-real-numbers public
open import real-numbers.nonzero-roots-nonnegative-real-numbers public
open import real-numbers.odd-roots-real-numbers public
+open import real-numbers.partitions-closed-intervals-real-numbers public
open import real-numbers.pointwise-continuous-endomaps-real-numbers public
open import real-numbers.pointwise-epsilon-delta-continuous-endomaps-real-numbers public
open import real-numbers.positive-and-negative-real-numbers public
@@ -136,6 +138,7 @@ open import real-numbers.similarity-positive-real-numbers public
open import real-numbers.similarity-real-numbers public
open import real-numbers.square-roots-nonnegative-real-numbers public
open import real-numbers.squares-real-numbers public
+open import real-numbers.standard-uniform-partitions-closed-intervals-real-numbers public
open import real-numbers.strict-inequalities-addition-and-subtraction-real-numbers public
open import real-numbers.strict-inequality-nonnegative-real-numbers public
open import real-numbers.strict-inequality-positive-real-numbers public
@@ -150,9 +153,11 @@ 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
open import real-numbers.uniform-homeomorphism-unit-interval-proper-closed-interval-real-numbers public
+open import real-numbers.uniform-partitions-closed-intervals-real-numbers public
open import real-numbers.uniformly-continuous-endomaps-real-numbers public
open import real-numbers.uniformly-continuous-real-maps-proper-closed-intervals-real-numbers public
open import real-numbers.unit-closed-interval-real-numbers public
+open import real-numbers.unit-fractions-real-numbers public
open import real-numbers.upper-dedekind-real-numbers public
open import real-numbers.zero-nonnegative-real-numbers public
open import real-numbers.zero-real-numbers public
diff --git a/src/real-numbers/closed-intervals-real-numbers.lagda.md b/src/real-numbers/closed-intervals-real-numbers.lagda.md
index 42b0ceb4c6..1df36ede01 100644
--- a/src/real-numbers/closed-intervals-real-numbers.lagda.md
+++ b/src/real-numbers/closed-intervals-real-numbers.lagda.md
@@ -14,6 +14,7 @@ open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.positive-rational-numbers
open import foundation.dependent-pair-types
+open import foundation.function-types
open import foundation.logical-equivalences
open import foundation.propositional-truncations
open import foundation.propositions
@@ -38,6 +39,7 @@ 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.metric-space-of-real-numbers
+open import real-numbers.nonnegative-real-numbers
open import real-numbers.rational-real-numbers
open import real-numbers.short-map-binary-maximum-real-numbers
open import real-numbers.short-map-binary-minimum-real-numbers
@@ -91,6 +93,18 @@ upper-bound-closed-interval-ℝ =
## Properties
+### The width of a closed interval
+
+```agda
+nonnegative-width-closed-interval-ℝ :
+ {l1 l2 : Level} → closed-interval-ℝ l1 l2 → ℝ⁰⁺ (l1 ⊔ l2)
+nonnegative-width-closed-interval-ℝ (_ , a≤b) = nonnegative-diff-leq-ℝ a≤b
+
+width-closed-interval-ℝ :
+ {l1 l2 : Level} → closed-interval-ℝ l1 l2 → ℝ (l1 ⊔ l2)
+width-closed-interval-ℝ = real-ℝ⁰⁺ ∘ nonnegative-width-closed-interval-ℝ
+```
+
### Closed intervals in the real numbers are closed in the metric space of real numbers
```agda
diff --git a/src/real-numbers/large-poset-closed-intervals-real-numbers.lagda.md b/src/real-numbers/large-poset-closed-intervals-real-numbers.lagda.md
new file mode 100644
index 0000000000..e0bab853e4
--- /dev/null
+++ b/src/real-numbers/large-poset-closed-intervals-real-numbers.lagda.md
@@ -0,0 +1,140 @@
+# The large poset of closed intervals of real numbers
+
+```agda
+module real-numbers.large-poset-closed-intervals-real-numbers 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.universe-levels
+
+open import order-theory.large-poset-closed-intervals-large-posets
+open import order-theory.large-posets
+
+open import real-numbers.closed-intervals-real-numbers
+open import real-numbers.difference-real-numbers
+open import real-numbers.inequalities-addition-and-subtraction-real-numbers
+open import real-numbers.inequality-real-numbers
+open import real-numbers.raising-universe-levels-real-numbers
+```
+
+
+
+## Idea
+
+The type of [closed intervals](real-numbers.closed-intervals-real-numbers.md) in
+the [real numbers](real-numbers.dedekind-real-numbers.md) forms a
+[large poset](order-theory.large-posets.md) under the containment relation,
+where `[a, b]` is contained in `[c, d]` if `c ≤ a` and `b ≤ d`.
+
+## Definition
+
+```agda
+leq-prop-closed-interval-ℝ :
+ {l1 l2 l3 l4 : Level} →
+ closed-interval-ℝ l1 l2 → closed-interval-ℝ l3 l4 → Prop (l1 ⊔ l2 ⊔ l3 ⊔ l4)
+leq-prop-closed-interval-ℝ =
+ leq-prop-closed-interval-Large-Poset ℝ-Large-Poset
+
+leq-closed-interval-ℝ :
+ {l1 l2 l3 l4 : Level} →
+ closed-interval-ℝ l1 l2 → closed-interval-ℝ l3 l4 → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
+leq-closed-interval-ℝ = leq-closed-interval-Large-Poset ℝ-Large-Poset
+```
+
+## Properties
+
+### Containment of intervals forms a poset
+
+```agda
+refl-leq-closed-interval-ℝ :
+ {l1 l2 : Level} ([a,b] : closed-interval-ℝ l1 l2) →
+ leq-closed-interval-ℝ [a,b] [a,b]
+refl-leq-closed-interval-ℝ =
+ refl-leq-closed-interval-Large-Poset ℝ-Large-Poset
+
+transitive-leq-closed-interval-ℝ :
+ {l1 l2 l3 l4 l5 l6 : Level}
+ ([a,b] : closed-interval-ℝ l1 l2)
+ ([c,d] : closed-interval-ℝ l3 l4)
+ ([e,f] : closed-interval-ℝ l5 l6) →
+ leq-closed-interval-ℝ [c,d] [e,f] →
+ leq-closed-interval-ℝ [a,b] [c,d] →
+ leq-closed-interval-ℝ [a,b] [e,f]
+transitive-leq-closed-interval-ℝ =
+ transitive-leq-closed-interval-Large-Poset ℝ-Large-Poset
+
+antisymmetric-leq-closed-interval-ℝ :
+ {l1 l2 : Level} ([a,b] [c,d] : closed-interval-ℝ l1 l2) →
+ leq-closed-interval-ℝ [a,b] [c,d] →
+ leq-closed-interval-ℝ [c,d] [a,b] →
+ [a,b] = [c,d]
+antisymmetric-leq-closed-interval-ℝ =
+ antisymmetric-leq-closed-interval-Large-Poset ℝ-Large-Poset
+
+large-poset-closed-interval-ℝ : Large-Poset lsuc (_⊔_)
+large-poset-closed-interval-ℝ =
+ large-poset-closed-interval-Large-Poset ℝ-Large-Poset
+```
+
+### If `[a, b]` is contained in `[c, d]`, then their subtypes are contained
+
+```agda
+abstract
+ leq-subtype-leq-closed-interval-ℝ :
+ {l1 l2 l3 l4 l5 : Level}
+ ([a,b] : closed-interval-ℝ l1 l2)
+ ([c,d] : closed-interval-ℝ l3 l4) →
+ leq-closed-interval-ℝ [a,b] [c,d] →
+ subtype-closed-interval-ℝ l5 [a,b] ⊆ subtype-closed-interval-ℝ l5 [c,d]
+ leq-subtype-leq-closed-interval-ℝ =
+ leq-subtype-leq-closed-interval-Large-Poset ℝ-Large-Poset
+```
+
+### If the subtype associated with `[a, b]` is contained in the subtype associated with `[c, d]`, then `[a, b]` is contained in `[c, d]`
+
+```agda
+abstract
+ leq-leq-subtype-closed-interval-ℝ :
+ {l1 l2 l3 l4 : Level}
+ ([a,b] : closed-interval-ℝ l1 l2)
+ ([c,d] : closed-interval-ℝ l3 l4) →
+ ( subtype-closed-interval-ℝ (l1 ⊔ l2) [a,b] ⊆
+ subtype-closed-interval-ℝ (l1 ⊔ l2) [c,d]) →
+ leq-closed-interval-ℝ [a,b] [c,d]
+ leq-leq-subtype-closed-interval-ℝ
+ {l1} {l2} ((a , b) , a≤b) ((c , d) , c≤d) S[a,b]⊆S[c,d] =
+ ( reflects-leq-right-raise-ℝ
+ ( l2)
+ ( pr1
+ ( S[a,b]⊆S[c,d]
+ ( raise-ℝ l2 a)
+ ( leq-sim-ℝ (sim-raise-ℝ l2 a) ,
+ preserves-leq-left-raise-ℝ l2 a≤b))) ,
+ reflects-leq-left-raise-ℝ
+ ( l1)
+ ( pr2
+ ( S[a,b]⊆S[c,d]
+ ( raise-ℝ l1 b)
+ ( preserves-leq-right-raise-ℝ l1 a≤b ,
+ leq-sim-ℝ' (sim-raise-ℝ l1 b)))))
+```
+
+### If `[a, b]` is contained in `[c, d]`, the width of `[a, b]` is less than or equal to the width of `[c, d]`
+
+```agda
+abstract
+ leq-width-leq-closed-interval-ℝ :
+ {l1 l2 l3 l4 : Level}
+ ([a,b] : closed-interval-ℝ l1 l2)
+ ([c,d] : closed-interval-ℝ l3 l4) →
+ leq-closed-interval-ℝ [a,b] [c,d] →
+ leq-ℝ (width-closed-interval-ℝ [a,b]) (width-closed-interval-ℝ [c,d])
+ leq-width-leq-closed-interval-ℝ ((a , b) , _) ((c , d) , _) (a≤c , b≤d) =
+ preserves-leq-add-ℝ b≤d (neg-leq-ℝ a≤c)
+```
diff --git a/src/real-numbers/maximum-finite-families-nonnegative-real-numbers.lagda.md b/src/real-numbers/maximum-finite-families-nonnegative-real-numbers.lagda.md
index a922197ecc..980580b1c5 100644
--- a/src/real-numbers/maximum-finite-families-nonnegative-real-numbers.lagda.md
+++ b/src/real-numbers/maximum-finite-families-nonnegative-real-numbers.lagda.md
@@ -11,19 +11,23 @@ module real-numbers.maximum-finite-families-nonnegative-real-numbers where
```agda
open import elementary-number-theory.natural-numbers
+open import foundation.identity-types
open import foundation.universe-levels
+open import foundation.weakly-constant-maps
open import lists.finite-sequences
open import order-theory.join-semilattices
open import order-theory.joins-finite-families-large-join-semilattices
open import order-theory.least-upper-bounds-large-posets
+open import order-theory.similarity-of-elements-large-posets
open import real-numbers.binary-maximum-nonnegative-real-numbers
open import real-numbers.inequality-nonnegative-real-numbers
open import real-numbers.nonnegative-real-numbers
open import univalent-combinatorics.finite-types
+open import univalent-combinatorics.standard-finite-types
```
@@ -109,3 +113,56 @@ module _
( I)
( f)
```
+
+### If a finite family of nonnegative real numbers is weakly constant, any of its elements are equal to the maximum
+
+```agda
+module _
+ {l1 l2 : Level} (I : Finite-Type l1)
+ (f : type-Finite-Type I → ℝ⁰⁺ l2)
+ (wc-f : is-weakly-constant-map f)
+ (i : type-Finite-Type I)
+ where abstract
+
+ max-weakly-constant-finite-family-ℝ⁰⁺ : max-finite-family-ℝ⁰⁺ I f = f i
+ max-weakly-constant-finite-family-ℝ⁰⁺ =
+ eq-sim-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( max-finite-family-ℝ⁰⁺ I f)
+ ( f i)
+ ( sim-is-least-upper-bound-family-of-elements-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( is-least-upper-bound-max-finite-family-ℝ⁰⁺ I f)
+ ( is-least-upper-bound-element-weakly-constant-family-of-elements-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( f)
+ ( wc-f)
+ ( i)))
+```
+
+### If a finite sequence of nonnegative real numbers is weakly constant, any of its elements are equal to the maximum
+
+```agda
+module _
+ {l : Level}
+ (n : ℕ)
+ (f : fin-sequence (ℝ⁰⁺ l) n)
+ (wc-f : is-weakly-constant-map f)
+ (i : Fin n)
+ where abstract
+
+ max-weakly-constant-fin-sequence-ℝ⁰⁺ : max-fin-sequence-ℝ⁰⁺ n f = f i
+ max-weakly-constant-fin-sequence-ℝ⁰⁺ =
+ eq-sim-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( max-fin-sequence-ℝ⁰⁺ n f)
+ ( f i)
+ ( sim-is-least-upper-bound-family-of-elements-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( is-least-upper-bound-max-fin-sequence-ℝ⁰⁺ n f)
+ ( is-least-upper-bound-element-weakly-constant-family-of-elements-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( f)
+ ( wc-f)
+ ( i)))
+```
diff --git a/src/real-numbers/partitions-closed-intervals-real-numbers.lagda.md b/src/real-numbers/partitions-closed-intervals-real-numbers.lagda.md
new file mode 100644
index 0000000000..8ff4b4dd6a
--- /dev/null
+++ b/src/real-numbers/partitions-closed-intervals-real-numbers.lagda.md
@@ -0,0 +1,293 @@
+# Partitions of closed intervals of real numbers
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module real-numbers.partitions-closed-intervals-real-numbers where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.inequality-standard-finite-types
+open import elementary-number-theory.natural-numbers
+
+open import foundation.action-on-identifications-functions
+open import foundation.cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.raising-universe-levels-unit-type
+open import foundation.transport-along-identifications
+open import foundation.unit-type
+open import foundation.universe-levels
+
+open import lists.finite-sequences
+open import lists.tuples
+
+open import order-theory.increasing-finite-sequences-posets
+open import order-theory.increasing-nonempty-arrays-posets
+open import order-theory.lower-bounds-large-posets
+open import order-theory.upper-bounds-large-posets
+
+open import real-numbers.addition-real-numbers
+open import real-numbers.closed-intervals-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.large-poset-closed-intervals-real-numbers
+open import real-numbers.maximum-finite-families-nonnegative-real-numbers
+open import real-numbers.multiplication-nonnegative-real-numbers
+open import real-numbers.nonnegative-real-numbers
+
+open import univalent-combinatorics.standard-finite-types
+```
+
+
+
+## Idea
+
+A
+{{#concept "partition" Disambiguation="of a closed interval in ℝ" Agda=partition-closed-interval-ℝ}}
+of a [closed interval](real-numbers.closed-intervals-real-numbers.md) `[a, b]`
+in the [real numbers](real-numbers.dedekind-real-numbers.md) is an
+[increasing nonempty array](order-theory.increasing-nonempty-arrays-posets.md)
+in `ℝ` whose first element is `a` and whose last element is `b`.
+
+## Definition
+
+```agda
+module _
+ {l : Level}
+ ([a,b]@((a , b) , a≤b) : closed-interval-ℝ l l)
+ where
+
+ partition-closed-interval-ℝ : UU (lsuc l)
+ partition-closed-interval-ℝ =
+ Σ ( increasing-nonempty-array-type-Poset (ℝ-Poset l))
+ ( λ u →
+ ( last-increasing-nonempty-array-type-Poset (ℝ-Poset l) u = a) ×
+ ( head-increasing-nonempty-array-type-Poset (ℝ-Poset l) u = b))
+
+ pred-length-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ → ℕ
+ pred-length-partition-closed-interval-ℝ ((((succ-ℕ n , _) , _) , _) , _) =
+ n
+
+ length-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ → ℕ
+ length-partition-closed-interval-ℝ =
+ succ-ℕ ∘ pred-length-partition-closed-interval-ℝ
+
+ real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ fin-sequence (ℝ l) (length-partition-closed-interval-ℝ p)
+ real-fin-sequence-partition-closed-interval-ℝ
+ ((((succ-ℕ n , u) , _) , _) , _) = u
+
+ is-increasing-real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ is-increasing-fin-sequence-type-Poset
+ ( ℝ-Poset l)
+ ( length-partition-closed-interval-ℝ p)
+ ( real-fin-sequence-partition-closed-interval-ℝ p)
+ is-increasing-real-fin-sequence-partition-closed-interval-ℝ
+ ((((succ-ℕ n , u) , _) , H) , _) =
+ H
+
+ increasing-real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ increasing-fin-sequence-type-Poset
+ ( ℝ-Poset l)
+ ( length-partition-closed-interval-ℝ p)
+ increasing-real-fin-sequence-partition-closed-interval-ℝ
+ ((((succ-ℕ n , u) , _) , H) , _) =
+ ( u , H)
+
+ eq-lower-bound-last-real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ last-fin-sequence
+ ( pred-length-partition-closed-interval-ℝ p)
+ ( real-fin-sequence-partition-closed-interval-ℝ p) =
+ a
+ eq-lower-bound-last-real-fin-sequence-partition-closed-interval-ℝ
+ ((((succ-ℕ n , u) , _) , _) , u₀=a , _) =
+ u₀=a
+
+ eq-upper-bound-head-real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ head-fin-sequence
+ ( pred-length-partition-closed-interval-ℝ p)
+ ( real-fin-sequence-partition-closed-interval-ℝ p) =
+ b
+ eq-upper-bound-head-real-fin-sequence-partition-closed-interval-ℝ
+ ((((succ-ℕ n , u) , _) , _) , _ , u₋₁=b) =
+ u₋₁=b
+
+ abstract
+ lower-bound-real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ is-lower-bound-family-of-elements-Large-Poset
+ ( ℝ-Large-Poset)
+ ( real-fin-sequence-partition-closed-interval-ℝ p)
+ ( a)
+ lower-bound-real-fin-sequence-partition-closed-interval-ℝ
+ p@((((succ-ℕ n , u) , _) , H) , u₀=a , _) i =
+ tr (λ x → leq-ℝ x (u i)) u₀=a (H (zero-Fin n) i (leq-zero-Fin n i))
+
+ upper-bound-real-fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ is-upper-bound-family-of-elements-Large-Poset
+ ( ℝ-Large-Poset)
+ ( real-fin-sequence-partition-closed-interval-ℝ p)
+ ( b)
+ upper-bound-real-fin-sequence-partition-closed-interval-ℝ
+ p@((((succ-ℕ n , u) , _) , H) , _ , u₋₁=b) i =
+ tr (leq-ℝ (u i)) u₋₁=b (H i (neg-one-Fin n) star)
+
+ fin-sequence-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ) →
+ fin-sequence
+ ( type-closed-interval-ℝ l [a,b])
+ ( length-partition-closed-interval-ℝ p)
+ fin-sequence-partition-closed-interval-ℝ p i =
+ ( real-fin-sequence-partition-closed-interval-ℝ p i ,
+ lower-bound-real-fin-sequence-partition-closed-interval-ℝ p i ,
+ upper-bound-real-fin-sequence-partition-closed-interval-ℝ p i)
+```
+
+## Properties
+
+### The sequence of closed intervals of a partition
+
+```agda
+module _
+ {l : Level}
+ ([a,b]@((a , b) , _) : closed-interval-ℝ l l)
+ where
+
+ fin-sequence-closed-interval-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ [a,b]) →
+ fin-sequence
+ ( closed-interval-ℝ l l)
+ ( pred-length-partition-closed-interval-ℝ [a,b] p)
+ fin-sequence-closed-interval-partition-closed-interval-ℝ p =
+ closed-intervals-increasing-fin-sequence-type-Poset
+ ( ℝ-Poset l)
+ ( pred-length-partition-closed-interval-ℝ [a,b] p)
+ ( increasing-real-fin-sequence-partition-closed-interval-ℝ [a,b] p)
+
+ abstract
+ leq-fin-sequence-closed-interval-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ [a,b]) →
+ is-upper-bound-family-of-elements-Large-Poset
+ ( large-poset-closed-interval-ℝ)
+ ( fin-sequence-closed-interval-partition-closed-interval-ℝ p)
+ ( [a,b])
+ leq-fin-sequence-closed-interval-partition-closed-interval-ℝ
+ p@((((succ-ℕ n , u) , _) , _) , _) i =
+ ( lower-bound-real-fin-sequence-partition-closed-interval-ℝ
+ ( [a,b])
+ ( p)
+ ( inl-Fin n i) ,
+ upper-bound-real-fin-sequence-partition-closed-interval-ℝ
+ ( [a,b])
+ ( p)
+ ( inr-Fin n i))
+```
+
+### The mesh of a partition
+
+```agda
+module _
+ {l : Level}
+ ([a,b] : closed-interval-ℝ l l)
+ where
+
+ diffs-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ [a,b]) →
+ fin-sequence
+ ( ℝ⁰⁺ l)
+ ( pred-length-partition-closed-interval-ℝ [a,b] p)
+ diffs-partition-closed-interval-ℝ p =
+ ( nonnegative-width-closed-interval-ℝ) ∘
+ ( fin-sequence-closed-interval-partition-closed-interval-ℝ [a,b] p)
+
+ mesh-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ [a,b] → ℝ⁰⁺ l
+ mesh-partition-closed-interval-ℝ p =
+ max-fin-sequence-ℝ⁰⁺
+ ( pred-length-partition-closed-interval-ℝ [a,b] p)
+ ( diffs-partition-closed-interval-ℝ p)
+
+ real-mesh-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ [a,b] → ℝ l
+ real-mesh-partition-closed-interval-ℝ =
+ real-ℝ⁰⁺ ∘ mesh-partition-closed-interval-ℝ
+```
+
+### The mesh of a partition of a closed interval is at most the width of the interval
+
+```agda
+module _
+ {l : Level}
+ ([a,b] : closed-interval-ℝ l l)
+ where
+
+ abstract
+ bound-diffs-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ [a,b]) →
+ is-upper-bound-family-of-elements-Large-Poset
+ ( large-poset-ℝ⁰⁺)
+ ( diffs-partition-closed-interval-ℝ [a,b] p)
+ ( nonnegative-width-closed-interval-ℝ [a,b])
+ bound-diffs-partition-closed-interval-ℝ p i =
+ leq-width-leq-closed-interval-ℝ
+ ( fin-sequence-closed-interval-partition-closed-interval-ℝ [a,b] p i)
+ ( [a,b])
+ ( leq-fin-sequence-closed-interval-partition-closed-interval-ℝ
+ ( [a,b])
+ ( p)
+ ( i))
+
+ bound-mesh-partition-closed-interval-ℝ :
+ (p : partition-closed-interval-ℝ [a,b]) →
+ leq-ℝ⁰⁺
+ ( mesh-partition-closed-interval-ℝ [a,b] p)
+ ( nonnegative-width-closed-interval-ℝ [a,b])
+ bound-mesh-partition-closed-interval-ℝ p =
+ forward-implication
+ ( is-least-upper-bound-max-fin-sequence-ℝ⁰⁺
+ ( pred-length-partition-closed-interval-ℝ [a,b] p)
+ ( diffs-partition-closed-interval-ℝ [a,b] p)
+ ( nonnegative-width-closed-interval-ℝ [a,b]))
+ ( bound-diffs-partition-closed-interval-ℝ p)
+```
+
+### The trivial partition of a closed interval
+
+```agda
+module _
+ {l : Level}
+ ([a,b]@((a , b) , a≤b) : closed-interval-ℝ l l)
+ where
+
+ trivial-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ [a,b]
+ trivial-partition-closed-interval-ℝ =
+ ( ( ( (2 , component-tuple 2 (b ∷ a ∷ empty-tuple)) ,
+ star) ,
+ is-increasing-is-increasing-leq-next-fin-sequence-type-Poset
+ ( ℝ-Poset l)
+ ( 2)
+ ( _)
+ ( raise-star , a≤b)) ,
+ refl ,
+ refl)
+```
+
+## External links
+
+- [Partition of an interval](https://en.wikipedia.org/wiki/Partition_of_an_interval)
+ on Wikipedia
diff --git a/src/real-numbers/rational-real-numbers.lagda.md b/src/real-numbers/rational-real-numbers.lagda.md
index 744a7c5885..e9509f45c8 100644
--- a/src/real-numbers/rational-real-numbers.lagda.md
+++ b/src/real-numbers/rational-real-numbers.lagda.md
@@ -12,6 +12,7 @@ module real-numbers.rational-real-numbers where
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.nonzero-natural-numbers
open import elementary-number-theory.positive-rational-numbers
open import elementary-number-theory.rational-numbers
open import elementary-number-theory.strict-inequality-rational-numbers
@@ -96,6 +97,9 @@ real-ℤ x = real-ℚ (rational-ℤ x)
```agda
real-ℕ : ℕ → ℝ lzero
real-ℕ n = real-ℤ (int-ℕ n)
+
+real-ℕ⁺ : ℕ⁺ → ℝ lzero
+real-ℕ⁺ n = real-ℕ (nat-ℕ⁺ n)
```
### Zero as a real number
diff --git a/src/real-numbers/standard-uniform-partitions-closed-intervals-real-numbers.lagda.md b/src/real-numbers/standard-uniform-partitions-closed-intervals-real-numbers.lagda.md
new file mode 100644
index 0000000000..6a31ce75f5
--- /dev/null
+++ b/src/real-numbers/standard-uniform-partitions-closed-intervals-real-numbers.lagda.md
@@ -0,0 +1,271 @@
+# The standard uniform partitions of closed intervals in the real numbers
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module real-numbers.standard-uniform-partitions-closed-intervals-real-numbers where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-natural-numbers
+open import elementary-number-theory.inequality-standard-finite-types
+open import elementary-number-theory.natural-numbers
+
+open import foundation.action-on-identifications-functions
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+open import foundation.null-homotopic-maps
+open import foundation.unit-type
+open import foundation.universe-levels
+open import foundation.weakly-constant-maps
+
+open import group-theory.abelian-groups
+
+open import lists.arrays
+open import lists.finite-sequences
+open import lists.nonempty-arrays
+
+open import order-theory.increasing-finite-sequences-posets
+open import order-theory.increasing-nonempty-arrays-posets
+
+open import real-numbers.addition-real-numbers
+open import real-numbers.closed-intervals-real-numbers
+open import real-numbers.dedekind-real-numbers
+open import real-numbers.difference-real-numbers
+open import real-numbers.inequalities-addition-and-subtraction-real-numbers
+open import real-numbers.inequality-real-numbers
+open import real-numbers.large-additive-group-of-real-numbers
+open import real-numbers.maximum-finite-families-nonnegative-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.partitions-closed-intervals-real-numbers
+open import real-numbers.positive-and-negative-real-numbers
+open import real-numbers.rational-real-numbers
+open import real-numbers.similarity-real-numbers
+open import real-numbers.uniform-partitions-closed-intervals-real-numbers
+open import real-numbers.unit-fractions-real-numbers
+
+open import univalent-combinatorics.standard-finite-types
+```
+
+
+
+## Idea
+
+Given a [natural number](elementary-number-theory.natural-numbers.md) `n` and a
+[closed interval](real-numbers.closed-intervals-real-numbers.md) `[a, b]` in the
+[real numbers](real-numbers.dedekind-real-numbers.md), the
+{{#concept "standard uniform partition" Disambiguation="of a given length closed interval in the real numbers" Agda=standard-uniform-partition-closed-interval-ℝ}}
+of `[a, b]` contains `n + 1` intervals, each of width `(b - a) / (n + 1)`.
+
+## Definition
+
+```agda
+module _
+ {l : Level}
+ ([a,b]@((a , b) , a≤b) : closed-interval-ℝ l l)
+ (n : ℕ)
+ (let 1/⟨n+1⟩ = reciprocal-real-succ-ℕ n)
+ where
+
+ fin-sequence-standard-uniform-partition-closed-interval-ℝ :
+ fin-sequence (ℝ l) (n +ℕ 2)
+ fin-sequence-standard-uniform-partition-closed-interval-ℝ i =
+ a +ℝ (b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ real-ℕ (nat-Fin (n +ℕ 2) i)
+
+ abstract
+ is-increasing-fin-sequence-standard-uniform-partition-closed-interval-ℝ :
+ is-increasing-fin-sequence-type-Poset
+ ( ℝ-Poset l)
+ ( n +ℕ 2)
+ ( fin-sequence-standard-uniform-partition-closed-interval-ℝ)
+ is-increasing-fin-sequence-standard-uniform-partition-closed-interval-ℝ
+ i j i≤j =
+ preserves-leq-left-add-ℝ a _ _
+ ( preserves-leq-left-mul-ℝ⁰⁺
+ ( nonnegative-diff-leq-ℝ a≤b *ℝ⁰⁺
+ nonnegative-ℝ⁺ (positive-reciprocal-real-succ-ℕ n))
+ ( preserves-leq-real-ℕ (preserves-leq-nat-Fin (n +ℕ 2) {i} {j} i≤j)))
+
+ array-standard-uniform-partition-closed-interval-ℝ : array (ℝ l)
+ array-standard-uniform-partition-closed-interval-ℝ =
+ ( n +ℕ 2 , fin-sequence-standard-uniform-partition-closed-interval-ℝ)
+
+ nonempty-array-standard-uniform-partition-closed-interval-ℝ :
+ nonempty-array (ℝ l)
+ nonempty-array-standard-uniform-partition-closed-interval-ℝ =
+ ( array-standard-uniform-partition-closed-interval-ℝ ,
+ star)
+
+ increasing-nonempty-array-standard-uniform-partition-closed-interval-ℝ :
+ increasing-nonempty-array-type-Poset (ℝ-Poset l)
+ increasing-nonempty-array-standard-uniform-partition-closed-interval-ℝ =
+ ( nonempty-array-standard-uniform-partition-closed-interval-ℝ ,
+ is-increasing-fin-sequence-standard-uniform-partition-closed-interval-ℝ)
+
+ abstract
+ is-lower-bound-last-fin-sequence-standard-uniform-partition-closed-interval-ℝ :
+ last-fin-sequence
+ ( succ-ℕ n)
+ ( fin-sequence-standard-uniform-partition-closed-interval-ℝ) =
+ lower-bound-closed-interval-ℝ [a,b]
+ is-lower-bound-last-fin-sequence-standard-uniform-partition-closed-interval-ℝ =
+ eq-sim-ℝ
+ ( similarity-reasoning-ℝ
+ ( a) +ℝ
+ ( (b -ℝ a) *ℝ
+ 1/⟨n+1⟩ *ℝ
+ real-ℕ (nat-Fin (n +ℕ 2) (zero-Fin (succ-ℕ n))))
+ ~ℝ a +ℝ (b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ zero-ℝ
+ by
+ sim-eq-ℝ
+ ( ap-add-ℝ
+ ( refl)
+ ( ap-mul-ℝ refl (ap real-ℕ (nat-zero-Fin (n +ℕ 2)))))
+ ~ℝ a +ℝ zero-ℝ
+ by preserves-sim-left-add-ℝ a _ _ (right-zero-law-mul-ℝ _)
+ ~ℝ a
+ by sim-eq-ℝ (right-unit-law-add-ℝ a))
+
+ is-upper-bound-head-fin-sequence-standard-uniform-partition-closed-interval-ℝ :
+ head-fin-sequence
+ ( succ-ℕ n)
+ ( fin-sequence-standard-uniform-partition-closed-interval-ℝ) =
+ b
+ is-upper-bound-head-fin-sequence-standard-uniform-partition-closed-interval-ℝ =
+ equational-reasoning
+ a +ℝ (b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ real-ℕ (succ-ℕ n)
+ = a +ℝ (b -ℝ a) *ℝ (1/⟨n+1⟩ *ℝ real-ℕ (succ-ℕ n))
+ by ap-add-ℝ refl (associative-mul-ℝ _ _ _)
+ = a +ℝ (b -ℝ a) *ℝ one-ℝ
+ by
+ ap-add-ℝ
+ ( refl)
+ ( ap-mul-ℝ refl (left-inverse-law-reciprocal-real-succ-ℕ n))
+ = a +ℝ (b -ℝ a)
+ by ap-add-ℝ refl (right-unit-law-mul-ℝ _)
+ = b
+ by eq-sim-ℝ (cancel-right-conjugation-ℝ a b)
+
+ partition-standard-uniform-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ [a,b]
+ partition-standard-uniform-partition-closed-interval-ℝ =
+ ( increasing-nonempty-array-standard-uniform-partition-closed-interval-ℝ ,
+ is-lower-bound-last-fin-sequence-standard-uniform-partition-closed-interval-ℝ ,
+ is-upper-bound-head-fin-sequence-standard-uniform-partition-closed-interval-ℝ)
+
+ mesh-standard-uniform-partition-closed-interval-ℝ : ℝ⁰⁺ l
+ mesh-standard-uniform-partition-closed-interval-ℝ =
+ nonnegative-width-closed-interval-ℝ [a,b] *ℝ⁰⁺
+ nonnegative-reciprocal-real-succ-ℕ n
+
+ abstract
+ compute-diffs-partition-standard-uniform-partition-closed-interval-ℝ :
+ (i : Fin (succ-ℕ n)) →
+ diffs-partition-closed-interval-ℝ
+ ( [a,b])
+ ( partition-standard-uniform-partition-closed-interval-ℝ)
+ ( i) =
+ nonnegative-width-closed-interval-ℝ [a,b] *ℝ⁰⁺
+ nonnegative-reciprocal-real-succ-ℕ n
+ compute-diffs-partition-standard-uniform-partition-closed-interval-ℝ i =
+ let
+ iℕ = nat-Fin (n +ℕ 2) (inl-Fin (succ-ℕ n) i)
+ jℕ = nat-Fin (n +ℕ 2) (inr-Fin (succ-ℕ n) i)
+ in
+ eq-ℝ⁰⁺ _ _
+ ( equational-reasoning
+ ( a +ℝ (b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ real-ℕ jℕ) -ℝ
+ ( a +ℝ (b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ real-ℕ iℕ)
+ =
+ ((b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ real-ℕ jℕ) -ℝ
+ ((b -ℝ a) *ℝ 1/⟨n+1⟩ *ℝ real-ℕ iℕ)
+ by right-subtraction-left-add-Ab (ab-add-ℝ l) _ _ _
+ =
+ ((b -ℝ a) *ℝ 1/⟨n+1⟩) *ℝ (real-ℕ jℕ -ℝ real-ℕ iℕ)
+ by
+ inv
+ ( left-distributive-mul-diff-ℝ
+ ( (b -ℝ a) *ℝ 1/⟨n+1⟩)
+ ( real-ℕ jℕ)
+ ( real-ℕ iℕ))
+ =
+ ((b -ℝ a) *ℝ 1/⟨n+1⟩) *ℝ (real-ℕ (succ-ℕ iℕ) -ℝ real-ℕ iℕ)
+ by
+ ap-mul-ℝ
+ { l1 = l}
+ ( refl)
+ { l2 = lzero}
+ ( ap-diff-ℝ (ap real-ℕ (nat-inr-Fin (succ-ℕ n) i)) refl)
+ =
+ ( (b -ℝ a) *ℝ 1/⟨n+1⟩) *ℝ
+ ( (real-ℕ iℕ +ℝ one-ℝ) -ℝ real-ℕ iℕ)
+ by
+ ap-mul-ℝ
+ { l1 = l}
+ ( refl)
+ { l2 = lzero}
+ ( ap-diff-ℝ (inv (add-real-ℕ iℕ 1)) refl)
+ = ((b -ℝ a) *ℝ 1/⟨n+1⟩) *ℝ one-ℝ
+ by
+ ap-mul-ℝ
+ { l1 = l}
+ ( refl)
+ { l2 = lzero}
+ ( eq-sim-ℝ (cancel-left-conjugation-ℝ (real-ℕ iℕ) one-ℝ))
+ = (b -ℝ a) *ℝ 1/⟨n+1⟩
+ by right-unit-law-mul-ℝ _)
+
+ is-null-homotopic-map-diffs-partition-standard-uniform-partition-closed-interval-ℝ :
+ is-null-homotopic-map
+ ( diffs-partition-closed-interval-ℝ
+ ( [a,b])
+ ( partition-standard-uniform-partition-closed-interval-ℝ))
+ is-null-homotopic-map-diffs-partition-standard-uniform-partition-closed-interval-ℝ =
+ ( mesh-standard-uniform-partition-closed-interval-ℝ ,
+ compute-diffs-partition-standard-uniform-partition-closed-interval-ℝ)
+
+ is-uniform-partition-standard-uniform-partition-closed-interval-ℝ :
+ is-uniform-partition-closed-interval-ℝ
+ ( [a,b])
+ ( partition-standard-uniform-partition-closed-interval-ℝ)
+ is-uniform-partition-standard-uniform-partition-closed-interval-ℝ =
+ is-weakly-constant-map-is-null-homotopic-map
+ ( left-comp-is-null-homotopic-map
+ ( real-ℝ⁰⁺)
+ ( is-null-homotopic-map-diffs-partition-standard-uniform-partition-closed-interval-ℝ))
+
+ standard-uniform-partition-closed-interval-ℝ :
+ uniform-partition-closed-interval-ℝ [a,b]
+ standard-uniform-partition-closed-interval-ℝ =
+ ( partition-standard-uniform-partition-closed-interval-ℝ ,
+ is-uniform-partition-standard-uniform-partition-closed-interval-ℝ)
+
+ abstract
+ compute-mesh-standard-uniform-partition-closed-interval-ℝ :
+ mesh-uniform-partition-closed-interval-ℝ
+ ( [a,b])
+ ( standard-uniform-partition-closed-interval-ℝ) =
+ mesh-standard-uniform-partition-closed-interval-ℝ
+ compute-mesh-standard-uniform-partition-closed-interval-ℝ =
+ max-weakly-constant-fin-sequence-ℝ⁰⁺
+ ( succ-ℕ n)
+ ( diffs-partition-closed-interval-ℝ
+ ( [a,b])
+ ( partition-standard-uniform-partition-closed-interval-ℝ))
+ ( is-weakly-constant-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ
+ ( [a,b])
+ ( standard-uniform-partition-closed-interval-ℝ))
+ ( neg-one-Fin n) ∙
+ compute-diffs-partition-standard-uniform-partition-closed-interval-ℝ
+ ( neg-one-Fin n)
+```
+
+## Properties
+
+### Every nonempty uniform partition of a closed interval is standard
+
+This has yet to be proven.
diff --git a/src/real-numbers/uniform-partitions-closed-intervals-real-numbers.lagda.md b/src/real-numbers/uniform-partitions-closed-intervals-real-numbers.lagda.md
new file mode 100644
index 0000000000..7ae48bde79
--- /dev/null
+++ b/src/real-numbers/uniform-partitions-closed-intervals-real-numbers.lagda.md
@@ -0,0 +1,161 @@
+# Uniform partitions of closed intervals in the real numbers
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module real-numbers.uniform-partitions-closed-intervals-real-numbers where
+```
+
+Imports
+
+```agda
+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.null-homotopic-maps
+open import foundation.subtypes
+open import foundation.universe-levels
+open import foundation.weakly-constant-maps
+
+open import lists.finite-sequences
+
+open import order-theory.least-upper-bounds-large-posets
+open import order-theory.similarity-of-elements-large-posets
+
+open import real-numbers.closed-intervals-real-numbers
+open import real-numbers.dedekind-real-numbers
+open import real-numbers.inequality-nonnegative-real-numbers
+open import real-numbers.maximum-finite-families-nonnegative-real-numbers
+open import real-numbers.nonnegative-real-numbers
+open import real-numbers.partitions-closed-intervals-real-numbers
+
+open import univalent-combinatorics.standard-finite-types
+```
+
+
+
+## Idea
+
+A {{#concept "uniform partition" Agda=uniform-partition-closed-interval-ℝ}} of a
+[closed interval](real-numbers.closed-intervals-real-numbers.md) `[a, b]` in the
+[real numbers](real-numbers.dedekind-real-numbers.md) is a
+[partition](real-numbers.partitions-closed-intervals-real-numbers.md) in which
+the widths of the component intervals are
+[weakly constant](foundation.weakly-constant-maps.md).
+
+## Definition
+
+```agda
+module _
+ {l : Level}
+ ([a,b] : closed-interval-ℝ l l)
+ where
+
+ is-uniform-prop-partition-closed-interval-ℝ :
+ subtype (lsuc l) (partition-closed-interval-ℝ [a,b])
+ is-uniform-prop-partition-closed-interval-ℝ p =
+ is-weakly-constant-map-prop-Set
+ ( ℝ-Set l)
+ ( width-closed-interval-ℝ ∘
+ fin-sequence-closed-interval-partition-closed-interval-ℝ [a,b] p)
+
+ is-uniform-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ [a,b] → UU (lsuc l)
+ is-uniform-partition-closed-interval-ℝ =
+ is-in-subtype is-uniform-prop-partition-closed-interval-ℝ
+
+ uniform-partition-closed-interval-ℝ : UU (lsuc l)
+ uniform-partition-closed-interval-ℝ =
+ type-subtype is-uniform-prop-partition-closed-interval-ℝ
+```
+
+## Properties
+
+### Properties inherited from all partitions
+
+```agda
+module _
+ {l : Level}
+ ([a,b] : closed-interval-ℝ l l)
+ (up@(p , is-uniform-p) :
+ uniform-partition-closed-interval-ℝ [a,b])
+ where
+
+ partition-uniform-partition-closed-interval-ℝ :
+ partition-closed-interval-ℝ [a,b]
+ partition-uniform-partition-closed-interval-ℝ = p
+
+ pred-length-uniform-partition-closed-interval-ℝ : ℕ
+ pred-length-uniform-partition-closed-interval-ℝ =
+ pred-length-partition-closed-interval-ℝ [a,b] p
+
+ length-uniform-partition-closed-interval-ℝ : ℕ
+ length-uniform-partition-closed-interval-ℝ =
+ length-partition-closed-interval-ℝ [a,b] p
+
+ fin-sequence-closed-interval-uniform-partition-closed-interval-ℝ :
+ fin-sequence
+ ( closed-interval-ℝ l l)
+ ( pred-length-uniform-partition-closed-interval-ℝ)
+ fin-sequence-closed-interval-uniform-partition-closed-interval-ℝ =
+ fin-sequence-closed-interval-partition-closed-interval-ℝ [a,b] p
+
+ fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ :
+ fin-sequence (ℝ⁰⁺ l) (pred-length-uniform-partition-closed-interval-ℝ)
+ fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ =
+ nonnegative-width-closed-interval-ℝ ∘
+ fin-sequence-closed-interval-uniform-partition-closed-interval-ℝ
+
+ abstract
+ is-weakly-constant-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ :
+ is-weakly-constant-map
+ ( fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ)
+ is-weakly-constant-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ
+ i j =
+ eq-ℝ⁰⁺ _ _ (is-uniform-p i j)
+```
+
+### The width of partitions in a uniform partition
+
+If the partition is trivial, containing no partitions because it is a partition
+of a singleton interval `[a, a]`, we define the width of the partitions to be
+zero.
+
+```agda
+module _
+ {l : Level}
+ ([a,b] : closed-interval-ℝ l l)
+ (up@(p , is-uniform-p) :
+ uniform-partition-closed-interval-ℝ [a,b])
+ where
+
+ mesh-uniform-partition-closed-interval-ℝ : ℝ⁰⁺ l
+ mesh-uniform-partition-closed-interval-ℝ =
+ mesh-partition-closed-interval-ℝ [a,b] p
+
+ real-mesh-interval-uniform-partition-closed-interval-ℝ : ℝ l
+ real-mesh-interval-uniform-partition-closed-interval-ℝ =
+ real-ℝ⁰⁺ mesh-uniform-partition-closed-interval-ℝ
+
+ is-null-homotopic-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ :
+ is-null-homotopic-map
+ ( fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ
+ ( [a,b])
+ ( up))
+ pr1
+ is-null-homotopic-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ =
+ mesh-uniform-partition-closed-interval-ℝ
+ pr2
+ is-null-homotopic-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ
+ i =
+ inv
+ ( max-weakly-constant-fin-sequence-ℝ⁰⁺
+ ( pred-length-uniform-partition-closed-interval-ℝ [a,b] up)
+ ( diffs-partition-closed-interval-ℝ [a,b] p)
+ ( is-weakly-constant-fin-sequence-nonnegative-width-closed-interval-uniform-partition-closed-interval-ℝ
+ ( [a,b])
+ ( up))
+ ( i))
+```
diff --git a/src/real-numbers/unit-fractions-real-numbers.lagda.md b/src/real-numbers/unit-fractions-real-numbers.lagda.md
new file mode 100644
index 0000000000..10591f3285
--- /dev/null
+++ b/src/real-numbers/unit-fractions-real-numbers.lagda.md
@@ -0,0 +1,82 @@
+# Unit fractions in the real numbers
+
+```agda
+module real-numbers.unit-fractions-real-numbers where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.multiplication-rational-numbers
+open import elementary-number-theory.natural-numbers
+open import elementary-number-theory.nonzero-natural-numbers
+open import elementary-number-theory.rational-numbers
+open import elementary-number-theory.unit-fractions-rational-numbers
+
+open import foundation.action-on-identifications-functions
+open import foundation.identity-types
+open import foundation.universe-levels
+
+open import real-numbers.dedekind-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
+```
+
+
+
+## Idea
+
+A {{#concept "unit fraction" Disambiguation="in the real numbers"}} in the
+[real numbers](real-numbers.dedekind-real-numbers.md) is the
+[real embedding](real-numbers.rational-real-numbers.md) of a
+[rational unit fraction](elementary-number-theory.unit-fractions-rational-numbers.md).
+
+## Definition
+
+```agda
+positive-reciprocal-real-ℕ⁺ : ℕ⁺ → ℝ⁺ lzero
+positive-reciprocal-real-ℕ⁺ n =
+ positive-real-ℚ⁺ (positive-reciprocal-rational-ℕ⁺ n)
+
+reciprocal-real-ℕ⁺ : ℕ⁺ → ℝ lzero
+reciprocal-real-ℕ⁺ n = real-ℝ⁺ (positive-reciprocal-real-ℕ⁺ n)
+
+positive-reciprocal-real-succ-ℕ : ℕ → ℝ⁺ lzero
+positive-reciprocal-real-succ-ℕ n =
+ positive-reciprocal-real-ℕ⁺ (succ-nonzero-ℕ' n)
+
+nonnegative-reciprocal-real-succ-ℕ : ℕ → ℝ⁰⁺ lzero
+nonnegative-reciprocal-real-succ-ℕ n =
+ nonnegative-ℝ⁺ (positive-reciprocal-real-succ-ℕ n)
+
+reciprocal-real-succ-ℕ : ℕ → ℝ lzero
+reciprocal-real-succ-ℕ n = real-ℝ⁺ (positive-reciprocal-real-succ-ℕ n)
+```
+
+## Properties
+
+### Inverse laws
+
+```agda
+module _
+ (n : ℕ⁺)
+ where abstract
+
+ left-inverse-law-reciprocal-real-ℕ⁺ :
+ reciprocal-real-ℕ⁺ n *ℝ real-ℕ⁺ n = one-ℝ
+ left-inverse-law-reciprocal-real-ℕ⁺ =
+ ( mul-real-ℚ _ _) ∙
+ ( ap real-ℚ (left-inverse-law-reciprocal-rational-ℕ⁺ n))
+
+module _
+ (n : ℕ)
+ where abstract
+
+ left-inverse-law-reciprocal-real-succ-ℕ :
+ reciprocal-real-succ-ℕ n *ℝ real-ℕ (succ-ℕ n) = one-ℝ
+ left-inverse-law-reciprocal-real-succ-ℕ =
+ left-inverse-law-reciprocal-real-ℕ⁺ (succ-nonzero-ℕ' n)
+```
diff --git a/src/ring-theory/binomial-theorem-semirings.lagda.md b/src/ring-theory/binomial-theorem-semirings.lagda.md
index ad5ee69398..d4bfaadb86 100644
--- a/src/ring-theory/binomial-theorem-semirings.lagda.md
+++ b/src/ring-theory/binomial-theorem-semirings.lagda.md
@@ -369,7 +369,7 @@ module _
( power-Semiring R
( dist-ℕ m (succ-ℕ (succ-ℕ n)))
( y))))
- ( is-zero-nat-zero-Fin {n})) ∙
+ ( nat-zero-Fin n)) ∙
( ( left-unit-law-multiple-Semiring R
( mul-Semiring R
( one-Semiring R)
@@ -568,7 +568,7 @@ binomial-theorem-Semiring R (succ-ℕ (succ-ℕ n)) x y H =
( power-Semiring R
( dist-ℕ m (succ-ℕ (succ-ℕ n)))
( y))))
- ( is-zero-nat-zero-Fin {n})) ∙
+ ( nat-zero-Fin n)) ∙
( ( left-unit-law-multiple-Semiring R
( mul-Semiring R
( one-Semiring R)
diff --git a/src/univalent-combinatorics/standard-finite-types.lagda.md b/src/univalent-combinatorics/standard-finite-types.lagda.md
index 76c5a3b31f..b86e62890e 100644
--- a/src/univalent-combinatorics/standard-finite-types.lagda.md
+++ b/src/univalent-combinatorics/standard-finite-types.lagda.md
@@ -291,25 +291,26 @@ pr2 (emb-nat-Fin k) = is-emb-nat-Fin k
```
```agda
-is-zero-nat-zero-Fin : {k : ℕ} → is-zero-ℕ (nat-Fin (succ-ℕ k) (zero-Fin k))
-is-zero-nat-zero-Fin {zero-ℕ} = refl
-is-zero-nat-zero-Fin {succ-ℕ k} = is-zero-nat-zero-Fin {k}
+abstract
+ nat-zero-Fin : (k : ℕ) → is-zero-ℕ (nat-Fin (succ-ℕ k) (zero-Fin k))
+ nat-zero-Fin zero-ℕ = refl
+ nat-zero-Fin (succ-ℕ k) = nat-zero-Fin k
+
+ nat-inr-Fin :
+ (k : ℕ) (x : Fin k) →
+ nat-Fin (succ-ℕ k) (inr-Fin k x) = succ-ℕ (nat-Fin k x)
+ nat-inr-Fin (succ-ℕ k) (inl x) = nat-inr-Fin k x
+ nat-inr-Fin (succ-ℕ k) (inr star) = refl
nat-skip-zero-Fin :
(k : ℕ) (x : Fin k) →
nat-Fin (succ-ℕ k) (skip-zero-Fin k x) = succ-ℕ (nat-Fin k x)
-nat-skip-zero-Fin (succ-ℕ k) (inl x) = nat-skip-zero-Fin k x
-nat-skip-zero-Fin (succ-ℕ k) (inr star) = refl
+nat-skip-zero-Fin = nat-inr-Fin
nat-succ-Fin :
(k : ℕ) (x : Fin k) →
nat-Fin (succ-ℕ k) (succ-Fin (succ-ℕ k) (inl x)) = succ-ℕ (nat-Fin k x)
nat-succ-Fin k x = nat-skip-zero-Fin k x
-
-nat-inr-Fin :
- (k : ℕ) (x : Fin k) → nat-Fin (succ-ℕ k) (inr-Fin k x) = succ-ℕ (nat-Fin k x)
-nat-inr-Fin (succ-ℕ k) (inl x) = nat-inr-Fin k x
-nat-inr-Fin (succ-ℕ k) (inr star) = refl
```
```agda
@@ -453,7 +454,7 @@ leq-nat-succ-Fin (succ-ℕ k) (inl x) =
leq-nat-succ-Fin (succ-ℕ k) (inr star) =
concatenate-eq-leq-ℕ
( succ-ℕ (nat-Fin (succ-ℕ k) (inr star)))
- ( is-zero-nat-zero-Fin {succ-ℕ k})
+ ( nat-zero-Fin (succ-ℕ k))
( leq-zero-ℕ (succ-ℕ (nat-Fin (succ-ℕ k) (inr star))))
```
@@ -539,6 +540,16 @@ is-inhabited-or-empty-Fin n =
is-inhabited-or-empty-is-decidable (is-decidable-Fin n)
```
+### `nat-Fin-reverse (succ-ℕ n)` maps `zero-Fin n` to `n`
+
+```agda
+abstract
+ nat-reverse-zero-Fin :
+ (n : ℕ) → nat-Fin-reverse (succ-ℕ n) (zero-Fin n) = n
+ nat-reverse-zero-Fin zero-ℕ = refl
+ nat-reverse-zero-Fin (succ-ℕ n) = ap succ-ℕ (nat-reverse-zero-Fin n)
+```
+
### The complement of `-1` in `Fin (n + 1)` is equivalent to `Fin n`
```agda