an algorithm is available that, given a bit string, decides whether it represents an element of the set.[^9] On the other hand, it may happen that no “global” information about the set is available; e.g.  it is algorithmically undecidable in general whether a given computable set is nonempty. A *mapping* between computable sets is *computable* if there is an algorithm computing its values.

We will need two particular cases of this principle – simplicial sets and chain complexes.

Simplicial sets {#simplicial-sets .unnumbered}
---------------

A *locally effective simplicial set* is a simplicial set $X$ whose simplices have a specified finite encoding and whose face and degeneracy operators are specified by algorithms. Our simplicial sets will be equipped with a simplicial *action* of a finite group $G$ that is also computed by an algorithm (whose input is an element of $G$ and a simplex of $X$). We will assume that this action is *free* and that a distinguished set of representatives of orbits is specified – we will call such $X$ *cellular*. In the locally effective context, we require that there is an algorithm that expresses each simplex $x\in X$ (in a unique way) as $x=ay$ where $a\in G$ and $y\in X$ 