-- Σ type (also used as existential) and
-- cartesian product (also used as conjunction).
{-# OPTIONS --without-K --safe #-}
module Tools.Product where
infixr 4 _,_
infixr 2 _×_
-- Dependent pair type (aka dependent sum, Σ type).
record Σ (A : Set) (B : A → Set) : Set where
constructor _,_
field
proj₁ : A
proj₂ : B proj₁
open Σ public
-- Existential quantification.
∃ : {A : Set} → (A → Set) → Set
∃ = Σ _
∃₂ : {A : Set} {B : A → Set}
(C : (x : A) → B x → Set) → Set
∃₂ C = ∃ λ a → ∃ λ b → C a b
-- Cartesian product.
_×_ : (A B : Set) → Set
A × B = Σ A (λ x → B)