module Sets.Indexed where open import Data.Empty using (⊥) open import Data.Unit using (⊤; tt) open import Data.Sum using (_⊎_; inj₁; inj₂) open import Data.Bool using (Bool; true; false) open import Data.Nat using (ℕ; zero; suc)
Fin, family of finite setsWe wish to define an ℕ-indexed family of sets Fin such that Fin n has exactly n elements.
Given the definition of Fin, the following equivalences would hold:
| n | Sets with n elements | 
|---|---|
| 0 | Fin 0~⊥ | 
| 1 | Fin 1~⊤~Maybe ⊥~⊤ ⊎ ⊥ | 
| 2 | Fin 2~Bool~Maybe ⊤~Maybe (Maybe ⊥)~⊤ ⊎ ⊤ ⊎ ⊥ | 
| 3 | Fin 3~Maybe Bool~Maybe (Maybe (Maybe ⊥))~⊤ ⊎ ⊤ ⊎ ⊤ ⊎ ⊥ | 
| 4 | Fin 4~Maybe (Maybe (Maybe (Maybe ⊥)))~⊤ ⊎ ⊤ ⊎ ⊤ ⊎ ⊤ ⊎ ⊥ | 
| ... | ... | 
FinFin is a set indexed with a natural number (we use Fin because this is not the final definition of Fin):
data Fin : ℕ → Set where zero : (n : ℕ) → Fin (suc n) suc : (n : ℕ) → Fin n → Fin (suc n)
The definition yields the statements
zero 0 : Fin 1
zero 1 : Fin 2
zero 2 : Fin 3
...
suc 1 (zero 0) : Fin 2
suc 2 (zero 1) : Fin 3
suc 3 (zero 2) : Fin 4
...
suc 2 (suc 1 (zero 0)) : Fin 3
suc 3 (suc 2 (zero 1)) : Fin 4
suc 4 (suc 3 (zero 2)) : Fin 5
...
...that could be rearranged as
zero 0 : Fin 1
zero 1 : Fin 2
suc 1 (zero 0) : Fin 2
zero 2 : Fin 3
suc 2 (zero 1) : Fin 3
suc 2 (suc 1 (zero 0)) : Fin 3
zero 3 : Fin 4
suc 3 (zero 2) : Fin 4
suc 3 (suc 2 (zero 1)) : Fin 4
suc 3 (suc 2 (suc 1 (zero 0))) : Fin 4
...So we can conclude that Fin n has n distinct elements.
Define a Bool-indexed family of sets such that the set indexed by false contains no elements and the set indexed by true contains one element.
Define an ℕ-indexed family of sets such that the sets indexed by even numbers contain one element and the others are empty!
Vec A n ~ AnVec A n is an n-tuple of elements of A:
data Vec (A : Set) : ℕ → Set where [] : Vec A zero cons : (n : ℕ) → A → Vec A n → Vec A (suc n)
Examples:
[] : Vec ℕ 0
[] : Vec Bool 0
...
cons 0 true [] : Vec Bool 1
...
cons 1 false (cons 0 true []) : Vec Bool 2
...
...Define a Bool-indexed family of sets with two parameters, A and B, such that the set indexed by false contains an A element and the set indexed by true contains a B element.