Exclusive sums
Content created by Egbert Rijke and Fredrik Bakke.
Created on 2024-04-11.
Last modified on 2024-04-11.
module foundation.exclusive-sum where
Imports
open import foundation.conjunction open import foundation.coproduct-types open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.negation open import foundation.propositional-extensionality open import foundation.symmetric-operations open import foundation.universal-quantification open import foundation.universe-levels open import foundation.unordered-pairs open import foundation-core.cartesian-product-types open import foundation-core.decidable-propositions open import foundation-core.embeddings open import foundation-core.empty-types open import foundation-core.equality-dependent-pair-types open import foundation-core.identity-types open import foundation-core.propositions open import foundation-core.transport-along-identifications open import univalent-combinatorics.2-element-types open import univalent-combinatorics.equality-finite-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types
Idea
The exclusive sum¶ of
two types A
and B
, is the type consisting of
- elements of
A
together with a proof thatB
is empty, or - elements of
B
together with a proof thatA
is empty.
The
exclusive sum¶
of propositions P
and Q
is likewise the
proposition that P
holds and Q
does not
hold, or P
does not hold and Q
holds. The exclusive sum of two propositions
is equivalent to the
exclusive disjunction, which is shown
there.
Definitions
The exclusive sum of types
module _ {l1 l2 : Level} (A : UU l1) (B : UU l2) where exclusive-sum : UU (l1 ⊔ l2) exclusive-sum = (A × ¬ B) + (B × ¬ A)
The exclusive sum of propositions
module _ {l1 l2 : Level} (P : Prop l1) (Q : Prop l2) where exclusive-sum-Prop : Prop (l1 ⊔ l2) exclusive-sum-Prop = coproduct-Prop ( P ∧ (¬' Q)) ( Q ∧ (¬' P)) ( λ p q → pr2 q (pr1 p)) type-exclusive-sum-Prop : UU (l1 ⊔ l2) type-exclusive-sum-Prop = type-Prop exclusive-sum-Prop abstract is-prop-type-exclusive-sum-Prop : is-prop type-exclusive-sum-Prop is-prop-type-exclusive-sum-Prop = is-prop-type-Prop exclusive-sum-Prop
The canonical inclusion of the exclusive sum into the coproduct
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where map-coproduct-exclusive-sum : exclusive-sum A B → A + B map-coproduct-exclusive-sum (inl (a , _)) = inl a map-coproduct-exclusive-sum (inr (b , _)) = inr b
The symmetric operation of exclusive sum
predicate-symmetric-exclusive-sum : {l : Level} (p : unordered-pair (UU l)) → type-unordered-pair p → UU l predicate-symmetric-exclusive-sum p x = ( element-unordered-pair p x) × (¬ (other-element-unordered-pair p x)) symmetric-exclusive-sum : {l : Level} → symmetric-operation (UU l) (UU l) symmetric-exclusive-sum p = Σ (type-unordered-pair p) (predicate-symmetric-exclusive-sum p)
The symmetric operation of the exclusive sum of propositions
predicate-symmetric-exclusive-sum-Prop : {l : Level} (p : unordered-pair (Prop l)) → type-unordered-pair p → UU l predicate-symmetric-exclusive-sum-Prop p = predicate-symmetric-exclusive-sum (map-unordered-pair type-Prop p) type-symmetric-exclusive-sum-Prop : {l : Level} → symmetric-operation (Prop l) (UU l) type-symmetric-exclusive-sum-Prop p = symmetric-exclusive-sum (map-unordered-pair type-Prop p) all-elements-equal-type-symmetric-exclusive-sum-Prop : {l : Level} (p : unordered-pair (Prop l)) → all-elements-equal (type-symmetric-exclusive-sum-Prop p) all-elements-equal-type-symmetric-exclusive-sum-Prop (X , P) x y = cases-is-prop-type-symmetric-exclusive-sum-Prop ( has-decidable-equality-is-finite ( is-finite-type-UU-Fin 2 X) ( pr1 x) ( pr1 y)) where cases-is-prop-type-symmetric-exclusive-sum-Prop : is-decidable (pr1 x = pr1 y) → x = y cases-is-prop-type-symmetric-exclusive-sum-Prop (inl p) = eq-pair-Σ ( p) ( eq-is-prop ( is-prop-product-Prop ( P (pr1 y)) ( neg-type-Prop ( other-element-unordered-pair ( map-unordered-pair (type-Prop) (X , P)) ( pr1 y))))) cases-is-prop-type-symmetric-exclusive-sum-Prop (inr np) = ex-falso ( tr ( λ z → ¬ (type-Prop (P z))) ( compute-swap-2-Element-Type X (pr1 x) (pr1 y) np) ( pr2 (pr2 x)) ( pr1 (pr2 y))) is-prop-type-symmetric-exclusive-sum-Prop : {l : Level} (p : unordered-pair (Prop l)) → is-prop (type-symmetric-exclusive-sum-Prop p) is-prop-type-symmetric-exclusive-sum-Prop p = is-prop-all-elements-equal ( all-elements-equal-type-symmetric-exclusive-sum-Prop p) symmetric-exclusive-sum-Prop : {l : Level} → symmetric-operation (Prop l) (Prop l) pr1 (symmetric-exclusive-sum-Prop E) = type-symmetric-exclusive-sum-Prop E pr2 (symmetric-exclusive-sum-Prop E) = is-prop-type-symmetric-exclusive-sum-Prop E
Properties
The symmetric exclusive sum at a standard unordered pair
module _ {l : Level} {A B : UU l} where exclusive-sum-symmetric-exclusive-sum : symmetric-exclusive-sum (standard-unordered-pair A B) → exclusive-sum A B exclusive-sum-symmetric-exclusive-sum (pair (inl (inr _)) (p , nq)) = inl ( pair p ( tr ( λ t → ¬ (element-unordered-pair (standard-unordered-pair A B) t)) ( compute-swap-Fin-two-ℕ (zero-Fin 1)) ( nq))) exclusive-sum-symmetric-exclusive-sum (pair (inr _) (q , np)) = inr ( pair ( q) ( tr ( λ t → ¬ (element-unordered-pair (standard-unordered-pair A B) t)) ( compute-swap-Fin-two-ℕ (one-Fin 1)) ( np))) symmetric-exclusive-sum-exclusive-sum : exclusive-sum A B → symmetric-exclusive-sum (standard-unordered-pair A B) pr1 (symmetric-exclusive-sum-exclusive-sum (inl (a , nb))) = (zero-Fin 1) pr1 (pr2 (symmetric-exclusive-sum-exclusive-sum (inl (a , nb)))) = a pr2 (pr2 (symmetric-exclusive-sum-exclusive-sum (inl (a , nb)))) = tr ( λ t → ¬ (element-unordered-pair (standard-unordered-pair A B) t)) ( inv (compute-swap-Fin-two-ℕ (zero-Fin 1))) ( nb) pr1 (symmetric-exclusive-sum-exclusive-sum (inr (na , b))) = (one-Fin 1) pr1 (pr2 (symmetric-exclusive-sum-exclusive-sum (inr (b , na)))) = b pr2 (pr2 (symmetric-exclusive-sum-exclusive-sum (inr (b , na)))) = tr ( λ t → ¬ (element-unordered-pair (standard-unordered-pair A B) t)) ( inv (compute-swap-Fin-two-ℕ (one-Fin 1))) ( na)
eq-equiv-Prop
( ( ( equiv-coproduct
( ( ( left-unit-law-coproduct (type-Prop (P ∧ (¬' Q)))) ∘e
( equiv-coproduct
( left-absorption-Σ
( λ x →
( type-Prop
( pr2 (standard-unordered-pair P Q) (inl (inl x)))) ×
( ¬ ( type-Prop
( pr2
( standard-unordered-pair P Q)
( map-swap-2-Element-Type
( pr1 (standard-unordered-pair P Q))
( inl (inl x))))))))
( ( equiv-product
( id-equiv)
( tr
( λ b →
( ¬ (type-Prop (pr2 (standard-unordered-pair P Q) b))) ≃
( ¬ (type-Prop Q)))
( inv (compute-swap-Fin-two-ℕ (zero-Fin ?)))
( id-equiv))) ∘e
( left-unit-law-Σ
( λ y →
( type-Prop
( pr2 (standard-unordered-pair P Q) (inl (inr y)))) ×
( ¬ ( type-Prop
( pr2
( standard-unordered-pair P Q)
( map-swap-2-Element-Type
( pr1 (standard-unordered-pair P Q))
( inl (inr y))))))))))) ∘e
( ( right-distributive-Σ-coproduct
( Fin 0)
( unit)
( λ x →
( type-Prop (pr2 (standard-unordered-pair P Q) (inl x))) ×
( ¬ ( type-Prop
( pr2
( standard-unordered-pair P Q)
( map-swap-2-Element-Type
( pr1 (standard-unordered-pair P Q)) (inl x)))))))))
( ( equiv-product
( tr
( λ b →
¬ (type-Prop (pr2 (standard-unordered-pair P Q) b)) ≃
¬ (type-Prop P))
( inv (compute-swap-Fin-two-ℕ (one-Fin ?)))
( id-equiv))
( id-equiv)) ∘e
( ( commutative-product) ∘e
( left-unit-law-Σ
( λ y →
( type-Prop (pr2 (standard-unordered-pair P Q) (inr y))) ×
( ¬ ( type-Prop
( pr2
( standard-unordered-pair P Q)
( map-swap-2-Element-Type
( pr1 (standard-unordered-pair P Q))
( inr y)))))))))) ∘e
( right-distributive-Σ-coproduct
( Fin 1)
( unit)
( λ x →
( type-Prop (pr2 (standard-unordered-pair P Q) x)) ×
( ¬ ( type-Prop
( pr2
( standard-unordered-pair P Q)
( map-swap-2-Element-Type
( pr1 (standard-unordered-pair P Q))
( x)))))))))
module _ {l : Level} (P Q : Prop l) where exclusive-sum-symmetric-exclusive-sum-Prop : type-hom-Prop ( symmetric-exclusive-sum-Prop (standard-unordered-pair P Q)) ( exclusive-sum-Prop P Q) exclusive-sum-symmetric-exclusive-sum-Prop (pair (inl (inr _)) (p , nq)) = inl ( pair p ( tr ( λ t → ¬ ( type-Prop ( element-unordered-pair (standard-unordered-pair P Q) t))) ( compute-swap-Fin-two-ℕ (zero-Fin 1)) ( nq))) exclusive-sum-symmetric-exclusive-sum-Prop (pair (inr _) (q , np)) = inr ( pair q ( tr ( λ t → ¬ ( type-Prop ( element-unordered-pair (standard-unordered-pair P Q) t))) ( compute-swap-Fin-two-ℕ (one-Fin 1)) ( np))) symmetric-exclusive-sum-exclusive-sum-Prop : type-hom-Prop ( exclusive-sum-Prop P Q) ( symmetric-exclusive-sum-Prop (standard-unordered-pair P Q)) pr1 (symmetric-exclusive-sum-exclusive-sum-Prop (inl (p , nq))) = zero-Fin 1 pr1 (pr2 (symmetric-exclusive-sum-exclusive-sum-Prop (inl (p , nq)))) = p pr2 (pr2 (symmetric-exclusive-sum-exclusive-sum-Prop (inl (p , nq)))) = tr ( λ t → ¬ (type-Prop (element-unordered-pair (standard-unordered-pair P Q) t))) ( inv (compute-swap-Fin-two-ℕ (zero-Fin 1))) ( nq) pr1 (symmetric-exclusive-sum-exclusive-sum-Prop (inr (q , np))) = one-Fin 1 pr1 (pr2 (symmetric-exclusive-sum-exclusive-sum-Prop (inr (q , np)))) = q pr2 (pr2 (symmetric-exclusive-sum-exclusive-sum-Prop (inr (q , np)))) = tr ( λ t → ¬ (type-Prop (element-unordered-pair (standard-unordered-pair P Q) t))) ( inv (compute-swap-Fin-two-ℕ (one-Fin 1))) ( np) eq-commmutative-exclusive-sum-exclusive-sum : {l : Level} (P Q : Prop l) → symmetric-exclusive-sum-Prop (standard-unordered-pair P Q) = exclusive-sum-Prop P Q eq-commmutative-exclusive-sum-exclusive-sum P Q = eq-iff ( exclusive-sum-symmetric-exclusive-sum-Prop P Q) ( symmetric-exclusive-sum-exclusive-sum-Prop P Q)
The exclusive sum of decidable types is decidable
is-decidable-exclusive-sum : {l1 l2 : Level} {A : UU l1} {B : UU l2} → is-decidable A → is-decidable B → is-decidable (exclusive-sum A B) is-decidable-exclusive-sum d e = is-decidable-coproduct ( is-decidable-product d (is-decidable-neg e)) ( is-decidable-product e (is-decidable-neg d)) module _ {l1 l2 : Level} (P : Decidable-Prop l1) (Q : Decidable-Prop l2) where is-decidable-exclusive-sum-Decidable-Prop : is-decidable ( type-exclusive-sum-Prop (prop-Decidable-Prop P) (prop-Decidable-Prop Q)) is-decidable-exclusive-sum-Decidable-Prop = is-decidable-coproduct ( is-decidable-product ( is-decidable-Decidable-Prop P) ( is-decidable-neg (is-decidable-Decidable-Prop Q))) ( is-decidable-product ( is-decidable-Decidable-Prop Q) ( is-decidable-neg (is-decidable-Decidable-Prop P))) exclusive-sum-Decidable-Prop : Decidable-Prop (l1 ⊔ l2) pr1 exclusive-sum-Decidable-Prop = type-exclusive-sum-Prop (prop-Decidable-Prop P) (prop-Decidable-Prop Q) pr1 (pr2 exclusive-sum-Decidable-Prop) = is-prop-type-exclusive-sum-Prop ( prop-Decidable-Prop P) ( prop-Decidable-Prop Q) pr2 (pr2 exclusive-sum-Decidable-Prop) = is-decidable-exclusive-sum-Decidable-Prop
Table of files about propositional logic
The following table gives an overview of basic constructions in propositional logic and related considerations.
Recent changes
- 2024-04-11. Fredrik Bakke and Egbert Rijke. Propositional operations (#1008).