1
------------------------------------------------------------------------
2
------------------------------------------------------------------------
6
open import Relation.Nullary
7
open import Relation.Binary
8
open import Relation.Binary.OrderMorphism
9
open import Data.Function
10
open import Data.List as L using (List)
11
open import Data.Product using (∃; _×_)
14
module Sets₁ (dto : DecTotalOrder zero zero zero) where
16
open DecTotalOrder dto public using (_≈_)
17
open DecTotalOrder dto hiding (_≈_)
23
abstract postulate decSetoid : DecSetoid _ _
26
<Set> = DecSetoid.Carrier decSetoid
28
_|≈|_ : Rel <Set> zero
29
_|≈|_ = DecSetoid._≈_ decSetoid
34
insert : Carrier → <Set> → <Set>
35
_∪_ : <Set> → <Set> → <Set>
36
_∈_ : Carrier → <Set> → Set
37
_∈?_ : (x : Carrier) → (s : <Set>) → Dec (x ∈ s)
38
toList : <Set> → List Carrier
41
prop-∈-insert₁ : ∀ {x y s} → x ≈ y → x ∈ insert y s
42
prop-∈-insert₂ : ∀ {x y s} → x ∈ s → x ∈ insert y s
43
prop-∈-insert₃ : ∀ {x y s} → ¬ x ≈ y → x ∈ insert y s → x ∈ s
45
prop-∈-empty : ∀ {x} → ¬ x ∈ empty
47
prop-∈-∪ : ∀ {x s₁ s₂} → x ∈ s₁ → x ∈ s₁ ∪ s₂
49
prop-∪₁ : ∀ {s₁ s₂} → s₁ ∪ s₂ |≈| s₂ ∪ s₁
50
prop-∪₂ : ∀ {s₁ s₂ s₃} → s₁ ∪ (s₂ ∪ s₃) |≈| (s₁ ∪ s₂) ∪ s₃
52
prop-∈-|≈| : ∀ {x} → (λ s → x ∈ s) Respects _|≈|_
53
prop-∈-≈ : ∀ {s} → (λ x → x ∈ s) Respects _≈_
55
-- TODO: Postulates for toList.
57
singleton : Carrier → <Set>
58
singleton x = insert x empty
60
⋃_ : List <Set> → <Set>
61
⋃_ = L.foldr _∪_ empty
63
fromList : List Carrier → <Set>
64
fromList = L.foldr insert empty
66
_⊆_ : <Set> → <Set> → Set
67
s₁ ⊆ s₂ = ∀ x → x ∈ s₁ → x ∈ s₂
70
open DecTotalOrder hiding (_≈_)
75
map : ∀ {do₁ do₂} → do₁ ⇒-DTO do₂ → <Set> do₁ → <Set> do₂
76
mapToSet : ∀ {do₁ do₂} →
77
(Carrier do₁ → <Set> do₂) →
80
prop-map-∈₁ : ∀ {do₁ do₂ f x s} →
82
fun f x ⟨ _∈_ do₂ ⟩ map f s
83
prop-map-∈₂ : ∀ {do₁ do₂ f y s} →
84
y ⟨ _∈_ do₂ ⟩ map f s →
85
∃ λ x → (fun f x ⟨ _≈_ do₂ ⟩ y) ×
88
prop-mapToSet₁ : ∀ {do₁ do₂ f x s} →
90
f x ⟨ _⊆_ do₂ ⟩ mapToSet f s
91
prop-mapToSet₂ : ∀ {do₁ do₂ f y s} →
92
y ⟨ _∈_ do₂ ⟩ mapToSet f s →
93
∃ λ x → (y ⟨ _∈_ do₂ ⟩ f x) ×