# Coproduct decompositions in a subuniverse
```agda
module foundation.coproduct-decompositions-subuniverse where
```
<details><summary>Imports</summary>
```agda
open import foundation.coproduct-types
open import foundation.dependent-pair-types
open import foundation.empty-types
open import foundation.equivalence-extensionality
open import foundation.equivalences
open import foundation.functoriality-coproduct-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.structure-identity-principle
open import foundation.subuniverses
open import foundation.type-arithmetic-cartesian-product-types
open import foundation.type-arithmetic-coproduct-types
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.type-arithmetic-empty-type
open import foundation.univalence
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
open import foundation-core.equality-dependent-pair-types
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.propositions
open import foundation-core.torsorial-type-families
```
</details>
## Idea
Let `P` be a subuniverse and `X` a type in `P`. A binary coproduct decomposition
of `X` is defined to be two types `A` and `B` in `P` and an equivalence from `X`
to `A+B`.
## Definitions
### Binary coproduct decomposition
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
where
binary-coproduct-Decomposition-subuniverse : UU (lsuc l1 ⊔ l2)
binary-coproduct-Decomposition-subuniverse =
Σ ( type-subuniverse P)
( λ k1 →
Σ ( type-subuniverse P)
( λ k2 →
( inclusion-subuniverse P X) ≃
( inclusion-subuniverse P k1 + inclusion-subuniverse P k2)))
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
(d : binary-coproduct-Decomposition-subuniverse P X)
where
left-summand-binary-coproduct-Decomposition-subuniverse : type-subuniverse P
left-summand-binary-coproduct-Decomposition-subuniverse = pr1 d
type-left-summand-binary-coproduct-Decomposition-subuniverse : UU l1
type-left-summand-binary-coproduct-Decomposition-subuniverse =
inclusion-subuniverse P
left-summand-binary-coproduct-Decomposition-subuniverse
right-summand-binary-coproduct-Decomposition-subuniverse : type-subuniverse P
right-summand-binary-coproduct-Decomposition-subuniverse = pr1 (pr2 d)
type-right-summand-binary-coproduct-Decomposition-subuniverse : UU l1
type-right-summand-binary-coproduct-Decomposition-subuniverse =
inclusion-subuniverse P
right-summand-binary-coproduct-Decomposition-subuniverse
matching-correspondence-binary-coproduct-Decomposition-subuniverse :
inclusion-subuniverse P X ≃
( type-left-summand-binary-coproduct-Decomposition-subuniverse +
type-right-summand-binary-coproduct-Decomposition-subuniverse)
matching-correspondence-binary-coproduct-Decomposition-subuniverse =
pr2 (pr2 d)
```
### Iterated binary coproduct decompositions
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
where
left-iterated-binary-coproduct-Decomposition-subuniverse : UU (lsuc l1 ⊔ l2)
left-iterated-binary-coproduct-Decomposition-subuniverse =
Σ ( binary-coproduct-Decomposition-subuniverse P X)
( λ d →
binary-coproduct-Decomposition-subuniverse P
( left-summand-binary-coproduct-Decomposition-subuniverse P X d))
right-iterated-binary-coproduct-Decomposition-subuniverse : UU (lsuc l1 ⊔ l2)
right-iterated-binary-coproduct-Decomposition-subuniverse =
Σ ( binary-coproduct-Decomposition-subuniverse P X)
( λ d →
binary-coproduct-Decomposition-subuniverse P
( right-summand-binary-coproduct-Decomposition-subuniverse P X d))
```
### Ternary coproduct Decomposition-subuniverses
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
where
ternary-coproduct-Decomposition-subuniverse : UU (lsuc l1 ⊔ l2)
ternary-coproduct-Decomposition-subuniverse =
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
inclusion-subuniverse P X ≃
( inclusion-subuniverse P (pr1 x) +
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
module _
(d : ternary-coproduct-Decomposition-subuniverse)
where
types-ternary-coproduct-Decomposition-subuniverse :
type-subuniverse P × (type-subuniverse P × type-subuniverse P)
types-ternary-coproduct-Decomposition-subuniverse = pr1 d
first-summand-ternary-coproduct-Decomposition-subuniverse :
type-subuniverse P
first-summand-ternary-coproduct-Decomposition-subuniverse =
( pr1 types-ternary-coproduct-Decomposition-subuniverse)
second-summand-ternary-coproduct-Decomposition-subuniverse :
type-subuniverse P
second-summand-ternary-coproduct-Decomposition-subuniverse =
( pr1 (pr2 types-ternary-coproduct-Decomposition-subuniverse))
third-summand-ternary-coproduct-Decomposition-subuniverse :
type-subuniverse P
third-summand-ternary-coproduct-Decomposition-subuniverse =
( pr2 (pr2 types-ternary-coproduct-Decomposition-subuniverse))
matching-correspondence-ternary-coproductuct-Decomposition-subuniverse :
( inclusion-subuniverse P X) ≃
( ( inclusion-subuniverse P
first-summand-ternary-coproduct-Decomposition-subuniverse) +
( ( inclusion-subuniverse P
second-summand-ternary-coproduct-Decomposition-subuniverse) +
( inclusion-subuniverse P
third-summand-ternary-coproduct-Decomposition-subuniverse)))
matching-correspondence-ternary-coproductuct-Decomposition-subuniverse =
pr2 d
```
## Propositions
### Characterization of equality of binary coproduct Decomposition of subuniverse
```agda
equiv-binary-coproduct-Decomposition-subuniverse :
{l1 l2 : Level} (P : subuniverse l1 l2) (A : type-subuniverse P)
(X : binary-coproduct-Decomposition-subuniverse P A)
(Y : binary-coproduct-Decomposition-subuniverse P A) →
UU (l1)
equiv-binary-coproduct-Decomposition-subuniverse P A X Y =
Σ ( type-left-summand-binary-coproduct-Decomposition-subuniverse P A X ≃
type-left-summand-binary-coproduct-Decomposition-subuniverse P A Y)
( λ el →
Σ ( type-right-summand-binary-coproduct-Decomposition-subuniverse P A X ≃
type-right-summand-binary-coproduct-Decomposition-subuniverse P A Y)
( λ er →
( map-coproduct (map-equiv el) (map-equiv er) ∘
map-equiv
( matching-correspondence-binary-coproduct-Decomposition-subuniverse
P A X)) ~
( map-equiv
( matching-correspondence-binary-coproduct-Decomposition-subuniverse
P A Y))))
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (A : type-subuniverse P)
(X : binary-coproduct-Decomposition-subuniverse P A)
(Y : binary-coproduct-Decomposition-subuniverse P A)
(e : equiv-binary-coproduct-Decomposition-subuniverse P A X Y)
where
equiv-left-summand-equiv-binary-coproduct-Decomposition-subuniverse :
type-left-summand-binary-coproduct-Decomposition-subuniverse P A X ≃
type-left-summand-binary-coproduct-Decomposition-subuniverse P A Y
equiv-left-summand-equiv-binary-coproduct-Decomposition-subuniverse = pr1 e
map-equiv-left-summand-equiv-binary-coproduct-Decomposition-subuniverse :
type-left-summand-binary-coproduct-Decomposition-subuniverse P A X →
type-left-summand-binary-coproduct-Decomposition-subuniverse P A Y
map-equiv-left-summand-equiv-binary-coproduct-Decomposition-subuniverse =
map-equiv
equiv-left-summand-equiv-binary-coproduct-Decomposition-subuniverse
equiv-right-summand-equiv-binary-coproduct-Decomposition-subuniverse :
type-right-summand-binary-coproduct-Decomposition-subuniverse P A X ≃
type-right-summand-binary-coproduct-Decomposition-subuniverse P A Y
equiv-right-summand-equiv-binary-coproduct-Decomposition-subuniverse =
pr1 (pr2 e)
map-equiv-right-summand-equiv-binary-coproduct-Decomposition-subuniverse :
type-right-summand-binary-coproduct-Decomposition-subuniverse P A X →
type-right-summand-binary-coproduct-Decomposition-subuniverse P A Y
map-equiv-right-summand-equiv-binary-coproduct-Decomposition-subuniverse =
map-equiv
equiv-right-summand-equiv-binary-coproduct-Decomposition-subuniverse
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (A : type-subuniverse P)
(X : binary-coproduct-Decomposition-subuniverse P A)
where
id-equiv-binary-coproduct-Decomposition-subuniverse :
equiv-binary-coproduct-Decomposition-subuniverse P A X X
pr1 id-equiv-binary-coproduct-Decomposition-subuniverse = id-equiv
pr1 (pr2 id-equiv-binary-coproduct-Decomposition-subuniverse) = id-equiv
pr2 (pr2 id-equiv-binary-coproduct-Decomposition-subuniverse) x =
id-map-coproduct
( type-left-summand-binary-coproduct-Decomposition-subuniverse P A X)
( type-right-summand-binary-coproduct-Decomposition-subuniverse P A X)
( map-equiv
( matching-correspondence-binary-coproduct-Decomposition-subuniverse
P A X)
( x))
is-torsorial-equiv-binary-coproduct-Decomposition-subuniverse :
is-torsorial (equiv-binary-coproduct-Decomposition-subuniverse P A X)
is-torsorial-equiv-binary-coproduct-Decomposition-subuniverse =
is-torsorial-Eq-structure
( is-torsorial-equiv-subuniverse P
( left-summand-binary-coproduct-Decomposition-subuniverse P A X))
( left-summand-binary-coproduct-Decomposition-subuniverse P A X ,
id-equiv)
( is-torsorial-Eq-structure
( is-torsorial-equiv-subuniverse P
( right-summand-binary-coproduct-Decomposition-subuniverse P A X))
( right-summand-binary-coproduct-Decomposition-subuniverse P A X ,
id-equiv)
( is-torsorial-htpy-equiv
( equiv-coproduct id-equiv id-equiv ∘e
matching-correspondence-binary-coproduct-Decomposition-subuniverse
P A X)))
equiv-eq-binary-coproduct-Decomposition-subuniverse :
(Y : binary-coproduct-Decomposition-subuniverse P A) → (X = Y) →
equiv-binary-coproduct-Decomposition-subuniverse P A X Y
equiv-eq-binary-coproduct-Decomposition-subuniverse .X refl =
id-equiv-binary-coproduct-Decomposition-subuniverse
is-equiv-equiv-eq-binary-coproduct-Decomposition-subuniverse :
(Y : binary-coproduct-Decomposition-subuniverse P A) →
is-equiv (equiv-eq-binary-coproduct-Decomposition-subuniverse Y)
is-equiv-equiv-eq-binary-coproduct-Decomposition-subuniverse =
fundamental-theorem-id
is-torsorial-equiv-binary-coproduct-Decomposition-subuniverse
equiv-eq-binary-coproduct-Decomposition-subuniverse
extensionality-binary-coproduct-Decomposition-subuniverse :
(Y : binary-coproduct-Decomposition-subuniverse P A) →
(X = Y) ≃ equiv-binary-coproduct-Decomposition-subuniverse P A X Y
pr1 (extensionality-binary-coproduct-Decomposition-subuniverse Y) =
equiv-eq-binary-coproduct-Decomposition-subuniverse Y
pr2 (extensionality-binary-coproduct-Decomposition-subuniverse Y) =
is-equiv-equiv-eq-binary-coproduct-Decomposition-subuniverse Y
eq-equiv-binary-coproduct-Decomposition-subuniverse :
(Y : binary-coproduct-Decomposition-subuniverse P A) →
equiv-binary-coproduct-Decomposition-subuniverse P A X Y → (X = Y)
eq-equiv-binary-coproduct-Decomposition-subuniverse Y =
map-inv-equiv (extensionality-binary-coproduct-Decomposition-subuniverse Y)
```
### Equivalence between binary coproduct Decomposition-subuniverse induce by commutativiy of coproduct
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
where
equiv-commutative-binary-coproduct-Decomposition-subuniverse :
binary-coproduct-Decomposition-subuniverse P X ≃
binary-coproduct-Decomposition-subuniverse P X
equiv-commutative-binary-coproduct-Decomposition-subuniverse =
( associative-Σ
( type-subuniverse P)
( λ _ → type-subuniverse P)
( _)) ∘e
( ( equiv-Σ
( _)
( commutative-product)
( λ x →
equiv-postcomp-equiv
( commutative-coproduct
( inclusion-subuniverse P (pr1 x))
( inclusion-subuniverse P (pr2 x)))
(inclusion-subuniverse P X))) ∘e
( ( inv-associative-Σ
( type-subuniverse P)
( λ _ → type-subuniverse P)
( _))))
```
### Equivalence between iterated coproduct and ternary coproduct decomposition
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
(C1 : is-closed-under-coproducts-subuniverse P)
where
private
map-reassociate-left-iterated-coproduct-Decomposition-subuniverse :
left-iterated-binary-coproduct-Decomposition-subuniverse P X →
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
Σ ( Σ ( type-subuniverse P)
( λ A →
( inclusion-subuniverse P A) ≃
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
( λ A →
( inclusion-subuniverse P X) ≃
( inclusion-subuniverse P (pr1 A) +
inclusion-subuniverse P (pr1 x))))
map-reassociate-left-iterated-coproduct-Decomposition-subuniverse
( (A , B , e) , C , D , f) =
( (B , C , D) , (A , f) , e)
map-inv-reassociate-left-iterated-coproduct-Decomposition-subuniverse :
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
Σ ( Σ ( type-subuniverse P)
( λ A →
inclusion-subuniverse P A ≃
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
( λ A →
inclusion-subuniverse P X ≃
( inclusion-subuniverse P (pr1 A) +
inclusion-subuniverse P (pr1 x)))) →
left-iterated-binary-coproduct-Decomposition-subuniverse P X
map-inv-reassociate-left-iterated-coproduct-Decomposition-subuniverse
( (B , C , D) , (A , f) , e) =
( (A , B , e) , C , D , f)
equiv-reassociate-left-iterated-coproduct-Decomposition-subuniverse :
left-iterated-binary-coproduct-Decomposition-subuniverse P X ≃
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
Σ ( Σ ( type-subuniverse P)
( λ A →
inclusion-subuniverse P A ≃
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
( λ A →
inclusion-subuniverse P X ≃
( inclusion-subuniverse P (pr1 A) +
inclusion-subuniverse P (pr1 x))))
pr1 equiv-reassociate-left-iterated-coproduct-Decomposition-subuniverse =
map-reassociate-left-iterated-coproduct-Decomposition-subuniverse
pr2 equiv-reassociate-left-iterated-coproduct-Decomposition-subuniverse =
is-equiv-is-invertible
map-inv-reassociate-left-iterated-coproduct-Decomposition-subuniverse
refl-htpy
refl-htpy
equiv-ternary-left-iterated-coproduct-Decomposition-subuniverse :
left-iterated-binary-coproduct-Decomposition-subuniverse P X ≃
ternary-coproduct-Decomposition-subuniverse P X
equiv-ternary-left-iterated-coproduct-Decomposition-subuniverse =
( equiv-tot
( λ x →
( ( equiv-postcomp-equiv
( commutative-coproduct _ _)
( inclusion-subuniverse P X)) ∘e
( ( left-unit-law-Σ-is-contr
( is-torsorial-equiv-subuniverse' P
( ( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x))) ,
( C1 (pr2 (pr1 (pr2 x))) (pr2 (pr2 (pr2 x)))))))
( ( ( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x))) ,
( C1 (pr2 (pr1 (pr2 x))) (pr2 (pr2 (pr2 x))))) ,
( id-equiv)))))) ∘e
( equiv-reassociate-left-iterated-coproduct-Decomposition-subuniverse)
private
map-reassociate-right-iterated-coproduct-Decomposition-subuniverse :
right-iterated-binary-coproduct-Decomposition-subuniverse P X →
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
Σ ( Σ ( type-subuniverse P)
( λ B →
( inclusion-subuniverse P B) ≃
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
( λ B →
( inclusion-subuniverse P X) ≃
( inclusion-subuniverse P (pr1 x) +
inclusion-subuniverse P (pr1 B))))
map-reassociate-right-iterated-coproduct-Decomposition-subuniverse
( (A , B , e) , C , D , f) =
( (A , C , D) , (B , f) , e)
map-inv-reassociate-right-iterated-coproduct-Decomposition-subuniverse :
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
Σ ( Σ ( type-subuniverse P)
( λ B →
( inclusion-subuniverse P B) ≃
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
( λ B →
( inclusion-subuniverse P X) ≃
( inclusion-subuniverse P (pr1 x) +
inclusion-subuniverse P (pr1 B)))) →
right-iterated-binary-coproduct-Decomposition-subuniverse P X
map-inv-reassociate-right-iterated-coproduct-Decomposition-subuniverse
( (A , C , D) , (B , f) , e) =
( (A , B , e) , C , D , f)
equiv-reassociate-right-iterated-coproduct-Decomposition-subuniverse :
right-iterated-binary-coproduct-Decomposition-subuniverse P X ≃
Σ ( type-subuniverse P × (type-subuniverse P × type-subuniverse P))
( λ x →
Σ ( Σ ( type-subuniverse P)
( λ B →
( inclusion-subuniverse P B) ≃
( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x)))))
( λ B →
( inclusion-subuniverse P X) ≃
( inclusion-subuniverse P (pr1 x) +
inclusion-subuniverse P (pr1 B))))
pr1 equiv-reassociate-right-iterated-coproduct-Decomposition-subuniverse =
map-reassociate-right-iterated-coproduct-Decomposition-subuniverse
pr2 equiv-reassociate-right-iterated-coproduct-Decomposition-subuniverse =
is-equiv-is-invertible
map-inv-reassociate-right-iterated-coproduct-Decomposition-subuniverse
refl-htpy
refl-htpy
equiv-ternary-right-iterated-coproduct-Decomposition-subuniverse :
right-iterated-binary-coproduct-Decomposition-subuniverse P X ≃
ternary-coproduct-Decomposition-subuniverse P X
equiv-ternary-right-iterated-coproduct-Decomposition-subuniverse =
( equiv-tot
( λ x →
left-unit-law-Σ-is-contr
( is-torsorial-equiv-subuniverse' P
( ( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x))) ,
( C1 (pr2 (pr1 (pr2 x))) (pr2 (pr2 (pr2 x))))))
( ( ( inclusion-subuniverse P (pr1 (pr2 x)) +
inclusion-subuniverse P (pr2 (pr2 x))) ,
( C1 (pr2 (pr1 (pr2 x))) (pr2 (pr2 (pr2 x))))) ,
( id-equiv)))) ∘e
( equiv-reassociate-right-iterated-coproduct-Decomposition-subuniverse)
```
### Coproduct-decomposition with empty right summand
```agda
module _
{l1 l2 : Level} (P : subuniverse l1 l2) (X : type-subuniverse P)
(C1 : is-in-subuniverse P (raise-empty l1))
where
equiv-is-empty-right-summand-binary-coproduct-Decomposition-subuniverse :
Σ ( binary-coproduct-Decomposition-subuniverse P X)
( λ d →
is-empty
( inclusion-subuniverse P
( right-summand-binary-coproduct-Decomposition-subuniverse
P X d))) ≃
Σ ( type-subuniverse P)
( λ Y → inclusion-subuniverse P X ≃ pr1 Y)
equiv-is-empty-right-summand-binary-coproduct-Decomposition-subuniverse =
( equiv-tot
( λ x →
( equiv-postcomp-equiv
( right-unit-law-coproduct-is-empty
( inclusion-subuniverse P x)
( raise-empty l1)
( is-empty-raise-empty))
( inclusion-subuniverse P X)) ∘e
( ( left-unit-law-Σ-is-contr
( ( ( raise-empty l1 , C1) , is-empty-raise-empty) ,
( λ x →
eq-pair-Σ
( eq-pair-Σ
( eq-equiv (equiv-is-empty is-empty-raise-empty (pr2 x)))
( eq-is-prop (is-prop-type-Prop (P _))))
( eq-is-prop is-property-is-empty)))
( ( raise-empty l1 , C1) , is-empty-raise-empty)) ∘e
( ( inv-associative-Σ _ _ _) ∘e
( ( equiv-tot (λ _ → commutative-product)) ∘e
( ( associative-Σ _ _ _))))))) ∘e
( ( associative-Σ _ _ _))
```