Documentation

PfsProgs25.Unit10.Listable

Listable typeclass #

This is a crude version of finite types. It is a typeclass that provides a list of all the elements of a type.

class Listable (α : Type u) :
  • elems : List α
  • elemsComplete (a : α) : a Listable.elems
Instances
    Equations
    def elemsList (α : Type u) [Listable α] :
    List α
    Equations
    Instances For
      theorem memElemList {α : Type u} [Listable α] (a : α) :
      instance prodListable {α β : Type u} [Listable α] [Listable β] :
      Listable (α × β)
      Equations
      • prodListable = { elems := let as := elemsList α; let bs := elemsList β; do let aas let bbs pure (a, b), elemsComplete := }

      Application of listable #

      Suppose α is Listable and f, g: α → ℕ are functions. Then we can decide (algorithmically) if f = g . This is impossible for α = ℕ and f, g arbitrary.

      Having decision procedures is captured by the Decidable typeclass. This gives a Boolean-valued function decide.

      def NatFns.f (n : ) :
      Equations
      Instances For
        def NatFns.g (n : ) :
        Equations
        Instances For
          def FinFns.f (n : Fin 5) :
          Equations
          Instances For
            def FinFns.g (n : Fin 5) :
            Equations
            Instances For

              We will use Listable to make a similar decision procedure.

              def List.decidableFunctionEqual {α β : Type} [DecidableEq β] (f g : αβ) (l : List α) :
              Decidable (∀ xl, f x = g x)
              Equations
              Instances For
                instance decidableEqFns_of_Listable {α β : Type} [Listable α] [DecidableEq β] (f g : αβ) :
                Decidable (f = g)
                Equations