diff --git a/src/foundation-core/pullbacks.lagda.md b/src/foundation-core/pullbacks.lagda.md
index 9749065efc..332e6e96e2 100644
--- a/src/foundation-core/pullbacks.lagda.md
+++ b/src/foundation-core/pullbacks.lagda.md
@@ -15,6 +15,7 @@ open import foundation.functoriality-fibers-of-maps
open import foundation.identity-types
open import foundation.morphisms-arrows
open import foundation.standard-pullbacks
+open import foundation.type-arithmetic-standard-pullbacks
open import foundation.universe-levels
open import foundation-core.commuting-triangles-of-maps
diff --git a/src/foundation.lagda.md b/src/foundation.lagda.md
index 78a7642b23..df1b40c78a 100644
--- a/src/foundation.lagda.md
+++ b/src/foundation.lagda.md
@@ -76,6 +76,7 @@ open import foundation.complements public
open import foundation.complements-subtypes public
open import foundation.composite-maps-in-inverse-sequential-diagrams public
open import foundation.composition-algebra public
+open import foundation.composition-spans public
open import foundation.computational-identity-types public
open import foundation.cones-over-cospan-diagrams public
open import foundation.cones-over-inverse-sequential-diagrams public
@@ -380,6 +381,7 @@ open import foundation.split-idempotent-maps public
open import foundation.split-surjective-maps public
open import foundation.standard-apartness-relations public
open import foundation.standard-pullbacks public
+open import foundation.standard-ternary-pullbacks public
open import foundation.strict-symmetrization-binary-relations public
open import foundation.strictly-involutive-identity-types public
open import foundation.strictly-right-unital-concatenation-identifications public
@@ -432,6 +434,7 @@ open import foundation.type-arithmetic-coproduct-types public
open import foundation.type-arithmetic-dependent-function-types public
open import foundation.type-arithmetic-dependent-pair-types public
open import foundation.type-arithmetic-empty-type public
+open import foundation.type-arithmetic-standard-pullbacks public
open import foundation.type-arithmetic-unit-type public
open import foundation.type-duality public
open import foundation.type-theoretic-principle-of-choice public
diff --git a/src/foundation/composition-spans.lagda.md b/src/foundation/composition-spans.lagda.md
new file mode 100644
index 0000000000..2611cdf5b1
--- /dev/null
+++ b/src/foundation/composition-spans.lagda.md
@@ -0,0 +1,163 @@
+# Composition of spans
+
+```agda
+module foundation.composition-spans where
+```
+
+Imports
+
+```agda
+open import foundation.commuting-triangles-of-maps
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.equivalences-arrows
+open import foundation.equivalences-spans
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.morphisms-arrows
+open import foundation.morphisms-spans
+open import foundation.pullbacks
+open import foundation.spans
+open import foundation.standard-pullbacks
+open import foundation.type-arithmetic-standard-pullbacks
+open import foundation.universe-levels
+
+open import foundation-core.function-types
+```
+
+
+
+## Idea
+
+Given two [spans](foundation.spans.md) `F` and `G` such that the source of `G`
+is the target of `F`
+
+```text
+ F G
+
+ A <----- S -----> B <----- T -----> C,
+```
+
+then we may
+{{#concept "compose" Disambiguation="spans of types" Agda=comp-span}} the two
+spans by forming the [pullback](foundation.standard-pullbacks.md) of the middle
+[cospan diagram](foundation.cospan-diagrams.md)
+
+```text
+ ∙ ------> T ------> C
+ | ⌟ |
+ | | G
+ ∨ ∨
+ S ------> B
+ |
+ | F
+ ∨
+ A
+```
+
+giving us a span `G ∘ F` from `A` to `C`. This operation is unital and
+associative.
+
+## Definitions
+
+### Composition of spans
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3}
+ (G : span l4 B C) (F : span l5 A B)
+ where
+
+ spanning-type-comp-span : UU (l2 ⊔ l4 ⊔ l5)
+ spanning-type-comp-span =
+ standard-pullback (right-map-span F) (left-map-span G)
+
+ left-map-comp-span : spanning-type-comp-span → A
+ left-map-comp-span = left-map-span F ∘ vertical-map-standard-pullback
+
+ right-map-comp-span : spanning-type-comp-span → C
+ right-map-comp-span = right-map-span G ∘ horizontal-map-standard-pullback
+
+ comp-span : span (l2 ⊔ l4 ⊔ l5) A C
+ comp-span = spanning-type-comp-span , left-map-comp-span , right-map-comp-span
+```
+
+## Properties
+
+### Associativity of composition of spans
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 l7 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
+ (H : span l5 C D) (G : span l6 B C) (F : span l7 A B)
+ where
+
+ essentially-associative-spanning-type-comp-span :
+ spanning-type-comp-span (comp-span H G) F ≃
+ spanning-type-comp-span H (comp-span G F)
+ essentially-associative-spanning-type-comp-span =
+ inv-associative-standard-pullback
+ ( right-map-span F)
+ ( left-map-span G)
+ ( right-map-span G)
+ ( left-map-span H)
+
+ essentially-associative-comp-span :
+ equiv-span (comp-span (comp-span H G) F) (comp-span H (comp-span G F))
+ essentially-associative-comp-span =
+ ( essentially-associative-spanning-type-comp-span , refl-htpy , refl-htpy)
+
+ associative-comp-span :
+ comp-span (comp-span H G) F = comp-span H (comp-span G F)
+ associative-comp-span =
+ eq-equiv-span
+ ( comp-span (comp-span H G) F)
+ ( comp-span H (comp-span G F))
+ ( essentially-associative-comp-span)
+```
+
+### The left unit law for composition of spans
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (F : span l3 A B)
+ where
+
+ left-unit-law-comp-span' :
+ equiv-span F (comp-span id-span F)
+ left-unit-law-comp-span' =
+ inv-right-unit-law-standard-pullback (right-map-span F) ,
+ refl-htpy ,
+ refl-htpy
+
+ left-unit-law-comp-span :
+ equiv-span (comp-span id-span F) F
+ left-unit-law-comp-span =
+ right-unit-law-standard-pullback (right-map-span F) ,
+ refl-htpy ,
+ inv-htpy coherence-square-standard-pullback
+```
+
+### The right unit law for composition of spans
+
+```agda
+module _
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (F : span l3 A B)
+ where
+
+ right-unit-law-comp-span' :
+ equiv-span F (comp-span F id-span)
+ right-unit-law-comp-span' =
+ inv-left-unit-law-standard-pullback (left-map-span F) ,
+ refl-htpy ,
+ refl-htpy
+
+ right-unit-law-comp-span :
+ equiv-span (comp-span F id-span) F
+ right-unit-law-comp-span =
+ left-unit-law-standard-pullback (left-map-span F) ,
+ coherence-square-standard-pullback ,
+ refl-htpy
+```
diff --git a/src/foundation/operations-spans.lagda.md b/src/foundation/operations-spans.lagda.md
index 9037d78969..6562513941 100644
--- a/src/foundation/operations-spans.lagda.md
+++ b/src/foundation/operations-spans.lagda.md
@@ -138,3 +138,8 @@ module _
pr2 (pr2 right-concat-equiv-arrow-span) =
right-map-right-concat-equiv-arrow-span
```
+
+## See also
+
+- [Composition of spans](foundation.composition-spans.md)
+- [Opposite spans](foundation.opposite-spans.md)
diff --git a/src/foundation/standard-pullbacks.lagda.md b/src/foundation/standard-pullbacks.lagda.md
index bd7131a988..8f0db009ca 100644
--- a/src/foundation/standard-pullbacks.lagda.md
+++ b/src/foundation/standard-pullbacks.lagda.md
@@ -129,36 +129,6 @@ module _
pr2 (pr2 (gap c z)) = coherence-square-cone f g c z
```
-#### The standard ternary pullback
-
-Given two cospans with a shared vertex `B`:
-
-```text
- f g h i
- A ----> X <---- B ----> Y <---- C,
-```
-
-we call the standard limit of the diagram the
-{{#concept "standard ternary pullback" Disambiguation="of types" Agda=standard-ternary-pullback}}.
-It is defined as the sum
-
-```text
- standard-ternary-pullback f g h i :=
- Σ (a : A) (b : B) (c : C), ((f a = g b) × (h b = i c)).
-```
-
-```agda
-module _
- {l1 l2 l3 l4 l5 : Level}
- {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
- (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
- where
-
- standard-ternary-pullback : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ l5)
- standard-ternary-pullback =
- Σ A (λ a → Σ B (λ b → Σ C (λ c → (f a = g b) × (h b = i c))))
-```
-
## Properties
### Characterization of the identity type of the standard pullback
@@ -257,231 +227,6 @@ module _
pr2 (pr2 (htpy-cone-up-pullback-standard-pullback c)) = right-unit-htpy
```
-### Standard pullbacks are symmetric
-
-The standard pullback of `f : A -> X <- B : g` is equivalent to the standard
-pullback of `g : B -> X <- A : f`.
-
-```agda
-map-commutative-standard-pullback :
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
- (f : A → X) (g : B → X) → standard-pullback f g → standard-pullback g f
-pr1 (map-commutative-standard-pullback f g x) =
- horizontal-map-standard-pullback x
-pr1 (pr2 (map-commutative-standard-pullback f g x)) =
- vertical-map-standard-pullback x
-pr2 (pr2 (map-commutative-standard-pullback f g x)) =
- inv (coherence-square-standard-pullback x)
-
-inv-inv-map-commutative-standard-pullback :
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
- (f : A → X) (g : B → X) →
- ( map-commutative-standard-pullback f g ∘
- map-commutative-standard-pullback g f) ~ id
-inv-inv-map-commutative-standard-pullback f g x =
- eq-pair-eq-fiber
- ( eq-pair-eq-fiber
- ( inv-inv (coherence-square-standard-pullback x)))
-
-abstract
- is-equiv-map-commutative-standard-pullback :
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
- (f : A → X) (g : B → X) → is-equiv (map-commutative-standard-pullback f g)
- is-equiv-map-commutative-standard-pullback f g =
- is-equiv-is-invertible
- ( map-commutative-standard-pullback g f)
- ( inv-inv-map-commutative-standard-pullback f g)
- ( inv-inv-map-commutative-standard-pullback g f)
-
-commutative-standard-pullback :
- {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
- (f : A → X) (g : B → X) →
- standard-pullback f g ≃ standard-pullback g f
-pr1 (commutative-standard-pullback f g) =
- map-commutative-standard-pullback f g
-pr2 (commutative-standard-pullback f g) =
- is-equiv-map-commutative-standard-pullback f g
-```
-
-#### The gap map of the swapped cone computes as the underlying gap map followed by a swap
-
-```agda
-triangle-map-commutative-standard-pullback :
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
- (f : A → X) (g : B → X) (c : cone f g C) →
- gap g f (swap-cone f g c) ~
- map-commutative-standard-pullback f g ∘ gap f g c
-triangle-map-commutative-standard-pullback f g c = refl-htpy
-```
-
-### Standard pullbacks are associative
-
-Consider two cospans with a shared vertex `B`:
-
-```text
- f g h i
- A ----> X <---- B ----> Y <---- C,
-```
-
-then we can construct their limit using standard pullbacks in two equivalent
-ways. We can construct it by first forming the standard pullback of `f` and `g`,
-and then forming the standard pullback of the resulting `h ∘ f'` and `i`
-
-```text
- (A ×_X B) ×_Y C ---------------------> C
- | ⌟ |
- | | i
- ∨ ∨
- A ×_X B ---------> B ------------> Y
- | ⌟ f' | h
- | | g
- ∨ ∨
- A ------------> X,
- f
-```
-
-or we can first form the pullback of `h` and `i`, and then form the pullback of
-`f` and the resulting `g ∘ i'`:
-
-```text
- A ×_X (B ×_Y C) --> B ×_Y C ---------> C
- | ⌟ | ⌟ |
- | | i' | i
- | ∨ ∨
- | B ------------> Y
- | | h
- | | g
- ∨ ∨
- A ------------> X.
- f
-```
-
-We show that both of these constructions are equivalent by showing they are
-equivalent to the standard ternary pullback.
-
-**Note:** Associativity with respect to ternary cospans
-
-```text
- B
- |
- | g
- ∨
- A ------> X <------ C
- f h
-```
-
-is a special case of what we consider here that is recovered by using
-
-```text
- f g g h
- A ----> X <---- B ----> X <---- C.
-```
-
-- See also the following relevant stack exchange question:
- [Associativity of pullbacks](https://math.stackexchange.com/questions/2046276/associativity-of-pullbacks).
-
-#### Computing the left associated iterated standard pullback
-
-```agda
-module _
- {l1 l2 l3 l4 l5 : Level}
- {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
- (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
- where
-
- map-left-associative-standard-pullback :
- standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i →
- standard-ternary-pullback f g h i
- map-left-associative-standard-pullback ((a , b , p) , c , q) =
- ( a , b , c , p , q)
-
- map-inv-left-associative-standard-pullback :
- standard-ternary-pullback f g h i →
- standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i
- map-inv-left-associative-standard-pullback (a , b , c , p , q) =
- ( ( a , b , p) , c , q)
-
- is-equiv-map-left-associative-standard-pullback :
- is-equiv map-left-associative-standard-pullback
- is-equiv-map-left-associative-standard-pullback =
- is-equiv-is-invertible
- ( map-inv-left-associative-standard-pullback)
- ( refl-htpy)
- ( refl-htpy)
-
- compute-left-associative-standard-pullback :
- standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i ≃
- standard-ternary-pullback f g h i
- compute-left-associative-standard-pullback =
- ( map-left-associative-standard-pullback ,
- is-equiv-map-left-associative-standard-pullback)
-```
-
-#### Computing the right associated iterated dependent pullback
-
-```agda
-module _
- {l1 l2 l3 l4 l5 : Level}
- {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
- (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
- where
-
- map-right-associative-standard-pullback :
- standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) →
- standard-ternary-pullback f g h i
- map-right-associative-standard-pullback (a , (b , c , p) , q) =
- ( a , b , c , q , p)
-
- map-inv-right-associative-standard-pullback :
- standard-ternary-pullback f g h i →
- standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
- map-inv-right-associative-standard-pullback (a , b , c , p , q) =
- ( a , (b , c , q) , p)
-
- is-equiv-map-right-associative-standard-pullback :
- is-equiv map-right-associative-standard-pullback
- is-equiv-map-right-associative-standard-pullback =
- is-equiv-is-invertible
- ( map-inv-right-associative-standard-pullback)
- ( refl-htpy)
- ( refl-htpy)
-
- compute-right-associative-standard-pullback :
- standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) ≃
- standard-ternary-pullback f g h i
- compute-right-associative-standard-pullback =
- ( map-right-associative-standard-pullback ,
- is-equiv-map-right-associative-standard-pullback)
-```
-
-#### Standard pullbacks are associative
-
-```agda
-module _
- {l1 l2 l3 l4 l5 : Level}
- {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
- (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
- where
-
- associative-standard-pullback :
- standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i ≃
- standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
- associative-standard-pullback =
- ( inv-equiv (compute-right-associative-standard-pullback f g h i)) ∘e
- ( compute-left-associative-standard-pullback f g h i)
-
- map-associative-standard-pullback :
- standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i →
- standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
- map-associative-standard-pullback = map-equiv associative-standard-pullback
-
- map-inv-associative-standard-pullback :
- standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) →
- standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i
- map-inv-associative-standard-pullback =
- map-inv-equiv associative-standard-pullback
-```
-
### Pullbacks can be "folded"
Given a standard pullback square
diff --git a/src/foundation/standard-ternary-pullbacks.lagda.md b/src/foundation/standard-ternary-pullbacks.lagda.md
new file mode 100644
index 0000000000..6ca4fd1596
--- /dev/null
+++ b/src/foundation/standard-ternary-pullbacks.lagda.md
@@ -0,0 +1,76 @@
+# Standard ternary pullbacks
+
+```agda
+module foundation.standard-ternary-pullbacks where
+```
+
+Imports
+
+```agda
+open import foundation.action-on-identifications-functions
+open import foundation.cones-over-cospan-diagrams
+open import foundation.dependent-pair-types
+open import foundation.equality-cartesian-product-types
+open import foundation.functoriality-cartesian-product-types
+open import foundation.identity-types
+open import foundation.structure-identity-principle
+open import foundation.universe-levels
+
+open import foundation-core.cartesian-product-types
+open import foundation-core.commuting-squares-of-maps
+open import foundation-core.diagonal-maps-cartesian-products-of-types
+open import foundation-core.equality-dependent-pair-types
+open import foundation-core.equivalences
+open import foundation-core.function-types
+open import foundation-core.functoriality-dependent-pair-types
+open import foundation-core.homotopies
+open import foundation-core.retractions
+open import foundation-core.sections
+open import foundation-core.type-theoretic-principle-of-choice
+open import foundation-core.universal-property-pullbacks
+open import foundation-core.whiskering-identifications-concatenation
+```
+
+
+
+## Idea
+
+Given two [cospan of types](foundation.cospans.md) with a shared vertex `B`:
+
+```text
+ f g h i
+ A ----> X <---- B ----> Y <---- C,
+```
+
+we call the standard limit of the diagram the
+{{#concept "standard ternary pullback" Disambiguation="of types" Agda=standard-ternary-pullback}}.
+It is defined as the [sum](foundation.dependent-pair-types.md)
+
+```text
+ standard-ternary-pullback f g h i :=
+ Σ (a : A) (b : B) (c : C), ((f a = g b) × (h b = i c)).
+```
+
+## Definitions
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
+ (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
+ where
+
+ standard-ternary-pullback : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ l5)
+ standard-ternary-pullback =
+ Σ A (λ a → Σ B (λ b → Σ C (λ c → (f a = g b) × (h b = i c))))
+```
+
+## See also
+
+- [Type arithmetic with standard pullbacks](foundation.type-arithmetic-standard-pullbacks.md)
+
+## Table of files about pullbacks
+
+The following table lists files that are about pullbacks as a general concept.
+
+{{#include tables/pullbacks.md}}
diff --git a/src/foundation/type-arithmetic-standard-pullbacks.lagda.md b/src/foundation/type-arithmetic-standard-pullbacks.lagda.md
new file mode 100644
index 0000000000..09335074fa
--- /dev/null
+++ b/src/foundation/type-arithmetic-standard-pullbacks.lagda.md
@@ -0,0 +1,417 @@
+# Type arithmetic with standard pullbacks
+
+```agda
+module foundation.type-arithmetic-standard-pullbacks where
+```
+
+Imports
+
+```agda
+open import foundation.cones-over-cospan-diagrams
+open import foundation.dependent-pair-types
+open import foundation.equality-dependent-pair-types
+open import foundation.standard-pullbacks
+open import foundation.standard-ternary-pullbacks
+open import foundation.type-arithmetic-dependent-pair-types
+open import foundation.universe-levels
+
+open import foundation-core.cartesian-product-types
+open import foundation-core.contractible-types
+open import foundation-core.equivalences
+open import foundation-core.function-types
+open import foundation-core.homotopies
+open import foundation-core.identity-types
+open import foundation-core.propositions
+open import foundation-core.retractions
+open import foundation-core.sections
+```
+
+
+
+## Idea
+
+We prove laws for the manipulation of
+[standard pullbacks](foundation.standard-pullbacks.md) with respect to
+themselves.
+
+## Laws
+
+### Standard pullbacks are associative
+
+Consider two cospans with a shared vertex `B`:
+
+```text
+ f g h i
+ A ----> X <---- B ----> Y <---- C,
+```
+
+then we can construct their limit using standard pullbacks in two equivalent
+ways. We can construct it by first forming the standard pullback of `f` and `g`,
+and then forming the standard pullback of the resulting `h ∘ f'` and `i`
+
+```text
+ (A ×_X B) ×_Y C ---------------------> C
+ | ⌟ |
+ | | i
+ ∨ ∨
+ A ×_X B ---------> B ------------> Y
+ | ⌟ f' | h
+ | | g
+ ∨ ∨
+ A ------------> X,
+ f
+```
+
+or we can first form the pullback of `h` and `i`, and then form the pullback of
+`f` and the resulting `g ∘ i'`:
+
+```text
+ A ×_X (B ×_Y C) --> B ×_Y C ---------> C
+ | ⌟ | ⌟ |
+ | | i' | i
+ | ∨ ∨
+ | B ------------> Y
+ | | h
+ | | g
+ ∨ ∨
+ A ------------> X.
+ f
+```
+
+We show that both of these constructions are equivalent by showing they are
+equivalent to the standard ternary pullback.
+
+**Note:** Associativity with respect to ternary cospans
+
+```text
+ B
+ |
+ | g
+ ∨
+ A ------> X <------ C
+ f h
+```
+
+is a special case of what we consider here that is recovered by using
+
+```text
+ f g g h
+ A ----> X <---- B ----> X <---- C.
+```
+
+- See also the following relevant stack exchange question:
+ [Associativity of pullbacks](https://math.stackexchange.com/questions/2046276/associativity-of-pullbacks).
+
+#### Computing the left associated iterated standard pullback
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
+ (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
+ where
+
+ map-left-associative-standard-pullback :
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i →
+ standard-ternary-pullback f g h i
+ map-left-associative-standard-pullback ((a , b , p) , c , q) =
+ ( a , b , c , p , q)
+
+ map-inv-left-associative-standard-pullback :
+ standard-ternary-pullback f g h i →
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i
+ map-inv-left-associative-standard-pullback (a , b , c , p , q) =
+ ( ( a , b , p) , c , q)
+
+ is-equiv-map-left-associative-standard-pullback :
+ is-equiv map-left-associative-standard-pullback
+ is-equiv-map-left-associative-standard-pullback =
+ is-equiv-is-invertible
+ ( map-inv-left-associative-standard-pullback)
+ ( refl-htpy)
+ ( refl-htpy)
+
+ is-equiv-map-inv-left-associative-standard-pullback :
+ is-equiv map-inv-left-associative-standard-pullback
+ is-equiv-map-inv-left-associative-standard-pullback =
+ is-equiv-is-invertible
+ ( map-left-associative-standard-pullback)
+ ( refl-htpy)
+ ( refl-htpy)
+
+ compute-left-associative-standard-pullback :
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i ≃
+ standard-ternary-pullback f g h i
+ compute-left-associative-standard-pullback =
+ ( map-left-associative-standard-pullback ,
+ is-equiv-map-left-associative-standard-pullback)
+
+ compute-inv-left-associative-standard-pullback :
+ standard-ternary-pullback f g h i ≃
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i
+ compute-inv-left-associative-standard-pullback =
+ ( map-inv-left-associative-standard-pullback ,
+ is-equiv-map-inv-left-associative-standard-pullback)
+```
+
+#### Computing the right associated iterated dependent pullback
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
+ (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
+ where
+
+ map-right-associative-standard-pullback :
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) →
+ standard-ternary-pullback f g h i
+ map-right-associative-standard-pullback (a , (b , c , p) , q) =
+ ( a , b , c , q , p)
+
+ map-inv-right-associative-standard-pullback :
+ standard-ternary-pullback f g h i →
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
+ map-inv-right-associative-standard-pullback (a , b , c , p , q) =
+ ( a , (b , c , q) , p)
+
+ is-equiv-map-right-associative-standard-pullback :
+ is-equiv map-right-associative-standard-pullback
+ is-equiv-map-right-associative-standard-pullback =
+ is-equiv-is-invertible
+ ( map-inv-right-associative-standard-pullback)
+ ( refl-htpy)
+ ( refl-htpy)
+
+ is-equiv-map-inv-right-associative-standard-pullback :
+ is-equiv map-inv-right-associative-standard-pullback
+ is-equiv-map-inv-right-associative-standard-pullback =
+ is-equiv-is-invertible
+ ( map-right-associative-standard-pullback)
+ ( refl-htpy)
+ ( refl-htpy)
+
+ compute-right-associative-standard-pullback :
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) ≃
+ standard-ternary-pullback f g h i
+ compute-right-associative-standard-pullback =
+ ( map-right-associative-standard-pullback ,
+ is-equiv-map-right-associative-standard-pullback)
+
+ compute-inv-right-associative-standard-pullback :
+ standard-ternary-pullback f g h i ≃
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
+ compute-inv-right-associative-standard-pullback =
+ ( map-inv-right-associative-standard-pullback ,
+ is-equiv-map-inv-right-associative-standard-pullback)
+```
+
+#### Standard pullbacks are associative
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {X : UU l1} {Y : UU l2} {A : UU l3} {B : UU l4} {C : UU l5}
+ (f : A → X) (g : B → X) (h : B → Y) (i : C → Y)
+ where
+
+ associative-standard-pullback :
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i ≃
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
+ associative-standard-pullback =
+ ( compute-inv-right-associative-standard-pullback f g h i) ∘e
+ ( compute-left-associative-standard-pullback f g h i)
+
+ inv-associative-standard-pullback :
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) ≃
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i
+ inv-associative-standard-pullback =
+ ( compute-inv-left-associative-standard-pullback f g h i) ∘e
+ ( compute-right-associative-standard-pullback f g h i)
+
+ map-associative-standard-pullback :
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i →
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i})
+ map-associative-standard-pullback = map-equiv associative-standard-pullback
+
+ map-inv-associative-standard-pullback :
+ standard-pullback f (g ∘ vertical-map-standard-pullback {f = h} {g = i}) →
+ standard-pullback (h ∘ horizontal-map-standard-pullback {f = f} {g = g}) i
+ map-inv-associative-standard-pullback =
+ map-inv-equiv associative-standard-pullback
+```
+
+### Unit laws for standard pullbacks
+
+Pulling back along the identity map
+
+```agda
+module _
+ {l1 l2 : Level} {X : UU l1} {A : UU l2} (f : A → X)
+ where
+
+ map-left-unit-law-standard-pullback :
+ standard-pullback id f → A
+ map-left-unit-law-standard-pullback (x , a , p) = a
+
+ map-inv-left-unit-law-standard-pullback :
+ A → standard-pullback id f
+ map-inv-left-unit-law-standard-pullback a = f a , a , refl
+
+ is-section-map-inv-left-unit-law-standard-pullback :
+ is-section
+ map-left-unit-law-standard-pullback
+ map-inv-left-unit-law-standard-pullback
+ is-section-map-inv-left-unit-law-standard-pullback = refl-htpy
+
+ is-retraction-map-inv-left-unit-law-standard-pullback :
+ is-retraction
+ map-left-unit-law-standard-pullback
+ map-inv-left-unit-law-standard-pullback
+ is-retraction-map-inv-left-unit-law-standard-pullback (.(f a) , a , refl) =
+ refl
+
+ is-equiv-map-left-unit-law-standard-pullback :
+ is-equiv map-left-unit-law-standard-pullback
+ is-equiv-map-left-unit-law-standard-pullback =
+ is-equiv-is-invertible
+ map-inv-left-unit-law-standard-pullback
+ is-section-map-inv-left-unit-law-standard-pullback
+ is-retraction-map-inv-left-unit-law-standard-pullback
+
+ is-equiv-map-inv-left-unit-law-standard-pullback :
+ is-equiv map-inv-left-unit-law-standard-pullback
+ is-equiv-map-inv-left-unit-law-standard-pullback =
+ is-equiv-is-invertible
+ map-left-unit-law-standard-pullback
+ is-retraction-map-inv-left-unit-law-standard-pullback
+ is-section-map-inv-left-unit-law-standard-pullback
+
+ left-unit-law-standard-pullback :
+ standard-pullback id f ≃ A
+ left-unit-law-standard-pullback =
+ map-left-unit-law-standard-pullback ,
+ is-equiv-map-left-unit-law-standard-pullback
+
+ inv-left-unit-law-standard-pullback :
+ A ≃ standard-pullback id f
+ inv-left-unit-law-standard-pullback =
+ map-inv-left-unit-law-standard-pullback ,
+ is-equiv-map-inv-left-unit-law-standard-pullback
+```
+
+### Unit laws for standard pullbacks
+
+Pulling back along the identity map is the identity operation.
+
+```agda
+module _
+ {l1 l2 : Level} {X : UU l1} {A : UU l2} (f : A → X)
+ where
+
+ map-right-unit-law-standard-pullback :
+ standard-pullback f id → A
+ map-right-unit-law-standard-pullback (a , x , p) = a
+
+ map-inv-right-unit-law-standard-pullback :
+ A → standard-pullback f id
+ map-inv-right-unit-law-standard-pullback a = a , f a , refl
+
+ is-section-map-inv-right-unit-law-standard-pullback :
+ is-section
+ map-right-unit-law-standard-pullback
+ map-inv-right-unit-law-standard-pullback
+ is-section-map-inv-right-unit-law-standard-pullback = refl-htpy
+
+ is-retraction-map-inv-right-unit-law-standard-pullback :
+ is-retraction
+ map-right-unit-law-standard-pullback
+ map-inv-right-unit-law-standard-pullback
+ is-retraction-map-inv-right-unit-law-standard-pullback (a , .(f a) , refl) =
+ refl
+
+ is-equiv-map-right-unit-law-standard-pullback :
+ is-equiv map-right-unit-law-standard-pullback
+ is-equiv-map-right-unit-law-standard-pullback =
+ is-equiv-is-invertible
+ map-inv-right-unit-law-standard-pullback
+ is-section-map-inv-right-unit-law-standard-pullback
+ is-retraction-map-inv-right-unit-law-standard-pullback
+
+ is-equiv-map-inv-right-unit-law-standard-pullback :
+ is-equiv map-inv-right-unit-law-standard-pullback
+ is-equiv-map-inv-right-unit-law-standard-pullback =
+ is-equiv-is-invertible
+ map-right-unit-law-standard-pullback
+ is-retraction-map-inv-right-unit-law-standard-pullback
+ is-section-map-inv-right-unit-law-standard-pullback
+
+ right-unit-law-standard-pullback :
+ standard-pullback f id ≃ A
+ right-unit-law-standard-pullback =
+ map-right-unit-law-standard-pullback ,
+ is-equiv-map-right-unit-law-standard-pullback
+
+ inv-right-unit-law-standard-pullback :
+ A ≃ standard-pullback f id
+ inv-right-unit-law-standard-pullback =
+ map-inv-right-unit-law-standard-pullback ,
+ is-equiv-map-inv-right-unit-law-standard-pullback
+```
+
+### Standard pullbacks are symmetric
+
+The standard pullback of `f : A -> X <- B : g` is equivalent to the standard
+pullback of `g : B -> X <- A : f`.
+
+```agda
+map-commutative-standard-pullback :
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
+ (f : A → X) (g : B → X) → standard-pullback f g → standard-pullback g f
+pr1 (map-commutative-standard-pullback f g x) =
+ horizontal-map-standard-pullback x
+pr1 (pr2 (map-commutative-standard-pullback f g x)) =
+ vertical-map-standard-pullback x
+pr2 (pr2 (map-commutative-standard-pullback f g x)) =
+ inv (coherence-square-standard-pullback x)
+
+inv-inv-map-commutative-standard-pullback :
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
+ (f : A → X) (g : B → X) →
+ ( map-commutative-standard-pullback f g ∘
+ map-commutative-standard-pullback g f) ~ id
+inv-inv-map-commutative-standard-pullback f g x =
+ eq-pair-eq-fiber
+ ( eq-pair-eq-fiber
+ ( inv-inv (coherence-square-standard-pullback x)))
+
+abstract
+ is-equiv-map-commutative-standard-pullback :
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
+ (f : A → X) (g : B → X) → is-equiv (map-commutative-standard-pullback f g)
+ is-equiv-map-commutative-standard-pullback f g =
+ is-equiv-is-invertible
+ ( map-commutative-standard-pullback g f)
+ ( inv-inv-map-commutative-standard-pullback f g)
+ ( inv-inv-map-commutative-standard-pullback g f)
+
+commutative-standard-pullback :
+ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {X : UU l3}
+ (f : A → X) (g : B → X) →
+ standard-pullback f g ≃ standard-pullback g f
+pr1 (commutative-standard-pullback f g) =
+ map-commutative-standard-pullback f g
+pr2 (commutative-standard-pullback f g) =
+ is-equiv-map-commutative-standard-pullback f g
+```
+
+#### The gap map of the swapped cone computes as the underlying gap map followed by a swap
+
+```agda
+triangle-map-commutative-standard-pullback :
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
+ (f : A → X) (g : B → X) (c : cone f g C) →
+ gap g f (swap-cone f g c) ~
+ map-commutative-standard-pullback f g ∘ gap f g c
+triangle-map-commutative-standard-pullback f g c = refl-htpy
+```
diff --git a/src/globular-types.lagda.md b/src/globular-types.lagda.md
index 260995b614..89ac4160a3 100644
--- a/src/globular-types.lagda.md
+++ b/src/globular-types.lagda.md
@@ -31,6 +31,7 @@ open import globular-types.fibers-globular-maps public
open import globular-types.globular-equivalences public
open import globular-types.globular-maps public
open import globular-types.globular-types public
+open import globular-types.homotopies-globular-maps public
open import globular-types.large-colax-reflexive-globular-maps public
open import globular-types.large-colax-transitive-globular-maps public
open import globular-types.large-globular-maps public
diff --git a/src/globular-types/binary-globular-maps.lagda.md b/src/globular-types/binary-globular-maps.lagda.md
index aa89346264..16bdfa722f 100644
--- a/src/globular-types/binary-globular-maps.lagda.md
+++ b/src/globular-types/binary-globular-maps.lagda.md
@@ -13,6 +13,7 @@ open import foundation.universe-levels
open import globular-types.globular-maps
open import globular-types.globular-types
+open import globular-types.points-globular-types
```
@@ -45,19 +46,82 @@ record
{l1 l2 l3 l4 l5 l6 : Level}
(G : Globular-Type l1 l2) (H : Globular-Type l3 l4)
(K : Globular-Type l5 l6) : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ l5 ⊔ l6)
- where
- coinductive
- field
- 0-cell-binary-globular-map :
- 0-cell-Globular-Type G → 0-cell-Globular-Type H →
- 0-cell-Globular-Type K
- 1-cell-binary-globular-map-binary-globular-map :
- {x x' : 0-cell-Globular-Type G}
- {y y' : 0-cell-Globular-Type H} →
- binary-globular-map
- ( 1-cell-globular-type-Globular-Type G x x')
- ( 1-cell-globular-type-Globular-Type H y y')
- ( 1-cell-globular-type-Globular-Type K
- ( 0-cell-binary-globular-map x y)
- ( 0-cell-binary-globular-map x' y'))
+ where
+ coinductive
+ field
+ 0-cell-binary-globular-map :
+ 0-cell-Globular-Type G → 0-cell-Globular-Type H →
+ 0-cell-Globular-Type K
+
+ 1-cell-binary-globular-map-binary-globular-map :
+ {x x' : 0-cell-Globular-Type G}
+ {y y' : 0-cell-Globular-Type H} →
+ binary-globular-map
+ ( 1-cell-globular-type-Globular-Type G x x')
+ ( 1-cell-globular-type-Globular-Type H y y')
+ ( 1-cell-globular-type-Globular-Type K
+ ( 0-cell-binary-globular-map x y)
+ ( 0-cell-binary-globular-map x' y'))
+
+open binary-globular-map public
+```
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {G : Globular-Type l1 l2} {H : Globular-Type l3 l4} {K : Globular-Type l5 l6}
+ (F : binary-globular-map G H K)
+ where
+
+ 1-cell-binary-globular-map :
+ {x x' : 0-cell-Globular-Type G} {y y' : 0-cell-Globular-Type H} →
+ 1-cell-Globular-Type G x x' →
+ 1-cell-Globular-Type H y y' →
+ 1-cell-Globular-Type K
+ ( 0-cell-binary-globular-map F x y)
+ ( 0-cell-binary-globular-map F x' y')
+ 1-cell-binary-globular-map =
+ 0-cell-binary-globular-map
+ ( 1-cell-binary-globular-map-binary-globular-map F)
+
+ 2-cell-binary-globular-map :
+ {x x' : 0-cell-Globular-Type G}
+ {y y' : 0-cell-Globular-Type H}
+ {f f' : 1-cell-Globular-Type G x x'}
+ {g g' : 1-cell-Globular-Type H y y'} →
+ 2-cell-Globular-Type G f f' →
+ 2-cell-Globular-Type H g g' →
+ 2-cell-Globular-Type K
+ ( 1-cell-binary-globular-map f g)
+ ( 1-cell-binary-globular-map f' g')
+ 2-cell-binary-globular-map =
+ 0-cell-binary-globular-map
+ ( 1-cell-binary-globular-map-binary-globular-map
+ ( 1-cell-binary-globular-map-binary-globular-map F))
+```
+
+### Evaluating one of the arguments of a binary globular map
+
+```agda
+ev-left-binary-globular-map :
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {G : Globular-Type l1 l2} {H : Globular-Type l3 l4} {K : Globular-Type l5 l6}
+ (F : binary-globular-map G H K) (x : point-Globular-Type G) → globular-map H K
+0-cell-globular-map (ev-left-binary-globular-map F x) =
+ 0-cell-binary-globular-map F (0-cell-point-Globular-Type x)
+1-cell-globular-map-globular-map (ev-left-binary-globular-map F x) =
+ ev-left-binary-globular-map
+ ( 1-cell-binary-globular-map-binary-globular-map F)
+ ( 1-cell-point-point-Globular-Type x)
+
+ev-right-binary-globular-map :
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {G : Globular-Type l1 l2} {H : Globular-Type l3 l4} {K : Globular-Type l5 l6}
+ (F : binary-globular-map G H K) (x : point-Globular-Type H) → globular-map G K
+0-cell-globular-map (ev-right-binary-globular-map F x) y =
+ 0-cell-binary-globular-map F y (0-cell-point-Globular-Type x)
+1-cell-globular-map-globular-map (ev-right-binary-globular-map F x) =
+ ev-right-binary-globular-map
+ ( 1-cell-binary-globular-map-binary-globular-map F)
+ ( 1-cell-point-point-Globular-Type x)
```
diff --git a/src/globular-types/composition-structure-globular-types.lagda.md b/src/globular-types/composition-structure-globular-types.lagda.md
index cadac1c419..ec0b18b2bd 100644
--- a/src/globular-types/composition-structure-globular-types.lagda.md
+++ b/src/globular-types/composition-structure-globular-types.lagda.md
@@ -13,6 +13,7 @@ open import foundation.universe-levels
open import globular-types.binary-globular-maps
open import globular-types.globular-types
+open import globular-types.transitive-globular-types
```
@@ -36,10 +37,9 @@ consists of binary operations
- ∘ - : (𝑛+1)-Cell G y z → (𝑛+1)-Cell G x y → (𝑛+1)-Cell G x z,
```
-each of which preserve all higher cells of the globular type `G`. Globular
-composition structure is therefore a strengthening of the
-[transitivity structure](globular-types.transitive-globular-types.md) on
-globular types.
+each of which preserve all higher cells of the globular type `G`. In comparison
+to [transitivity structure](globular-types.transitive-globular-types.md) on
+globular types, this also gives horizontal composition of higher cells.
## Definitions
@@ -66,5 +66,109 @@ record
composition-Globular-Type
( 1-cell-globular-type-Globular-Type G x y)
+ comp-1-cell-composition-Globular-Type :
+ {x y z : 0-cell-Globular-Type G} →
+ 1-cell-Globular-Type G y z →
+ 1-cell-Globular-Type G x y →
+ 1-cell-Globular-Type G x z
+ comp-1-cell-composition-Globular-Type =
+ 0-cell-binary-globular-map
+ comp-binary-globular-map-composition-Globular-Type
+
+ horizontal-comp-2-cell-composition-Globular-Type :
+ {x y z : 0-cell-Globular-Type G} →
+ {g g' : 1-cell-Globular-Type G y z} →
+ {f f' : 1-cell-Globular-Type G x y} →
+ 2-cell-Globular-Type G g g' →
+ 2-cell-Globular-Type G f f' →
+ 2-cell-Globular-Type G
+ ( comp-1-cell-composition-Globular-Type g f)
+ ( comp-1-cell-composition-Globular-Type g' f')
+ horizontal-comp-2-cell-composition-Globular-Type =
+ 1-cell-binary-globular-map
+ ( comp-binary-globular-map-composition-Globular-Type)
+
+ horizontal-comp-3-cell-composition-Globular-Type' :
+ {x y z : 0-cell-Globular-Type G}
+ {g g' : 1-cell-Globular-Type G y z}
+ {f f' : 1-cell-Globular-Type G x y}
+ {α α' : 2-cell-Globular-Type G g g'}
+ {β β' : 2-cell-Globular-Type G f f'} →
+ 3-cell-Globular-Type G α α' →
+ 3-cell-Globular-Type G β β' →
+ 3-cell-Globular-Type G
+ ( horizontal-comp-2-cell-composition-Globular-Type α β)
+ ( horizontal-comp-2-cell-composition-Globular-Type α' β')
+ horizontal-comp-3-cell-composition-Globular-Type' =
+ 2-cell-binary-globular-map
+ comp-binary-globular-map-composition-Globular-Type
+
open composition-Globular-Type public
```
+
+```agda
+module _
+ {l1 l2 : Level} {G : Globular-Type l1 l2} (H : composition-Globular-Type G)
+ where
+
+ comp-2-cell-composition-Globular-Type :
+ {x y : 0-cell-Globular-Type G} →
+ {f g h : 1-cell-Globular-Type G x y} →
+ 2-cell-Globular-Type G g h →
+ 2-cell-Globular-Type G f g →
+ 2-cell-Globular-Type G f h
+ comp-2-cell-composition-Globular-Type =
+ comp-1-cell-composition-Globular-Type
+ ( composition-1-cell-globular-type-Globular-Type H)
+
+ horizontal-comp-3-cell-composition-Globular-Type :
+ {x y : 0-cell-Globular-Type G}
+ {f g h : 1-cell-Globular-Type G x y}
+ {α α' : 2-cell-Globular-Type G g h}
+ {β β' : 2-cell-Globular-Type G f g} →
+ 3-cell-Globular-Type G α α' →
+ 3-cell-Globular-Type G β β' →
+ 3-cell-Globular-Type G
+ ( comp-2-cell-composition-Globular-Type α β)
+ ( comp-2-cell-composition-Globular-Type α' β')
+ horizontal-comp-3-cell-composition-Globular-Type =
+ horizontal-comp-2-cell-composition-Globular-Type
+ ( composition-1-cell-globular-type-Globular-Type H)
+
+module _
+ {l1 l2 : Level} {G : Globular-Type l1 l2} (H : composition-Globular-Type G)
+ where
+
+ comp-3-cell-composition-Globular-Type :
+ {x y : 0-cell-Globular-Type G} →
+ {f g : 1-cell-Globular-Type G x y} →
+ {α β γ : 2-cell-Globular-Type G f g} →
+ 3-cell-Globular-Type G β γ →
+ 3-cell-Globular-Type G α β →
+ 3-cell-Globular-Type G α γ
+ comp-3-cell-composition-Globular-Type =
+ comp-2-cell-composition-Globular-Type
+ ( composition-1-cell-globular-type-Globular-Type H)
+```
+
+## Properties
+
+### Globular types with composition structure are transitive
+
+```agda
+is-transitive-composition-Globular-Type :
+ {l1 l2 : Level} {G : Globular-Type l1 l2} →
+ composition-Globular-Type G →
+ is-transitive-Globular-Type G
+comp-1-cell-is-transitive-Globular-Type
+ ( is-transitive-composition-Globular-Type H) =
+ comp-1-cell-composition-Globular-Type H
+is-transitive-1-cell-globular-type-is-transitive-Globular-Type
+ ( is-transitive-composition-Globular-Type H) =
+ is-transitive-composition-Globular-Type
+ ( composition-1-cell-globular-type-Globular-Type H)
+```
+
+## See also
+
+- [Noncoherent wild $\omega$-semiprecategories](wild-category-theory.noncoherent-wild-omega-semiprecategories.md)
diff --git a/src/globular-types/globular-equivalences.lagda.md b/src/globular-types/globular-equivalences.lagda.md
index 5afece9603..b8a29f84dd 100644
--- a/src/globular-types/globular-equivalences.lagda.md
+++ b/src/globular-types/globular-equivalences.lagda.md
@@ -29,47 +29,90 @@ A {{#concept "globular equivalence" Agda=globular-equiv}} `e` between
pair of $n$-cells `x` and `y`, an equivalence of $(n+1)$-cells
```text
- eₙ₊₁ : (𝑛+1)-Cell A x y ≃ (𝑛+1)-Cell B (eₙ x) (eₙ y).
+ eₙ₊₁ : Aₙ₊₁ x y ≃ Bₙ₊₁ (eₙ x) (eₙ y).
```
## Definitions
-### Equivalences between globular types
+### The predicate on a globular map of being an equivalence
```agda
record
- globular-equiv
- {l1 l2 l3 l4 : Level} (A : Globular-Type l1 l2) (B : Globular-Type l3 l4) :
+ is-equiv-globular-map
+ {l1 l2 l3 l4 : Level}
+ {A : Globular-Type l1 l2} {B : Globular-Type l3 l4}
+ (f : globular-map A B) :
UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
where
coinductive
field
- 0-cell-equiv-globular-equiv :
- 0-cell-Globular-Type A ≃ 0-cell-Globular-Type B
-
- 0-cell-globular-equiv : 0-cell-Globular-Type A → 0-cell-Globular-Type B
- 0-cell-globular-equiv = map-equiv 0-cell-equiv-globular-equiv
+ is-equiv-0-cell-is-equiv-globular-map : is-equiv (0-cell-globular-map f)
- field
- 1-cell-globular-equiv-globular-equiv :
+ 1-cell-is-equiv-globular-map :
{x y : 0-cell-Globular-Type A} →
- globular-equiv
- ( 1-cell-globular-type-Globular-Type A x y)
- ( 1-cell-globular-type-Globular-Type B
- ( 0-cell-globular-equiv x)
- ( 0-cell-globular-equiv y))
+ is-equiv-globular-map (1-cell-globular-map-globular-map f {x} {y})
+
+open is-equiv-globular-map public
+```
-open globular-equiv public
+### Equivalences between globular types
-globular-map-globular-equiv :
- {l1 l2 l3 l4 : Level}
- {A : Globular-Type l1 l2} {B : Globular-Type l3 l4} →
- globular-equiv A B → globular-map A B
-0-cell-globular-map (globular-map-globular-equiv e) =
- map-equiv (0-cell-equiv-globular-equiv e)
-1-cell-globular-map-globular-map (globular-map-globular-equiv e) =
- globular-map-globular-equiv (1-cell-globular-equiv-globular-equiv e)
+```agda
+globular-equiv :
+ {l1 l2 l3 l4 : Level} → Globular-Type l1 l2 → Globular-Type l3 l4 →
+ UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
+globular-equiv A B = Σ (globular-map A B) (is-equiv-globular-map)
+
+module _
+ {l1 l2 l3 l4 : Level} {A : Globular-Type l1 l2} {B : Globular-Type l3 l4}
+ (e : globular-equiv A B)
+ where
+
+ globular-map-globular-equiv : globular-map A B
+ globular-map-globular-equiv = pr1 e
+
+ is-equiv-globular-equiv : is-equiv-globular-map globular-map-globular-equiv
+ is-equiv-globular-equiv = pr2 e
+
+ 0-cell-map-globular-equiv : 0-cell-Globular-Type A → 0-cell-Globular-Type B
+ 0-cell-map-globular-equiv =
+ 0-cell-globular-map globular-map-globular-equiv
+
+ is-equiv-0-cell-map-globular-equiv : is-equiv 0-cell-map-globular-equiv
+ is-equiv-0-cell-map-globular-equiv =
+ is-equiv-0-cell-is-equiv-globular-map is-equiv-globular-equiv
+
+ 0-cell-globular-equiv : 0-cell-Globular-Type A ≃ 0-cell-Globular-Type B
+ 0-cell-globular-equiv =
+ 0-cell-map-globular-equiv , is-equiv-0-cell-map-globular-equiv
+
+ 1-cell-globular-map-globular-equiv :
+ (x y : 0-cell-Globular-Type A) →
+ globular-map
+ ( 1-cell-globular-type-Globular-Type A x y)
+ ( 1-cell-globular-type-Globular-Type B
+ ( 0-cell-map-globular-equiv x)
+ ( 0-cell-map-globular-equiv y))
+ 1-cell-globular-map-globular-equiv x y =
+ 1-cell-globular-map-globular-map globular-map-globular-equiv
+
+ is-equiv-1-cell-globular-map-globular-equiv :
+ {x y : 0-cell-Globular-Type A} →
+ is-equiv-globular-map (1-cell-globular-map-globular-equiv x y)
+ is-equiv-1-cell-globular-map-globular-equiv =
+ 1-cell-is-equiv-globular-map is-equiv-globular-equiv
+
+ 1-cell-globular-equiv-globular-equiv :
+ {x y : 0-cell-Globular-Type A} →
+ globular-equiv
+ ( 1-cell-globular-type-Globular-Type A x y)
+ ( 1-cell-globular-type-Globular-Type B
+ ( 0-cell-map-globular-equiv x)
+ ( 0-cell-map-globular-equiv y))
+ 1-cell-globular-equiv-globular-equiv {x} {y} =
+ 1-cell-globular-map-globular-equiv x y ,
+ is-equiv-1-cell-globular-map-globular-equiv
module _
{l1 l2 l3 l4 : Level}
@@ -81,20 +124,19 @@ module _
{x y : 0-cell-Globular-Type A} →
1-cell-Globular-Type A x y ≃
1-cell-Globular-Type B
- ( 0-cell-globular-equiv e x)
- ( 0-cell-globular-equiv e y)
+ ( 0-cell-map-globular-equiv e x)
+ ( 0-cell-map-globular-equiv e y)
1-cell-equiv-globular-equiv =
- 0-cell-equiv-globular-equiv
- ( 1-cell-globular-equiv-globular-equiv e)
+ 0-cell-globular-equiv (1-cell-globular-equiv-globular-equiv e)
- 1-cell-globular-equiv :
+ 1-cell-map-globular-equiv :
{x y : 0-cell-Globular-Type A} →
1-cell-Globular-Type A x y →
1-cell-Globular-Type B
- ( 0-cell-globular-equiv e x)
- ( 0-cell-globular-equiv e y)
- 1-cell-globular-equiv =
- 0-cell-globular-equiv (1-cell-globular-equiv-globular-equiv e)
+ ( 0-cell-map-globular-equiv e x)
+ ( 0-cell-map-globular-equiv e y)
+ 1-cell-map-globular-equiv =
+ 0-cell-map-globular-equiv (1-cell-globular-equiv-globular-equiv e)
module _
{l1 l2 l3 l4 : Level}
@@ -107,8 +149,8 @@ module _
{f g : 1-cell-Globular-Type A x y} →
2-cell-Globular-Type A f g ≃
2-cell-Globular-Type B
- ( 1-cell-globular-equiv e f)
- ( 1-cell-globular-equiv e g)
+ ( 1-cell-map-globular-equiv e f)
+ ( 1-cell-map-globular-equiv e g)
2-cell-equiv-globular-equiv =
1-cell-equiv-globular-equiv
( 1-cell-globular-equiv-globular-equiv e)
@@ -118,10 +160,10 @@ module _
{f g : 1-cell-Globular-Type A x y} →
2-cell-Globular-Type A f g →
2-cell-Globular-Type B
- ( 1-cell-globular-equiv e f)
- ( 1-cell-globular-equiv e g)
+ ( 1-cell-map-globular-equiv e f)
+ ( 1-cell-map-globular-equiv e g)
2-cell-globular-equiv =
- 1-cell-globular-equiv (1-cell-globular-equiv-globular-equiv e)
+ 1-cell-map-globular-equiv (1-cell-globular-equiv-globular-equiv e)
module _
{l1 l2 l3 l4 : Level}
@@ -145,18 +187,40 @@ module _
### The identity equivalence on a globular type
```agda
+is-equiv-id-globular-map :
+ {l1 l2 : Level} (A : Globular-Type l1 l2) →
+ is-equiv-globular-map (id-globular-map A)
+is-equiv-0-cell-is-equiv-globular-map (is-equiv-id-globular-map A) = is-equiv-id
+1-cell-is-equiv-globular-map (is-equiv-id-globular-map A) =
+ is-equiv-id-globular-map (1-cell-globular-type-Globular-Type A _ _)
+
id-globular-equiv :
{l1 l2 : Level} (A : Globular-Type l1 l2) → globular-equiv A A
-id-globular-equiv A =
- λ where
- .0-cell-equiv-globular-equiv → id-equiv
- .1-cell-globular-equiv-globular-equiv {x} {y} →
- id-globular-equiv (1-cell-globular-type-Globular-Type A x y)
+id-globular-equiv A = id-globular-map A , is-equiv-id-globular-map A
```
### Composition of equivalences of globular types
```agda
+is-equiv-comp-globular-map :
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : Globular-Type l1 l2}
+ {B : Globular-Type l3 l4}
+ {C : Globular-Type l5 l6}
+ {g : globular-map B C}
+ {f : globular-map A B} →
+ is-equiv-globular-map g →
+ is-equiv-globular-map f →
+ is-equiv-globular-map (comp-globular-map g f)
+is-equiv-0-cell-is-equiv-globular-map (is-equiv-comp-globular-map G F) =
+ is-equiv-comp _ _
+ ( is-equiv-0-cell-is-equiv-globular-map F)
+ ( is-equiv-0-cell-is-equiv-globular-map G)
+1-cell-is-equiv-globular-map (is-equiv-comp-globular-map G F) =
+ is-equiv-comp-globular-map
+ ( 1-cell-is-equiv-globular-map G)
+ ( 1-cell-is-equiv-globular-map F)
+
comp-globular-equiv :
{l1 l2 l3 l4 l5 l6 : Level}
{A : Globular-Type l1 l2}
@@ -164,11 +228,10 @@ comp-globular-equiv :
{C : Globular-Type l5 l6} →
globular-equiv B C → globular-equiv A B → globular-equiv A C
comp-globular-equiv g f =
- λ where
- .0-cell-equiv-globular-equiv →
- 0-cell-equiv-globular-equiv g ∘e 0-cell-equiv-globular-equiv f
- .1-cell-globular-equiv-globular-equiv →
- comp-globular-equiv
- ( 1-cell-globular-equiv-globular-equiv g)
- ( 1-cell-globular-equiv-globular-equiv f)
+ comp-globular-map
+ ( globular-map-globular-equiv g)
+ ( globular-map-globular-equiv f) ,
+ is-equiv-comp-globular-map
+ ( is-equiv-globular-equiv g)
+ ( is-equiv-globular-equiv f)
```
diff --git a/src/globular-types/globular-maps.lagda.md b/src/globular-types/globular-maps.lagda.md
index 4cdc042698..7c56f702f1 100644
--- a/src/globular-types/globular-maps.lagda.md
+++ b/src/globular-types/globular-maps.lagda.md
@@ -157,3 +157,8 @@ comp-globular-map g f =
( 1-cell-globular-map-globular-map g)
( 1-cell-globular-map-globular-map f)
```
+
+## See also
+
+- The dependent counterpart to globular maps is
+ [sections of dependent globular types](type-theories.sections-dependent-globular-types.md)
diff --git a/src/globular-types/homotopies-globular-maps.lagda.md b/src/globular-types/homotopies-globular-maps.lagda.md
new file mode 100644
index 0000000000..be9d5d563c
--- /dev/null
+++ b/src/globular-types/homotopies-globular-maps.lagda.md
@@ -0,0 +1,181 @@
+# Homotopies of maps between globular types
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module globular-types.homotopies-globular-maps where
+```
+
+Imports
+
+```agda
+open import foundation.action-on-identifications-functions
+open import foundation.dependent-identifications
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.transport-along-pairs-of-identifications
+open import foundation.universe-levels
+open import foundation.whiskering-homotopies-composition
+
+open import globular-types.globular-equivalences
+open import globular-types.globular-maps
+open import globular-types.globular-types
+```
+
+
+
+## Idea
+
+A
+{{#concept "homotopy" Disambiguation="of globular maps of globular types" Agda=htpy-globular-map}}
+`f ~ g` is a homotopy `H₀ : f₀ ~ g₀` together with a family of equivalences
+
+```text
+ A₁ x y
+ / \
+ / \
+ / \
+ ∨ ∨
+ B₁ (f₀ x) (f₀ y) ---> B₁ (g₀ x) (g₀ y)
+ tr-htpy B H
+```
+
+## Definitions
+
+### Homotopies of maps between globular types
+
+```agda
+tr-pair-globular-map :
+ {l1 l2 l3 l4 : Level}
+ {A : UU l1} {B : UU l2}
+ (C : A → B → Globular-Type l3 l4) →
+ {x y : A} (p : x = y) {x' : B} {y' : B} (q : x' = y') →
+ globular-map (C x x') (C y y')
+tr-pair-globular-map C {x} refl {x'} refl = id-globular-map (C x x')
+
+module _
+ {l1 l2 l3 l4 : Level}
+ {A : UU l1} {B : UU l2}
+ (C : A → B → Globular-Type l3 l4)
+ where
+
+ compute-0-cell-tr-pair-globular-map :
+ {x y : A} (p : x = y) {x' : B} {y' : B} (q : x' = y') →
+ tr-pair' (λ u v → 0-cell-Globular-Type (C u v)) p q ~
+ 0-cell-globular-map (tr-pair-globular-map C p q)
+ compute-0-cell-tr-pair-globular-map refl refl = refl-htpy
+
+record
+ htpy-globular-map
+ {l1 l2 l3 l4 : Level} {A : Globular-Type l1 l2} {B : Globular-Type l3 l4}
+ (f g : globular-map A B) :
+ UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
+ where
+ coinductive
+ field
+ 0-cell-htpy-globular-map :
+ 0-cell-globular-map f ~ 0-cell-globular-map g
+
+ 1-cell-htpy-globular-map-htpy-globular-map :
+ {x y : 0-cell-Globular-Type A} →
+ htpy-globular-map
+ ( comp-globular-map
+ ( tr-pair-globular-map
+ ( 1-cell-globular-type-Globular-Type B)
+ ( 0-cell-htpy-globular-map x)
+ ( 0-cell-htpy-globular-map y))
+ ( 1-cell-globular-map-globular-map f {x} {y}))
+ ( 1-cell-globular-map-globular-map g {x} {y})
+
+open htpy-globular-map public
+
+module _
+ {l1 l2 l3 l4 : Level}
+ {A : Globular-Type l1 l2} {B : Globular-Type l3 l4}
+ (f g : globular-map A B)
+ where
+
+ 1-cell-htpy-globular-map :
+ (H : htpy-globular-map f g) →
+ {x y : 0-cell-Globular-Type A} →
+ tr-pair'
+ ( 1-cell-Globular-Type B)
+ ( 0-cell-htpy-globular-map H x)
+ ( 0-cell-htpy-globular-map H y) ∘
+ 1-cell-globular-map f {x} {y} ~
+ 1-cell-globular-map g {x} {y}
+ 1-cell-htpy-globular-map H {x} {y} =
+ ( ( compute-0-cell-tr-pair-globular-map
+ ( 1-cell-globular-type-Globular-Type B)
+ ( 0-cell-htpy-globular-map H x)
+ ( 0-cell-htpy-globular-map H y)) ·r
+ ( 0-cell-globular-map (1-cell-globular-map-globular-map f))) ∙h
+ ( 0-cell-htpy-globular-map (1-cell-htpy-globular-map-htpy-globular-map H))
+```
+
+### The concatenation of homotopies of globular maps
+
+```agda
+-- concat-htpy-globular-map :
+-- {l1 l2 l3 l4 : Level}
+-- {A : Globular-Type l1 l2} {B : Globular-Type l3 l4}
+-- {f g h : globular-map A B} →
+-- htpy-globular-map f g →
+-- htpy-globular-map g h →
+-- htpy-globular-map f h
+-- 0-cell-htpy-globular-map (concat-htpy-globular-map H K) =
+-- 0-cell-htpy-globular-map H ∙h
+-- 0-cell-htpy-globular-map K
+-- 1-cell-htpy-globular-map-htpy-globular-map (concat-htpy-globular-map H K) =
+-- concat-htpy-globular-map
+-- {! !}
+-- ( concat-htpy-globular-map
+-- {! 1-cell-htpy-globular-map-htpy-globular-map H !}
+-- ( 1-cell-htpy-globular-map-htpy-globular-map K))
+```
+
+### The right unit law of globular map composition
+
+```agda
+-- left-unit-law-htpy-globular-map :
+-- {l1 l2 l3 l4 : Level}
+-- {A : Globular-Type l1 l2} {B : Globular-Type l3 l4} (f : globular-map A B) →
+-- htpy-globular-map (comp-globular-map (id-globular-map B) f) f
+-- 0-cell-htpy-globular-map (left-unit-law-htpy-globular-map f) = refl-htpy
+-- 1-cell-htpy-globular-map-htpy-globular-map (left-unit-law-htpy-globular-map f) =
+-- concat-htpy-globular-map
+-- {! !}
+-- ( left-unit-law-htpy-globular-map (1-cell-globular-map-globular-map f))
+```
+
+### The reflexivity homotopy on a globular map
+
+```text
+refl-htpy-globular-map :
+ {l1 l2 l3 l4 : Level} {A : Globular-Type l1 l2} {B : Globular-Type l3 l4} →
+ (f : globular-map A B) → htpy-globular-map f f
+0-cell-htpy-globular-map (refl-htpy-globular-map f) = refl-htpy
+1-cell-htpy-globular-map-htpy-globular-map (refl-htpy-globular-map f) =
+ left-unit-law-htpy-globular-map (1-cell-globular-map-globular-map f)
+```
+
+### Composition of maps of globular types
+
+```text
+comp-globular-map :
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : Globular-Type l1 l2}
+ {B : Globular-Type l3 l4}
+ {C : Globular-Type l5 l6} →
+ globular-map B C → globular-map A B → globular-map A C
+comp-globular-map g f =
+ λ where
+ .0-cell-globular-map →
+ 0-cell-globular-map g ∘ 0-cell-globular-map f
+ .1-cell-globular-map-globular-map →
+ comp-globular-map
+ ( 1-cell-globular-map-globular-map g)
+ ( 1-cell-globular-map-globular-map f)
+```
diff --git a/src/globular-types/points-globular-types.lagda.md b/src/globular-types/points-globular-types.lagda.md
index 94e81c6f56..fa008006f2 100644
--- a/src/globular-types/points-globular-types.lagda.md
+++ b/src/globular-types/points-globular-types.lagda.md
@@ -53,7 +53,7 @@ open point-Globular-Type public
1-cell-point-Globular-Type :
{l1 l2 : Level} (G : Globular-Type l1 l2) (x : point-Globular-Type G) →
1-cell-Globular-Type G
- (0-cell-point-Globular-Type x)
+ ( 0-cell-point-Globular-Type x)
( 0-cell-point-Globular-Type x)
1-cell-point-Globular-Type G x =
0-cell-point-Globular-Type (1-cell-point-point-Globular-Type x)
diff --git a/src/globular-types/reflexive-globular-equivalences.lagda.md b/src/globular-types/reflexive-globular-equivalences.lagda.md
index 8d154f39af..27a6655106 100644
--- a/src/globular-types/reflexive-globular-equivalences.lagda.md
+++ b/src/globular-types/reflexive-globular-equivalences.lagda.md
@@ -72,12 +72,12 @@ record
0-cell-equiv-reflexive-globular-equiv :
0-cell-Reflexive-Globular-Type G ≃ 0-cell-Reflexive-Globular-Type H
0-cell-equiv-reflexive-globular-equiv =
- 0-cell-equiv-globular-equiv globular-equiv-reflexive-globular-equiv
+ 0-cell-globular-equiv globular-equiv-reflexive-globular-equiv
0-cell-reflexive-globular-equiv :
0-cell-Reflexive-Globular-Type G → 0-cell-Reflexive-Globular-Type H
0-cell-reflexive-globular-equiv =
- 0-cell-globular-equiv globular-equiv-reflexive-globular-equiv
+ 0-cell-map-globular-equiv globular-equiv-reflexive-globular-equiv
1-cell-equiv-reflexive-globular-equiv :
{x y : 0-cell-Reflexive-Globular-Type G} →
@@ -95,7 +95,7 @@ record
( 0-cell-reflexive-globular-equiv x)
( 0-cell-reflexive-globular-equiv y)
1-cell-reflexive-globular-equiv =
- 1-cell-globular-equiv globular-equiv-reflexive-globular-equiv
+ 1-cell-map-globular-equiv globular-equiv-reflexive-globular-equiv
1-cell-globular-equiv-reflexive-globular-equiv :
{x y : 0-cell-Reflexive-Globular-Type G} →
diff --git a/src/wild-category-theory.lagda.md b/src/wild-category-theory.lagda.md
index 63cf266e2d..501bb2b25e 100644
--- a/src/wild-category-theory.lagda.md
+++ b/src/wild-category-theory.lagda.md
@@ -15,10 +15,17 @@ module wild-category-theory where
open import wild-category-theory.colax-functors-noncoherent-large-wild-higher-precategories public
open import wild-category-theory.colax-functors-noncoherent-wild-higher-precategories public
+open import wild-category-theory.idempotent-points-noncoherent-omega-semiprecategories public
open import wild-category-theory.isomorphisms-in-noncoherent-large-wild-higher-precategories public
open import wild-category-theory.isomorphisms-in-noncoherent-wild-higher-precategories public
open import wild-category-theory.maps-noncoherent-large-wild-higher-precategories public
+open import wild-category-theory.maps-noncoherent-omega-semiprecategories public
open import wild-category-theory.maps-noncoherent-wild-higher-precategories public
+open import wild-category-theory.neutral-morphisms-noncoherent-omega-semiprecategories public
open import wild-category-theory.noncoherent-large-wild-higher-precategories public
+open import wild-category-theory.noncoherent-omega-semiprecategories public
open import wild-category-theory.noncoherent-wild-higher-precategories public
+open import wild-category-theory.postcomposition-morphisms-noncoherent-omega-semiprecategories public
+open import wild-category-theory.precomposition-morphisms-noncoherent-omega-semiprecategories public
+open import wild-category-theory.universal-property-isomorphisms-noncoherent-omega-semiprecategories public
```
diff --git a/src/wild-category-theory/idempotent-points-noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/idempotent-points-noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..9fdf07a543
--- /dev/null
+++ b/src/wild-category-theory/idempotent-points-noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,71 @@
+# Idempotent points in noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module wild-category-theory.idempotent-points-noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+open import foundation.universe-levels
+
+open import globular-types.binary-globular-maps
+open import globular-types.composition-structure-globular-types
+open import globular-types.globular-equivalences
+open import globular-types.globular-types
+open import globular-types.points-globular-types
+
+open import wild-category-theory.maps-noncoherent-omega-semiprecategories
+open import wild-category-theory.noncoherent-omega-semiprecategories
+open import wild-category-theory.postcomposition-morphisms-noncoherent-omega-semiprecategories
+open import wild-category-theory.precomposition-morphisms-noncoherent-omega-semiprecategories
+```
+
+
+
+## Idea
+
+We say a [point](globular-types.points-globular-types.md) `x` in a
+[noncoherent ω-semiprecategory](wild-category-theory.noncoherent-omega-semiprecategories.md)
+`𝒞` is
+{{#concept "idempotent" Disambiguation="point in a noncoherent ω-semiprecategory" Agda=is-idempotent-obj-Noncoherent-ω-Semiprecategory}}
+if the equipped endomorphism `f : 𝒞₁ x x` satisfies the law `f ∘ f = f`, and is
+again idempotent as a point of the hom-ω-semiprecategory.
+
+## Definitions
+
+### Idempotent points
+
+```agda
+record
+ is-idempotent-point-Noncoherent-ω-Semiprecategory
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ (x : point-Globular-Type (globular-type-Noncoherent-ω-Semiprecategory 𝒞)) :
+ UU l2
+ where
+ coinductive
+ field
+ is-idempotent-endo-Noncoherent-ω-Semiprecategory :
+ comp-hom-Noncoherent-ω-Semiprecategory 𝒞
+ ( 1-cell-point-Globular-Type
+ ( globular-type-Noncoherent-ω-Semiprecategory 𝒞)
+ ( x))
+ ( 1-cell-point-Globular-Type
+ ( globular-type-Noncoherent-ω-Semiprecategory 𝒞)
+ ( x)) =
+ 1-cell-point-Globular-Type
+ ( globular-type-Noncoherent-ω-Semiprecategory 𝒞)
+ ( x)
+
+ is-idempotent-hom-point-point-Noncoherent-ω-Semiprecategory :
+ is-idempotent-point-Noncoherent-ω-Semiprecategory
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory 𝒞
+ ( 0-cell-point-Globular-Type x)
+ ( 0-cell-point-Globular-Type x))
+ ( 1-cell-point-point-Globular-Type x)
+```
diff --git a/src/wild-category-theory/maps-noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/maps-noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..ef7695f9f3
--- /dev/null
+++ b/src/wild-category-theory/maps-noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,151 @@
+# Maps between noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module wild-category-theory.maps-noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.universe-levels
+
+open import globular-types.globular-maps
+open import globular-types.globular-types
+
+open import wild-category-theory.noncoherent-omega-semiprecategories
+```
+
+
+
+## Idea
+
+A
+{{#concept "map" Disambiguation="between noncoherent ω-semiprecategories" Agda=map-Noncoherent-ω-Semiprecategory}}
+`f` between
+[noncoherent ω-semiprecategories](wild-category-theory.noncoherent-omega-semiprecategories.md)
+`𝒜` and `ℬ` is a [globular map](globular-types.globular-maps.md) between their
+underlying [globular types](globular-types.globular-types.md). More
+specifically, a map `F` between noncoherent ω-semiprecategories consists of a
+map on objects `F₀ : obj 𝒜 → obj ℬ`, and for every pair of $n$-morphisms `f` and
+`g`, a map of $(n+1)$-morphisms
+
+```text
+ Fₙ₊₁ : (𝑛+1)-hom 𝒞 f g → (𝑛+1)-hom 𝒟 (Fₙ f) (Fₙ g).
+```
+
+A map between noncoherent ω-semiprecategories does not have to preserve the
+identities or composition in any shape or form, and is the least structured
+notion of a "morphism" between noncoherent ω-semiprecategories. For a notion of
+"morphism" between noncoherent ω-semiprecategories that in one sense preserves
+this additional structure, see
+[colax functors between noncoherent ω-semiprecategories](wild-category-theory.colax-functors-noncoherent-omega-semiprecategories.md).
+
+## Definitions
+
+### Maps between noncoherent ω-semiprecategories
+
+```agda
+map-Noncoherent-ω-Semiprecategory :
+ {l1 l2 l3 l4 : Level}
+ (𝒜 : Noncoherent-ω-Semiprecategory l1 l2)
+ (ℬ : Noncoherent-ω-Semiprecategory l3 l4) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
+map-Noncoherent-ω-Semiprecategory 𝒜 ℬ =
+ globular-map
+ ( globular-type-Noncoherent-ω-Semiprecategory 𝒜)
+ ( globular-type-Noncoherent-ω-Semiprecategory ℬ)
+
+module _
+ {l1 l2 l3 l4 : Level}
+ (𝒜 : Noncoherent-ω-Semiprecategory l1 l2)
+ (ℬ : Noncoherent-ω-Semiprecategory l3 l4)
+ (F : map-Noncoherent-ω-Semiprecategory 𝒜 ℬ)
+ where
+
+ obj-map-Noncoherent-ω-Semiprecategory :
+ obj-Noncoherent-ω-Semiprecategory 𝒜 →
+ obj-Noncoherent-ω-Semiprecategory ℬ
+ obj-map-Noncoherent-ω-Semiprecategory =
+ 0-cell-globular-map F
+
+ hom-globular-map-map-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory 𝒜} →
+ globular-map
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory 𝒜 x y)
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory ℬ
+ ( obj-map-Noncoherent-ω-Semiprecategory x)
+ ( obj-map-Noncoherent-ω-Semiprecategory y))
+ hom-globular-map-map-Noncoherent-ω-Semiprecategory =
+ 1-cell-globular-map-globular-map F
+
+ hom-map-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory 𝒜} →
+ hom-Noncoherent-ω-Semiprecategory 𝒜 x y →
+ hom-Noncoherent-ω-Semiprecategory ℬ
+ ( obj-map-Noncoherent-ω-Semiprecategory x)
+ ( obj-map-Noncoherent-ω-Semiprecategory y)
+ hom-map-Noncoherent-ω-Semiprecategory =
+ 0-cell-globular-map
+ ( hom-globular-map-map-Noncoherent-ω-Semiprecategory)
+
+ 2-hom-map-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory 𝒜}
+ {f g : hom-Noncoherent-ω-Semiprecategory 𝒜 x y} →
+ 2-hom-Noncoherent-ω-Semiprecategory 𝒜 f g →
+ 2-hom-Noncoherent-ω-Semiprecategory ℬ
+ ( hom-map-Noncoherent-ω-Semiprecategory f)
+ ( hom-map-Noncoherent-ω-Semiprecategory g)
+ 2-hom-map-Noncoherent-ω-Semiprecategory =
+ 1-cell-globular-map
+ ( hom-globular-map-map-Noncoherent-ω-Semiprecategory)
+
+ hom-noncoherent-ω-semiprecategory-map-Noncoherent-ω-Semiprecategory :
+ (x y : obj-Noncoherent-ω-Semiprecategory 𝒜) →
+ map-Noncoherent-ω-Semiprecategory
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory
+ ( 𝒜)
+ ( x)
+ ( y))
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory
+ ( ℬ)
+ ( obj-map-Noncoherent-ω-Semiprecategory x)
+ ( obj-map-Noncoherent-ω-Semiprecategory y))
+ hom-noncoherent-ω-semiprecategory-map-Noncoherent-ω-Semiprecategory
+ x y =
+ 1-cell-globular-map-globular-map F
+```
+
+### The identity map on a noncoherent ω-semiprecategory
+
+```agda
+module _
+ {l1 l2 : Level} (𝒜 : Noncoherent-ω-Semiprecategory l1 l2)
+ where
+
+ id-map-Noncoherent-ω-Semiprecategory :
+ map-Noncoherent-ω-Semiprecategory 𝒜 𝒜
+ id-map-Noncoherent-ω-Semiprecategory =
+ id-globular-map _
+```
+
+### Composition of maps between noncoherent ω-semiprecategories
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ (𝒜 : Noncoherent-ω-Semiprecategory l1 l2)
+ (ℬ : Noncoherent-ω-Semiprecategory l3 l4)
+ (𝒞 : Noncoherent-ω-Semiprecategory l5 l6)
+ (G : map-Noncoherent-ω-Semiprecategory ℬ 𝒞)
+ (F : map-Noncoherent-ω-Semiprecategory 𝒜 ℬ)
+ where
+
+ comp-map-Noncoherent-ω-Semiprecategory :
+ map-Noncoherent-ω-Semiprecategory 𝒜 𝒞
+ comp-map-Noncoherent-ω-Semiprecategory =
+ comp-globular-map G F
+```
diff --git a/src/wild-category-theory/neutral-morphisms-noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/neutral-morphisms-noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..f8179a2c72
--- /dev/null
+++ b/src/wild-category-theory/neutral-morphisms-noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,92 @@
+# Neutral points in noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness --allow-unsolved-metas #-}
+
+module wild-category-theory.neutral-morphisms-noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+open import foundation.universe-levels
+
+open import globular-types.binary-globular-maps
+open import globular-types.composition-structure-globular-types
+open import globular-types.globular-equivalences
+open import globular-types.globular-maps
+open import globular-types.globular-types
+open import globular-types.homotopies-globular-maps
+open import globular-types.points-globular-types
+
+open import wild-category-theory.maps-noncoherent-omega-semiprecategories
+open import wild-category-theory.noncoherent-omega-semiprecategories
+open import wild-category-theory.postcomposition-morphisms-noncoherent-omega-semiprecategories
+open import wild-category-theory.precomposition-morphisms-noncoherent-omega-semiprecategories
+```
+
+
+
+## Idea
+
+We say a point `x` in a
+[noncoherent ω-semiprecategory](wild-category-theory.noncoherent-omega-semiprecategories.md)
+`𝒞` is
+{{#concept "neutral" Disambiguation="point in a noncoherent ω-semiprecategory" Agda=is-neutral-point-Noncoherent-ω-Semiprecategory}}
+if the precomposition and postcomposition globular maps at the distinguished
+endomorphism `f : 𝒞₁ x x` are homotopic to identity maps.
+
+## Definitions
+
+### Right neutral points
+
+```agda
+is-right-neutral-point-Noncoherent-ω-Semiprecategory :
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ (x : point-Globular-Type (globular-type-Noncoherent-ω-Semiprecategory 𝒞)) →
+ UU (l1 ⊔ l2)
+is-right-neutral-point-Noncoherent-ω-Semiprecategory 𝒞 x =
+ (z : obj-Noncoherent-ω-Semiprecategory 𝒞) →
+ htpy-globular-map
+ ( precomp-globular-map-hom-Noncoherent-ω-Semiprecategory 𝒞
+ ( 1-cell-point-point-Globular-Type x)
+ ( z))
+ ( id-globular-map
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory 𝒞
+ ( 0-cell-point-Globular-Type x)
+ ( z)))
+```
+
+### Left neutral points
+
+```agda
+is-left-neutral-point-Noncoherent-ω-Semiprecategory :
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ (x : point-Globular-Type (globular-type-Noncoherent-ω-Semiprecategory 𝒞)) →
+ UU (l1 ⊔ l2)
+is-left-neutral-point-Noncoherent-ω-Semiprecategory 𝒞 x =
+ (z : obj-Noncoherent-ω-Semiprecategory 𝒞) →
+ htpy-globular-map
+ ( postcomp-globular-map-hom-Noncoherent-ω-Semiprecategory 𝒞
+ ( 1-cell-point-point-Globular-Type x)
+ ( z))
+ ( id-globular-map
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory 𝒞
+ ( z)
+ ( 0-cell-point-Globular-Type x)))
+```
+
+### Right neutral points
+
+```agda
+is-neutral-point-Noncoherent-ω-Semiprecategory :
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ (x : point-Globular-Type (globular-type-Noncoherent-ω-Semiprecategory 𝒞)) →
+ UU (l1 ⊔ l2)
+is-neutral-point-Noncoherent-ω-Semiprecategory 𝒞 x =
+ ( is-right-neutral-point-Noncoherent-ω-Semiprecategory 𝒞 x) ×
+ ( is-left-neutral-point-Noncoherent-ω-Semiprecategory 𝒞 x)
+```
diff --git a/src/wild-category-theory/noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..0d9dc41490
--- /dev/null
+++ b/src/wild-category-theory/noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,238 @@
+# Noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module wild-category-theory.noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.universe-levels
+
+open import globular-types.binary-globular-maps
+open import globular-types.composition-structure-globular-types
+open import globular-types.globular-types
+```
+
+
+
+## Idea
+
+A
+{{#concept "noncoherent ω-semiprecategory" Agda=Noncoherent-ω-Semiprecategory}}
+`𝒞` is a [globular type](globular-types.globular-types.md) `G`
+[equipped](foundation.structure.md) with a
+[composition structure](globular-types.composition-structure-globular-types.md).
+It comes equipped with a type of objects `𝒞₀` such that for every pair of
+objects `x y : 𝒞₀` there is a type of _morphisms_ `𝒞₁ x y`, in fact, a
+noncoherent ω-semiprecategory of morphisms. For every pair of morphisms
+`g : 𝒞₁ y z` and `f : 𝒞₁ x y` there is a morphism `g ∘ f : 𝒞₁ x z`, and a
+noncoherent ω-semiprecategory also comes equipped with horizontal composition
+operations on its higher morphisms.
+
+## Definitions
+
+### Noncoherent ω-semiprecategories
+
+```agda
+Noncoherent-ω-Semiprecategory : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+Noncoherent-ω-Semiprecategory l1 l2 =
+ Σ (Globular-Type l1 l2) (composition-Globular-Type)
+```
+
+```agda
+module _
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ where
+
+ globular-type-Noncoherent-ω-Semiprecategory : Globular-Type l1 l2
+ globular-type-Noncoherent-ω-Semiprecategory = pr1 𝒞
+
+ obj-Noncoherent-ω-Semiprecategory : UU l1
+ obj-Noncoherent-ω-Semiprecategory =
+ 0-cell-Globular-Type globular-type-Noncoherent-ω-Semiprecategory
+```
+
+Morphisms in a noncoherent ω-semiprecategory:
+
+```agda
+ hom-globular-type-Noncoherent-ω-Semiprecategory :
+ (x y : obj-Noncoherent-ω-Semiprecategory) → Globular-Type l2 l2
+ hom-globular-type-Noncoherent-ω-Semiprecategory =
+ 1-cell-globular-type-Globular-Type
+ globular-type-Noncoherent-ω-Semiprecategory
+
+ hom-Noncoherent-ω-Semiprecategory :
+ (x y : obj-Noncoherent-ω-Semiprecategory) → UU l2
+ hom-Noncoherent-ω-Semiprecategory =
+ 1-cell-Globular-Type globular-type-Noncoherent-ω-Semiprecategory
+```
+
+Composition in a noncoherent ω-semiprecategory:
+
+```agda
+ composition-Noncoherent-ω-Semiprecategory :
+ composition-Globular-Type globular-type-Noncoherent-ω-Semiprecategory
+ composition-Noncoherent-ω-Semiprecategory = pr2 𝒞
+
+ comp-binary-globular-map-hom-Noncoherent-ω-Semiprecategory :
+ {x y z : obj-Noncoherent-ω-Semiprecategory} →
+ binary-globular-map
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory y z)
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory x y)
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory x z)
+ comp-binary-globular-map-hom-Noncoherent-ω-Semiprecategory =
+ comp-binary-globular-map-composition-Globular-Type
+ composition-Noncoherent-ω-Semiprecategory
+
+ comp-hom-Noncoherent-ω-Semiprecategory :
+ {x y z : obj-Noncoherent-ω-Semiprecategory} →
+ hom-Noncoherent-ω-Semiprecategory y z →
+ hom-Noncoherent-ω-Semiprecategory x y →
+ hom-Noncoherent-ω-Semiprecategory x z
+ comp-hom-Noncoherent-ω-Semiprecategory =
+ comp-1-cell-composition-Globular-Type
+ composition-Noncoherent-ω-Semiprecategory
+
+ composition-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory} →
+ composition-Globular-Type
+ ( hom-globular-type-Noncoherent-ω-Semiprecategory x y)
+ composition-hom-Noncoherent-ω-Semiprecategory =
+ composition-1-cell-globular-type-Globular-Type
+ composition-Noncoherent-ω-Semiprecategory
+```
+
+The noncoherent ω-semiprecategory of morphisms between two objects in a
+noncoherent ω-semiprecategory:
+
+```agda
+ hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory :
+ (x y : obj-Noncoherent-ω-Semiprecategory) →
+ Noncoherent-ω-Semiprecategory l2 l2
+ hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory x y =
+ hom-globular-type-Noncoherent-ω-Semiprecategory x y ,
+ composition-hom-Noncoherent-ω-Semiprecategory
+```
+
+2-Morphisms in a noncoherent ω-semiprecategory:
+
+```agda
+ 2-hom-globular-type-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ (f g : hom-Noncoherent-ω-Semiprecategory x y) → Globular-Type l2 l2
+ 2-hom-globular-type-Noncoherent-ω-Semiprecategory =
+ 2-cell-globular-type-Globular-Type
+ globular-type-Noncoherent-ω-Semiprecategory
+
+ 2-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ (f g : hom-Noncoherent-ω-Semiprecategory x y) → UU l2
+ 2-hom-Noncoherent-ω-Semiprecategory =
+ 2-cell-Globular-Type globular-type-Noncoherent-ω-Semiprecategory
+
+ comp-2-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g h : hom-Noncoherent-ω-Semiprecategory x y} →
+ 2-hom-Noncoherent-ω-Semiprecategory g h →
+ 2-hom-Noncoherent-ω-Semiprecategory f g →
+ 2-hom-Noncoherent-ω-Semiprecategory f h
+ comp-2-hom-Noncoherent-ω-Semiprecategory =
+ comp-2-cell-composition-Globular-Type
+ composition-Noncoherent-ω-Semiprecategory
+
+ composition-2-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g : hom-Noncoherent-ω-Semiprecategory x y} →
+ composition-Globular-Type
+ ( 2-hom-globular-type-Noncoherent-ω-Semiprecategory f g)
+ composition-2-hom-Noncoherent-ω-Semiprecategory =
+ composition-1-cell-globular-type-Globular-Type
+ composition-hom-Noncoherent-ω-Semiprecategory
+
+ 2-hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ (f g : hom-Noncoherent-ω-Semiprecategory x y) →
+ Noncoherent-ω-Semiprecategory l2 l2
+ 2-hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory f g =
+ 2-hom-globular-type-Noncoherent-ω-Semiprecategory f g ,
+ composition-2-hom-Noncoherent-ω-Semiprecategory
+
+ horizontal-comp-2-hom-Noncoherent-ω-Semiprecategory :
+ {x y z : obj-Noncoherent-ω-Semiprecategory} →
+ {g g' : hom-Noncoherent-ω-Semiprecategory y z}
+ {f f' : hom-Noncoherent-ω-Semiprecategory x y} →
+ 2-hom-Noncoherent-ω-Semiprecategory g g' →
+ 2-hom-Noncoherent-ω-Semiprecategory f f' →
+ 2-hom-Noncoherent-ω-Semiprecategory
+ ( comp-hom-Noncoherent-ω-Semiprecategory g f)
+ ( comp-hom-Noncoherent-ω-Semiprecategory g' f')
+ horizontal-comp-2-hom-Noncoherent-ω-Semiprecategory =
+ horizontal-comp-2-cell-composition-Globular-Type
+ composition-Noncoherent-ω-Semiprecategory
+```
+
+Higher morphisms in a noncoherent ω-semiprecategory:
+
+```agda
+ 3-hom-globular-type-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g : hom-Noncoherent-ω-Semiprecategory x y}
+ (α β : 2-hom-Noncoherent-ω-Semiprecategory f g) → Globular-Type l2 l2
+ 3-hom-globular-type-Noncoherent-ω-Semiprecategory =
+ 3-cell-globular-type-Globular-Type
+ globular-type-Noncoherent-ω-Semiprecategory
+
+ 3-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g : hom-Noncoherent-ω-Semiprecategory x y}
+ (α β : 2-hom-Noncoherent-ω-Semiprecategory f g) → UU l2
+ 3-hom-Noncoherent-ω-Semiprecategory =
+ 3-cell-Globular-Type globular-type-Noncoherent-ω-Semiprecategory
+
+ comp-3-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g : hom-Noncoherent-ω-Semiprecategory x y}
+ {α β γ : 2-hom-Noncoherent-ω-Semiprecategory f g} →
+ 3-hom-Noncoherent-ω-Semiprecategory β γ →
+ 3-hom-Noncoherent-ω-Semiprecategory α β →
+ 3-hom-Noncoherent-ω-Semiprecategory α γ
+ comp-3-hom-Noncoherent-ω-Semiprecategory =
+ comp-3-cell-composition-Globular-Type
+ composition-Noncoherent-ω-Semiprecategory
+
+ horizontal-comp-3-hom-Noncoherent-ω-Semiprecategory :
+ {x y z : obj-Noncoherent-ω-Semiprecategory}
+ {g g' : hom-Noncoherent-ω-Semiprecategory y z}
+ {f f' : hom-Noncoherent-ω-Semiprecategory x y}
+ {α α' : 2-hom-Noncoherent-ω-Semiprecategory g g'}
+ {β β' : 2-hom-Noncoherent-ω-Semiprecategory f f'} →
+ 3-hom-Noncoherent-ω-Semiprecategory α α' →
+ 3-hom-Noncoherent-ω-Semiprecategory β β' →
+ 3-hom-Noncoherent-ω-Semiprecategory
+ ( horizontal-comp-2-hom-Noncoherent-ω-Semiprecategory α β)
+ ( horizontal-comp-2-hom-Noncoherent-ω-Semiprecategory α' β')
+ horizontal-comp-3-hom-Noncoherent-ω-Semiprecategory =
+ horizontal-comp-3-cell-composition-Globular-Type'
+ composition-Noncoherent-ω-Semiprecategory
+
+ 4-hom-globular-type-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g : hom-Noncoherent-ω-Semiprecategory x y}
+ {α β : 2-hom-Noncoherent-ω-Semiprecategory f g}
+ (H K : 3-hom-Noncoherent-ω-Semiprecategory α β) → Globular-Type l2 l2
+ 4-hom-globular-type-Noncoherent-ω-Semiprecategory =
+ 4-cell-globular-type-Globular-Type
+ globular-type-Noncoherent-ω-Semiprecategory
+
+ 4-hom-Noncoherent-ω-Semiprecategory :
+ {x y : obj-Noncoherent-ω-Semiprecategory}
+ {f g : hom-Noncoherent-ω-Semiprecategory x y}
+ {α β : 2-hom-Noncoherent-ω-Semiprecategory f g}
+ (H K : 3-hom-Noncoherent-ω-Semiprecategory α β) → UU l2
+ 4-hom-Noncoherent-ω-Semiprecategory =
+ 4-cell-Globular-Type globular-type-Noncoherent-ω-Semiprecategory
+```
diff --git a/src/wild-category-theory/postcomposition-morphisms-noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/postcomposition-morphisms-noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..9a23b5cb6d
--- /dev/null
+++ b/src/wild-category-theory/postcomposition-morphisms-noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,62 @@
+# Postcomposition of morphisms in noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module wild-category-theory.postcomposition-morphisms-noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.universe-levels
+
+open import globular-types.binary-globular-maps
+open import globular-types.composition-structure-globular-types
+open import globular-types.globular-types
+open import globular-types.points-globular-types
+
+open import wild-category-theory.maps-noncoherent-omega-semiprecategories
+open import wild-category-theory.noncoherent-omega-semiprecategories
+```
+
+
+
+## Idea
+
+Given a morphism `f : 𝒞₁ x y` in a
+[noncoherent ω-semiprecategory](wild-category-theory.noncoherent-omega-semiprecategories.md)
+with the structure of a [point](globular-types.points-globular-types.md), then
+we have a
+{{#concept "postcomposition map" Disambiguation="noncoherent ω-semiprecategory"}}
+on hom-ω-semicategories
+
+```text
+ - ∘ f : 𝒞₁ z x → 𝒞₁ z y
+```
+
+for every object `z`.
+
+## Definitions
+
+### The precomposition globular map
+
+```agda
+module _
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ {x y : obj-Noncoherent-ω-Semiprecategory 𝒞}
+ (f :
+ point-Globular-Type (hom-globular-type-Noncoherent-ω-Semiprecategory 𝒞 x y))
+ where
+
+ postcomp-globular-map-hom-Noncoherent-ω-Semiprecategory :
+ (z : obj-Noncoherent-ω-Semiprecategory 𝒞) →
+ map-Noncoherent-ω-Semiprecategory
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory 𝒞 z x)
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory 𝒞 z y)
+ postcomp-globular-map-hom-Noncoherent-ω-Semiprecategory z =
+ ev-left-binary-globular-map
+ ( comp-binary-globular-map-hom-Noncoherent-ω-Semiprecategory 𝒞)
+ ( f)
+```
diff --git a/src/wild-category-theory/precomposition-morphisms-noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/precomposition-morphisms-noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..9e496d135e
--- /dev/null
+++ b/src/wild-category-theory/precomposition-morphisms-noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,62 @@
+# Precomposition of morphisms in noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module wild-category-theory.precomposition-morphisms-noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.universe-levels
+
+open import globular-types.binary-globular-maps
+open import globular-types.composition-structure-globular-types
+open import globular-types.globular-types
+open import globular-types.points-globular-types
+
+open import wild-category-theory.maps-noncoherent-omega-semiprecategories
+open import wild-category-theory.noncoherent-omega-semiprecategories
+```
+
+
+
+## Idea
+
+Given a morphism `f : 𝒞₁ x y` in a
+[noncoherent ω-semiprecategory](wild-category-theory.noncoherent-omega-semiprecategories.md)
+with the structure of a [point](globular-types.points-globular-types.md), then
+we have a
+{{#concept "precomposition map" Disambiguation="noncoherent ω-semiprecategory"}}
+on hom-ω-semicategories
+
+```text
+ - ∘ f : 𝒞₁ y z → 𝒞₁ x z
+```
+
+for every object `z`.
+
+## Definitions
+
+### The precomposition globular map
+
+```agda
+module _
+ {l1 l2 : Level} (𝒞 : Noncoherent-ω-Semiprecategory l1 l2)
+ {x y : obj-Noncoherent-ω-Semiprecategory 𝒞}
+ (f :
+ point-Globular-Type (hom-globular-type-Noncoherent-ω-Semiprecategory 𝒞 x y))
+ where
+
+ precomp-globular-map-hom-Noncoherent-ω-Semiprecategory :
+ (z : obj-Noncoherent-ω-Semiprecategory 𝒞) →
+ map-Noncoherent-ω-Semiprecategory
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory 𝒞 y z)
+ ( hom-noncoherent-ω-semiprecategory-Noncoherent-ω-Semiprecategory 𝒞 x z)
+ precomp-globular-map-hom-Noncoherent-ω-Semiprecategory z =
+ ev-right-binary-globular-map
+ ( comp-binary-globular-map-hom-Noncoherent-ω-Semiprecategory 𝒞)
+ ( f)
+```
diff --git a/src/wild-category-theory/universal-property-isomorphisms-noncoherent-omega-semiprecategories.lagda.md b/src/wild-category-theory/universal-property-isomorphisms-noncoherent-omega-semiprecategories.lagda.md
new file mode 100644
index 0000000000..ae5d7bb7b7
--- /dev/null
+++ b/src/wild-category-theory/universal-property-isomorphisms-noncoherent-omega-semiprecategories.lagda.md
@@ -0,0 +1,64 @@
+# The universal property of isomorphisms in noncoherent ω-semiprecategories
+
+```agda
+{-# OPTIONS --guardedness #-}
+
+module wild-category-theory.universal-property-isomorphisms-noncoherent-omega-semiprecategories where
+```
+
+Imports
+
+```agda
+open import foundation.cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.universe-levels
+
+open import globular-types.binary-globular-maps
+open import globular-types.composition-structure-globular-types
+open import globular-types.globular-equivalences
+open import globular-types.globular-types
+open import globular-types.points-globular-types
+
+open import wild-category-theory.maps-noncoherent-omega-semiprecategories
+open import wild-category-theory.noncoherent-omega-semiprecategories
+open import wild-category-theory.postcomposition-morphisms-noncoherent-omega-semiprecategories
+open import wild-category-theory.precomposition-morphisms-noncoherent-omega-semiprecategories
+```
+
+
+
+## Idea
+
+Given a morphism `f : 𝒞₁ x y` in a
+[noncoherent ω-semiprecategory](wild-category-theory.noncoherent-omega-semiprecategories.md)
+with the structure of a [point](globular-types.points-globular-types.md), then
+`f` satisfies the
+{{#concept "universal property of isomorphisms" Disambiguation="in a noncoherent ω-semiprecategory"}}
+if
+[precomposition](wild-category-theory.precomposition-morphisms-noncoherent-omega-semiprecategories.md)
+and
+[postcomposition](wild-category-theory.postcomposition-morphisms-noncoherent-omega-semiprecategories.md)
+by `f` is a [globular equivalence](globular-types.globular-equivalences.md) for
+every object `z`.
+
+## Definitions
+
+### The universal property of isomorphisms
+
+```agda
+module _
+ {l1 l2 : Level} {𝒞 : Noncoherent-ω-Semiprecategory l1 l2}
+ {x y : obj-Noncoherent-ω-Semiprecategory 𝒞}
+ (f :
+ point-Globular-Type (hom-globular-type-Noncoherent-ω-Semiprecategory 𝒞 x y))
+ where
+
+ universal-property-iso-Noncoherent-ω-Semiprecategory : UU (l1 ⊔ l2)
+ universal-property-iso-Noncoherent-ω-Semiprecategory =
+ ( (z : obj-Noncoherent-ω-Semiprecategory 𝒞) →
+ is-equiv-globular-map
+ ( precomp-globular-map-hom-Noncoherent-ω-Semiprecategory 𝒞 f z)) ×
+ ( (z : obj-Noncoherent-ω-Semiprecategory 𝒞) →
+ is-equiv-globular-map
+ ( postcomp-globular-map-hom-Noncoherent-ω-Semiprecategory 𝒞 f z))
+```