# Cartesian products of set quotients ```agda module foundation.cartesian-products-set-quotients where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.equality-cartesian-product-types open import foundation.function-extensionality open import foundation.products-equivalence-relations open import foundation.reflecting-maps-equivalence-relations open import foundation.set-quotients open import foundation.sets open import foundation.uniqueness-set-quotients open import foundation.universal-property-set-quotients open import foundation.universe-levels open import foundation-core.cartesian-product-types open import foundation-core.equality-dependent-pair-types open import foundation-core.equivalence-relations 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 ``` </details> ## Idea Given two types `A` and `B`, equipped with equivalence relations `R` and `S`, respectively, the cartesian product of their set quotients is the set quotient of their product. ## Definition ### The product of two relations ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} (R : equivalence-relation l2 A) {B : UU l3} (S : equivalence-relation l4 B) where product-set-quotient-Set : Set (l1 ⊔ l2 ⊔ l3 ⊔ l4) product-set-quotient-Set = product-Set (quotient-Set R) (quotient-Set S) product-set-quotient : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) product-set-quotient = pr1 product-set-quotient-Set is-set-product-set-quotient : is-set product-set-quotient is-set-product-set-quotient = pr2 product-set-quotient-Set product-set-quotient-map : (A × B) → product-set-quotient product-set-quotient-map (a , b) = pair (quotient-map R a) (quotient-map S b) reflecting-map-product-quotient-map : reflecting-map-equivalence-relation ( product-equivalence-relation R S) ( product-set-quotient) reflecting-map-product-quotient-map = pair product-set-quotient-map ( λ (p , q) → ( eq-pair ( apply-effectiveness-quotient-map' R p) ( apply-effectiveness-quotient-map' S q))) ``` ## Properties ### The product of sets quotients is a set quotient ```agda inv-precomp-set-quotient-product-set-quotient : {l : Level} (X : Set l) → reflecting-map-equivalence-relation ( product-equivalence-relation R S) ( type-Set X) → hom-Set product-set-quotient-Set X inv-precomp-set-quotient-product-set-quotient X (f , H) (qa , qb) = inv-precomp-set-quotient ( R) ( hom-set-Set (quotient-Set S) X) ( pair ( λ a qb' → inv-precomp-set-quotient S X ( pair (λ b → f (a , b)) (λ p → H (refl-equivalence-relation R a , p))) qb') ( λ {a1} {a2} p → ( ap (inv-precomp-set-quotient S X) ( eq-pair-Σ ( eq-htpy (λ b → H (p , refl-equivalence-relation S b))) ( eq-is-prop ( is-prop-reflects-equivalence-relation S X _)))))) ( qa) ( qb) is-section-inv-precomp-set-quotient-product-set-quotient : { l : Level} ( X : Set l) → ( precomp-Set-Quotient ( product-equivalence-relation R S) ( product-set-quotient-Set) ( reflecting-map-product-quotient-map) ( X) ∘ ( inv-precomp-set-quotient-product-set-quotient X)) ~ ( id) is-section-inv-precomp-set-quotient-product-set-quotient X (f , H) = eq-pair-Σ ( eq-htpy ( λ (a , b) → ( htpy-eq ( is-section-inv-precomp-set-quotient R ( hom-set-Set (quotient-Set S) X) _ a) ( quotient-map S b) ∙ ( is-section-inv-precomp-set-quotient S X _ b)))) ( eq-is-prop ( is-prop-reflects-equivalence-relation ( product-equivalence-relation R S) X f)) is-retraction-inv-precomp-set-quotient-product-set-quotient : { l : Level} ( X : Set l) → ( ( inv-precomp-set-quotient-product-set-quotient X) ∘ ( precomp-Set-Quotient ( product-equivalence-relation R S) ( product-set-quotient-Set) ( reflecting-map-product-quotient-map) ( X))) ~ ( id) is-retraction-inv-precomp-set-quotient-product-set-quotient X f = ( eq-htpy ( λ (qa , qb) → htpy-eq ( htpy-eq ( ap ( inv-precomp-set-quotient ( R) ( hom-set-Set (quotient-Set S) X)) ( eq-pair-Σ ( eq-htpy λ a → ( ap ( inv-precomp-set-quotient S X) ( eq-pair-eq-fiber ( eq-is-prop ( is-prop-reflects-equivalence-relation S X _)))) ∙ ( is-retraction-inv-precomp-set-quotient S X _)) ( eq-is-prop ( is-prop-reflects-equivalence-relation R ( hom-set-Set (quotient-Set S) X) _))) ∙ ( is-retraction-inv-precomp-set-quotient R ( hom-set-Set (quotient-Set S) X) ( λ qa qb → f (qa , qb)))) ( qa)) ( qb))) is-set-quotient-product-set-quotient : is-set-quotient ( product-equivalence-relation R S) ( product-set-quotient-Set) ( reflecting-map-product-quotient-map) pr1 (pr1 (is-set-quotient-product-set-quotient X)) = inv-precomp-set-quotient-product-set-quotient X pr2 (pr1 (is-set-quotient-product-set-quotient X)) = is-section-inv-precomp-set-quotient-product-set-quotient X pr1 (pr2 (is-set-quotient-product-set-quotient X)) = inv-precomp-set-quotient-product-set-quotient X pr2 (pr2 (is-set-quotient-product-set-quotient X)) = is-retraction-inv-precomp-set-quotient-product-set-quotient X quotient-product : Set (l1 ⊔ l2 ⊔ l3 ⊔ l4) quotient-product = quotient-Set (product-equivalence-relation R S) type-quotient-product : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) type-quotient-product = pr1 quotient-product equiv-quotient-product-product-set-quotient : product-set-quotient ≃ type-Set (quotient-product) equiv-quotient-product-product-set-quotient = equiv-uniqueness-set-quotient ( product-equivalence-relation R S) ( product-set-quotient-Set) ( reflecting-map-product-quotient-map) ( is-set-quotient-product-set-quotient) ( quotient-product) ( reflecting-map-quotient-map (product-equivalence-relation R S)) ( is-set-quotient-set-quotient (product-equivalence-relation R S)) triangle-uniqueness-product-set-quotient : ( map-equiv equiv-quotient-product-product-set-quotient ∘ product-set-quotient-map) ~ quotient-map (product-equivalence-relation R S) triangle-uniqueness-product-set-quotient = triangle-uniqueness-set-quotient ( product-equivalence-relation R S) ( product-set-quotient-Set) ( reflecting-map-product-quotient-map) ( is-set-quotient-product-set-quotient) ( quotient-product) ( reflecting-map-quotient-map (product-equivalence-relation R S)) ( is-set-quotient-set-quotient (product-equivalence-relation R S)) ```