# Double powersets
```agda
module foundation.double-powersets where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.existential-quantification
open import foundation.powersets
open import foundation.propositional-truncations
open import foundation.universe-levels
open import foundation-core.propositions
open import foundation-core.subtypes
open import order-theory.large-posets
open import order-theory.posets
```
</details>
## Definitions
### The double powerset
```agda
module _
{l1 : Level} (l2 : Level)
where
double-powerset-Large-Poset :
UU l1 →
Large-Poset
( λ l3 → l1 ⊔ lsuc l2 ⊔ lsuc l3)
( λ l3 l4 → l1 ⊔ lsuc l2 ⊔ l3 ⊔ l4)
double-powerset-Large-Poset A = powerset-Large-Poset (powerset l2 A)
double-powerset-Poset :
(l : Level) → UU l1 → Poset (l1 ⊔ lsuc l2 ⊔ lsuc l) (l1 ⊔ lsuc l2 ⊔ l)
double-powerset-Poset l A =
poset-Large-Poset (double-powerset-Large-Poset A) l
double-powerset : (l3 : Level) → UU l1 → UU (l1 ⊔ lsuc l2 ⊔ lsuc l3)
double-powerset l3 A = type-Poset (double-powerset-Poset l3 A)
```
## Operations on the double powerset
### Intersections of subtypes of powersets
```agda
intersection-double-powerset :
{l1 l2 l3 : Level} {A : UU l1} →
double-powerset l2 l3 A → powerset (l1 ⊔ lsuc l2 ⊔ l3) A
intersection-double-powerset F a =
Π-Prop (type-subtype F) (λ X → inclusion-subtype F X a)
module _
{l1 l2 l3 : Level} {A : UU l1} (F : double-powerset l2 l3 A)
where
inclusion-intersection-double-powerset :
(X : type-subtype F) →
intersection-double-powerset F ⊆ inclusion-subtype F X
inclusion-intersection-double-powerset X a f = f X
universal-property-intersection-double-powerset :
{l : Level} (P : powerset l A)
(H : (X : type-subtype F) → P ⊆ inclusion-subtype F X) →
P ⊆ intersection-double-powerset F
universal-property-intersection-double-powerset P H a p X = H X a p
```
### Unions of subtypes of powersets
```agda
union-double-powerset :
{l1 l2 l3 : Level} {A : UU l1} →
double-powerset l2 l3 A → powerset (l1 ⊔ lsuc l2 ⊔ l3) A
union-double-powerset F a =
∃ (type-subtype F) (λ X → inclusion-subtype F X a)
module _
{l1 l2 l3 : Level} {A : UU l1} (F : double-powerset l2 l3 A)
where
type-union-double-powerset : UU (l1 ⊔ lsuc l2 ⊔ l3)
type-union-double-powerset = type-subtype (union-double-powerset F)
inclusion-union-double-powerset :
(X : type-subtype F) → inclusion-subtype F X ⊆ union-double-powerset F
inclusion-union-double-powerset X a = intro-exists X
universal-property-union-double-powerset :
{l : Level} (P : powerset l A)
(H : (X : type-subtype F) → inclusion-subtype F X ⊆ P) →
union-double-powerset F ⊆ P
universal-property-union-double-powerset P H a =
map-universal-property-trunc-Prop
( P a)
( λ X → H (pr1 X) a (pr2 X))
```