Source code on Github{-# OPTIONS --safe --no-import-sorts #-}
open import Axiom.Set
module Class.IsSet (th : Theory) where
open Theory th renaming (_∈_ to _∈ᵗ_; _∉_ to _∉ᵗ_)
import Axiom.Set.Rel th as Rel
open import Axiom.Set.Map th as Map
open import Axiom.Set.TotalMap th as TotalMap
open import Data.Product
open import abstract-set-theory.Prelude
private variable A B X : Type
record IsSet (A B : Type) : Type where
field
toSet : A → Set B
infix 4 _∈_ _∉_
_∈_ _∉_ : B → A → Type
a ∈ X = a ∈ᵗ (toSet X)
a ∉ X = a ∉ᵗ (toSet X)
open IsSet ⦃...⦄ public
infix 2 All-syntax
All-syntax : ∀ {A X} ⦃ _ : IsSet X A ⦄ → (A → Type) → X → Type
All-syntax P X = All P (toSet X)
syntax All-syntax (λ x → P) l = ∀[ x ∈ l ] P
infix 2 Ex-syntax
Ex-syntax : ∀ {A X} ⦃ _ : IsSet X A ⦄ → (A → Type) → X → Type
Ex-syntax P X = Any P (toSet X)
syntax Ex-syntax (λ x → P) l = ∃[ x ∈ l ] P
module _ ⦃ _ : IsSet X (A × B) ⦄ where
dom : X → Set A
dom = Rel.dom ∘ toSet
range : X → Set B
range = Rel.range ∘ toSet
instance
IsSet-Set : IsSet (Set A) A
IsSet-Set .toSet A = A
IsSet-Map : IsSet (Map A B) (A × B)
IsSet-Map .toSet = _ˢ
IsSet-TotalMap : IsSet (TotalMap A B) (A × B)
IsSet-TotalMap .toSet = TotalMap.rel