Copartial elements
Content created by Egbert Rijke and Fredrik Bakke.
Created on 2023-12-07.
Last modified on 2024-04-25.
module foundation.copartial-elements where
Imports
open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.negation open import foundation.partial-elements open import foundation.universe-levels open import foundation-core.propositions open import orthogonal-factorization-systems.closed-modalities open import synthetic-homotopy-theory.joins-of-types
Idea
A copartial element¶ of a type A
is an
element of type
Σ (Q : Prop), A * Q
where the type A * Q
is the
join of Q
and A
. We say that
evaluation of a copartial element (Q , u)
is
denied¶
if the proposition Q
holds.
In order to compare copartial elements with partial elements, note that we have the following pullback squares
A -----> Σ (Q : Prop), A * Q 1 -----> Σ (P : Prop), (P → A)
| ⌟ | | ⌟ |
| | | |
∨ ∨ ∨ ∨
1 -----------> Prop 1 -----------> Prop
F F
1 -----> Σ (Q : Prop), A * Q A -----> Σ (P : Prop), (P → A)
| ⌟ | | ⌟ |
| | | |
∨ ∨ ∨ ∨
1 -----------> Prop 1 -----------> Prop
T T
Note that we make use of the
closed modalities
A ↦ A * Q
in the formulation of copartial element, whereas the formulation of
partial elements makes use of the
open modalities. The
concepts of partial and copartial elements are dual in that sense.
Alternatively, the type of copartial elements of a type A
can be defined as
the pushout-product
A 1
| |
! | □ | T
∨ ∨
1 Prop
This point of view is useful in order to establish that copartial elements of
copartial elements induce copartial elements. Indeed, note that
(A □ T) □ T = A □ (T □ T)
by associativity of the pushout product, and that
T
is a pushout-product algebra in the sense that
P Q x ↦ (P * Q , x)
1 1 Σ (P Q : Prop), P * Q ---------------------> 1
| | | |
T | □ | T = T □ T | |
∨ ∨ ∨ ∨
Prop Prop Prop² ------------------------------> Prop
P Q ↦ P * Q
By this morphism of arrows it follows that there is a morphism of arrows
join-copartial-element : (A □ T) □ T → A □ T,
i.e., that copartial copartial elements induce copartial elements. These considerations allow us to compose copartial functions.
Note: The topic of copartial functions was not known to us in the literature, and our formalization on this topic should be considered experimental.
Definition
Copartial elements
copartial-element : {l1 : Level} (l2 : Level) → UU l1 → UU (l1 ⊔ lsuc l2) copartial-element l2 A = Σ (Prop l2) (λ Q → operator-closed-modality Q A) module _ {l1 l2 : Level} {A : UU l1} (a : copartial-element l2 A) where is-denied-prop-copartial-element : Prop l2 is-denied-prop-copartial-element = pr1 a is-denied-copartial-element : UU l2 is-denied-copartial-element = type-Prop is-denied-prop-copartial-element value-copartial-element : operator-closed-modality is-denied-prop-copartial-element A value-copartial-element = pr2 a
The unit of the copartial element operator
module _ {l1 : Level} {A : UU l1} (a : A) where is-denied-prop-unit-copartial-element : Prop lzero is-denied-prop-unit-copartial-element = empty-Prop is-denied-unit-copartial-element : UU lzero is-denied-unit-copartial-element = empty unit-copartial-element : copartial-element lzero A pr1 unit-copartial-element = is-denied-prop-unit-copartial-element pr2 unit-copartial-element = unit-closed-modality empty-Prop a
Properties
Forgetful map from copartial elements to partial elements
module _ {l1 l2 : Level} {A : UU l1} (a : copartial-element l2 A) where is-defined-prop-partial-element-copartial-element : Prop l2 is-defined-prop-partial-element-copartial-element = neg-Prop (is-denied-prop-copartial-element a) is-defined-partial-element-copartial-element : UU l2 is-defined-partial-element-copartial-element = type-Prop is-defined-prop-partial-element-copartial-element value-partial-element-copartial-element : is-defined-partial-element-copartial-element → A value-partial-element-copartial-element f = map-inv-right-unit-law-join-is-empty f (value-copartial-element a) partial-element-copartial-element : partial-element l2 A pr1 partial-element-copartial-element = is-defined-prop-partial-element-copartial-element pr2 partial-element-copartial-element = value-partial-element-copartial-element
Recent changes
- 2024-04-25. Fredrik Bakke. chore: Fix arrowheads in character diagrams (#1124).
- 2024-03-02. Fredrik Bakke. Factor out standard pullbacks (#1042).
- 2024-01-02. Egbert Rijke. small addendum to copartial elements, and proposal of erased -> denied (#977).
- 2023-12-07. Egbert Rijke. Partial and copartial functions (#975).