 Primiero (2020) proposes a reading of the nature of algorithms at three different levels of abstraction. At a very high LoA, algorithms can be defined abstracting from the procedure they describe, allowing for many different sets of states and transitions. At this LoA algorithms can be understood as informal specifications, that is, as informal descriptions of a procedure P. At a lower LoA, algorithms specify the instructions needed to solve the given computational problem; in other words, they specify a procedure. Algorithms can thus be defined as procedures, or descriptions in some given formal language L of how to execute a procedure P. Many important properties of algorithms, including those related to complexity classes and data structures, cannot be determined at the procedural LoA, and instead make reference to an abstract machine implementing the procedure is needed. At a bottom LoA, algorithms can be defined as implementable abstract machines, viz. as the specification, in a formal language L, of the executions of a program P for a given abstract machine M. The threefold definition of algorithms allows Primiero (2020) to supply a formal definition of equivalence relations for algorithms in terms of the algebraic notions of simulation and bisimulation (Milner 1973, see also Angius and Primero 2018). A machine Mi executing a program Pi implements the same algorithm of a machine Mj executing a program Pj if and only if the abstract machines interpreting Mi and Mj are in a bisimulation relation.