Pointed cartesian product types
module structured-types.pointed-cartesian-product-types where
Imports
open import foundation.cartesian-product-types open import foundation.dependent-pair-types open import foundation.equality-cartesian-product-types open import foundation.functions open import foundation.homotopies open import foundation.identity-types open import foundation.universe-levels open import structured-types.pointed-maps open import structured-types.pointed-types
Idea
Given two pointed types a : A
and b : B
, their cartesian product is again
canonically pointed at (a , b) : A × B
. We call this the pointed cartesian
product or pointed product of the two pointed types.
Definition
module _ {l1 l2 : Level} where prod-Pointed-Type : (A : Pointed-Type l1) (B : Pointed-Type l2) → Pointed-Type (l1 ⊔ l2) pr1 (prod-Pointed-Type (A , a) (B , b)) = A × B pr2 (prod-Pointed-Type (A , a) (B , b)) = a , b _×∗_ = prod-Pointed-Type
Properties
The pointed projections from the pointed product A ×∗ B
onto A
and B
module _ {l1 l2 : Level} (A : Pointed-Type l1) (B : Pointed-Type l2) where map-pr1-prod-Pointed-Type : type-Pointed-Type (A ×∗ B) → type-Pointed-Type A map-pr1-prod-Pointed-Type = pr1 pr1-prod-Pointed-Type : (A ×∗ B) →∗ A pr1 pr1-prod-Pointed-Type = map-pr1-prod-Pointed-Type pr2 pr1-prod-Pointed-Type = refl map-pr2-prod-Pointed-Type : type-Pointed-Type (A ×∗ B) → type-Pointed-Type B map-pr2-prod-Pointed-Type = pr2 pr2-prod-Pointed-Type : (A ×∗ B) →∗ B pr1 pr2-prod-Pointed-Type = map-pr2-prod-Pointed-Type pr2 pr2-prod-Pointed-Type = refl
The pointed product A ×∗ B
comes equipped with pointed inclusion of A
and B
map-inl-prod-Pointed-Type : type-Pointed-Type A → type-Pointed-Type (A ×∗ B) pr1 (map-inl-prod-Pointed-Type x) = x pr2 (map-inl-prod-Pointed-Type x) = point-Pointed-Type B inl-prod-Pointed-Type : A →∗ (A ×∗ B) pr1 inl-prod-Pointed-Type = map-inl-prod-Pointed-Type pr2 inl-prod-Pointed-Type = refl map-inr-prod-Pointed-Type : type-Pointed-Type B → type-Pointed-Type (A ×∗ B) pr1 (map-inr-prod-Pointed-Type y) = point-Pointed-Type A pr2 (map-inr-prod-Pointed-Type y) = y inr-prod-Pointed-Type : B →∗ (A ×∗ B) pr1 inr-prod-Pointed-Type = map-inr-prod-Pointed-Type pr2 inr-prod-Pointed-Type = refl
The pointed inclusions into A ×∗ B
are sections to the pointed projections
issec-map-inl-prod-Pointed-Type : (map-pr1-prod-Pointed-Type ∘ map-inl-prod-Pointed-Type) ~ id issec-map-inl-prod-Pointed-Type = refl-htpy issec-map-inr-prod-Pointed-Type : (map-pr2-prod-Pointed-Type ∘ map-inr-prod-Pointed-Type) ~ id issec-map-inr-prod-Pointed-Type = refl-htpy
The pointed gap map for the pointed product
map-gap-prod-Pointed-Type : {l3 : Level} (S : Pointed-Type l3) (f : S →∗ A) (g : S →∗ B) → type-Pointed-Type S → type-Pointed-Type (A ×∗ B) pr1 (map-gap-prod-Pointed-Type S f g x) = map-pointed-map S A f x pr2 (map-gap-prod-Pointed-Type S f g x) = map-pointed-map S B g x gap-prod-Pointed-Type : {l3 : Level} (S : Pointed-Type l3) (f : S →∗ A) (g : S →∗ B) → S →∗ (A ×∗ B) pr1 (gap-prod-Pointed-Type S f g) = map-gap-prod-Pointed-Type S f g pr2 (gap-prod-Pointed-Type S f g) = eq-pair ( preserves-point-pointed-map S A f) ( preserves-point-pointed-map S B g)