Martin Escardo. Notes originally written for the module Advanced Functional Programming of the University of Birmingham, UK.
The binary type 𝟚
This type can be defined to be 𝟙 ∔ 𝟙 using binary sums, but we give a direct definition
which will allow us to discuss some relationships between the various
type formers of Basic MLTT.
data 𝟚 : Type where 𝟎 𝟏 : 𝟚This type is not only isomorphic to
𝟙 ∔ 𝟙 but also to the type Bool of booleans. Its elimination
principle is as follows:
𝟚-elim : {A : 𝟚 → Type} → A 𝟎 → A 𝟏 → (x : 𝟚) → A x 𝟚-elim x₀ x₁ 𝟎 = x₀ 𝟚-elim x₀ x₁ 𝟏 = x₁In logical terms, this says that it order to show that a property
A of elements of the binary type 𝟚 holds for
all elements of the type 𝟚, it is enough to show that it
holds for 𝟎 and for 𝟏. The non-dependent
version of the eliminator is the following:
𝟚-nondep-elim : {A : Type} → A → A → 𝟚 → A 𝟚-nondep-elim {A} = 𝟚-elim {λ _ → A}
Notice that the non-dependent version is like
if-then-else, if we think of one of the elements of
A as true and the other as
false.
The dependent version generalizes the type of the non-dependent version, with the same definition of the function.