Type arithmetic for cartesian product types
Content created by Egbert Rijke, Fredrik Bakke and Jonathan Prieto-Cubides.
Created on 2022-01-26.
Last modified on 2024-03-02.
module foundation.type-arithmetic-cartesian-product-types where
Imports
open import foundation.dependent-pair-types open import foundation.equality-cartesian-product-types 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
Idea
We prove laws for the manipulation of cartesian products with respect to themselves and dependent pair types.
Laws
Commutativity of cartesian products
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where map-commutative-product : A × B → B × A pr1 (map-commutative-product (pair a b)) = b pr2 (map-commutative-product (pair a b)) = a map-inv-commutative-product : B × A → A × B pr1 (map-inv-commutative-product (pair b a)) = a pr2 (map-inv-commutative-product (pair b a)) = b is-section-map-inv-commutative-product : (map-commutative-product ∘ map-inv-commutative-product) ~ id is-section-map-inv-commutative-product (pair b a) = refl is-retraction-map-inv-commutative-product : (map-inv-commutative-product ∘ map-commutative-product) ~ id is-retraction-map-inv-commutative-product (pair a b) = refl is-equiv-map-commutative-product : is-equiv map-commutative-product is-equiv-map-commutative-product = is-equiv-is-invertible map-inv-commutative-product is-section-map-inv-commutative-product is-retraction-map-inv-commutative-product commutative-product : (A × B) ≃ (B × A) pr1 commutative-product = map-commutative-product pr2 commutative-product = is-equiv-map-commutative-product
Associativity of cartesian products
module _ {l1 l2 l3 : Level} (A : UU l1) (B : UU l2) (C : UU l3) where map-associative-product : (A × B) × C → A × (B × C) map-associative-product = map-associative-Σ A (λ _ → B) (λ _ → C) map-inv-associative-product : A × (B × C) → (A × B) × C map-inv-associative-product = map-inv-associative-Σ A (λ _ → B) (λ _ → C) is-section-map-inv-associative-product : (map-associative-product ∘ map-inv-associative-product) ~ id is-section-map-inv-associative-product = is-section-map-inv-associative-Σ A (λ _ → B) (λ _ → C) is-retraction-map-inv-associative-product : (map-inv-associative-product ∘ map-associative-product) ~ id is-retraction-map-inv-associative-product = is-retraction-map-inv-associative-Σ A (λ _ → B) (λ _ → C) is-equiv-map-associative-product : is-equiv map-associative-product is-equiv-map-associative-product = is-equiv-map-associative-Σ A (λ _ → B) (λ _ → C) associative-product : ((A × B) × C) ≃ (A × (B × C)) associative-product = associative-Σ A (λ _ → B) (λ _ → C)
The unit laws of cartesian product types with respect to contractible types
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (is-contr-B : is-contr B) where right-unit-law-product-is-contr : A × B ≃ A right-unit-law-product-is-contr = right-unit-law-Σ-is-contr (λ _ → is-contr-B) inv-right-unit-law-product-is-contr : A ≃ A × B inv-right-unit-law-product-is-contr = inv-equiv right-unit-law-product-is-contr module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (is-contr-A : is-contr A) where left-unit-law-product-is-contr : A × B ≃ B left-unit-law-product-is-contr = left-unit-law-Σ-is-contr is-contr-A (center is-contr-A) inv-left-unit-law-product-is-contr : B ≃ A × B inv-left-unit-law-product-is-contr = inv-equiv left-unit-law-product-is-contr is-equiv-pr2-product-is-contr : is-equiv (pr2 {B = λ _ → B}) is-equiv-pr2-product-is-contr = is-equiv-comp ( pr1) ( map-commutative-product) ( is-equiv-map-commutative-product) ( is-equiv-pr1-is-contr (λ _ → is-contr-A)) equiv-pr2-product-is-contr : (A × B) ≃ B pr1 equiv-pr2-product-is-contr = pr2 pr2 equiv-pr2-product-is-contr = is-equiv-pr2-product-is-contr
Adding redundant properties
equiv-add-redundant-prop : {l1 l2 : Level} {A : UU l1} {B : UU l2} → is-prop B → (f : A → B) → A ≃ A × B pr1 (equiv-add-redundant-prop is-prop-B f) a = a , f a pr2 (equiv-add-redundant-prop is-prop-B f) = is-equiv-is-invertible ( pr1) ( λ p → eq-pair refl (eq-is-prop is-prop-B)) ( refl-htpy)
See also
- Functorial properties of cartesian products are recorded in
foundation.functoriality-cartesian-product-types
. - Equality proofs in cartesian product types are characterized in
foundation.equality-cartesian-product-types
. - The universal property of cartesian product types is treated in
foundation.universal-property-cartesian-product-types
. - Arithmetical laws involving dependent pair types are recorded in
foundation.type-arithmetic-dependent-pair-types
.- Arithmetical laws involving dependent product types are recorded in
foundation.type-arithmetic-dependent-function-types
.
- Arithmetical laws involving dependent product types are recorded in
- Arithmetical laws involving coproduct types are recorded in
foundation.type-arithmetic-coproduct-types
. - Arithmetical laws involving the unit type are recorded in
foundation.type-arithmetic-unit-type
. - Arithmetical laws involving the empty type are recorded in
foundation.type-arithmetic-empty-type
.
Recent changes
- 2024-03-02. Fredrik Bakke. Factor out standard pullbacks (#1042).
- 2024-03-01. Fredrik Bakke. chore: Fix markdown list formatting (#1047).
- 2024-02-06. Fredrik Bakke. Rename
(co)prod
to(co)product
(#1017). - 2023-11-24. Fredrik Bakke. Global function classes (#890).
- 2023-09-11. Fredrik Bakke and Egbert Rijke. Some computations for different notions of equivalence (#711).