# Discrete types
```agda
module foundation.discrete-types where
open import foundation-core.discrete-types public
```
<details><summary>Imports</summary>
```agda
open import foundation.apartness-relations
open import foundation.binary-relations
open import foundation.decidable-types
open import foundation.dependent-pair-types
open import foundation.negation
open import foundation.propositional-truncations
open import foundation.tight-apartness-relations
open import foundation.universe-levels
open import foundation-core.coproduct-types
open import foundation-core.identity-types
open import foundation-core.propositions
```
</details>
## Idea
A discrete type is a type that has decidable equality.
## Properties
### The apartness relation on a discrete type is negated equality
```agda
module _
{l : Level} (X : Discrete-Type l)
where
rel-apart-Discrete-Type : Relation-Prop l (type-Discrete-Type X)
rel-apart-Discrete-Type x y = neg-type-Prop (x = y)
apart-Discrete-Type : (x y : type-Discrete-Type X) → UU l
apart-Discrete-Type x y = type-Prop (rel-apart-Discrete-Type x y)
antireflexive-apart-Discrete-Type : is-antireflexive rel-apart-Discrete-Type
antireflexive-apart-Discrete-Type x r = r refl
symmetric-apart-Discrete-Type : is-symmetric apart-Discrete-Type
symmetric-apart-Discrete-Type x y H p = H (inv p)
cotransitive-apart-Discrete-Type : is-cotransitive rel-apart-Discrete-Type
cotransitive-apart-Discrete-Type x y z r
with has-decidable-equality-type-Discrete-Type X x z
... | inl refl = unit-trunc-Prop (inr (λ s → r (inv s)))
... | inr np = unit-trunc-Prop (inl np)
is-tight-apart-Discrete-Type :
is-tight rel-apart-Discrete-Type
is-tight-apart-Discrete-Type x y =
double-negation-elim-is-decidable
( has-decidable-equality-type-Discrete-Type X x y)
apartness-relation-Discrete-Type :
Apartness-Relation l (type-Discrete-Type X)
pr1 apartness-relation-Discrete-Type = rel-apart-Discrete-Type
pr1 (pr2 apartness-relation-Discrete-Type) = antireflexive-apart-Discrete-Type
pr1 (pr2 (pr2 apartness-relation-Discrete-Type)) =
symmetric-apart-Discrete-Type
pr2 (pr2 (pr2 apartness-relation-Discrete-Type)) =
cotransitive-apart-Discrete-Type
type-with-apartness-Discrete-Type : Type-With-Apartness l l
pr1 type-with-apartness-Discrete-Type = type-Discrete-Type X
pr2 type-with-apartness-Discrete-Type = apartness-relation-Discrete-Type
tight-apartness-relation-Discrete-Type :
Tight-Apartness-Relation l (type-Discrete-Type X)
pr1 tight-apartness-relation-Discrete-Type =
apartness-relation-Discrete-Type
pr2 tight-apartness-relation-Discrete-Type =
is-tight-apart-Discrete-Type
type-with-tight-apartness-Discrete-Type : Type-With-Tight-Apartness l l
pr1 type-with-tight-apartness-Discrete-Type =
type-with-apartness-Discrete-Type
pr2 type-with-tight-apartness-Discrete-Type =
is-tight-apart-Discrete-Type
```