Normal algorithms are verbal, that is, intended to be applied to strings in different alphabets. The definition of any normal algorithm consists of two parts: the definition of the alphabet of the algorithm, and the definition of its scheme. The scheme of a normal algorithm is a finite ordered set of so-called substitution formulas, each of which can be simple or final. Simple substitution formulas are represented by strings of the form, where and are two arbitrary strings in the alphabet of the algorithm. Similarly, final substitution formulas are represented by strings of the form, where and are two arbitrary strings in the alphabet of the algorithm. This assumes that the auxiliary characters and do not belong to the alphabet of the algorithm. Here is an example of a normal algorithm scheme in the five-letter alphabet : The process of applying the normal algorithm to an arbitrary string in the alphabet of this algorithm is a discrete sequence of elementary steps, consisting of the following. Let’s assume that is the word obtained in the previous step of the algorithm. If of the substitution formulas there is no left-hand side which is included in the, then the algorithm terminates, and the result of its work is considered to be the string. Otherwise, the first of the substitution formulae whose left sides are included in is selected. If the substitution formula is of the form, then out of all of possible representations of the string of the form the one with the shortest is chosen. Then the algorithm terminates and the result of its work is considered to be. However, if this substitution formula is of the form, then out of all of the possible representations of the string of the form of the one with the shortest is chosen, after which the string is considered to be the result of the current step, subject to further processing in the next step. For example, the process of applying the algorithm described above to the word results in the sequence of words,,,,,,,,, and, after which the algorithm stops with the result. For other examples, see below. Any normal algorithm is equivalent to some Turing machine, and vice versaany Turing machine is equivalent to some normal algorithm. A version of the Church-Turing thesis formulated in relation to the normal algorithm is called the "principle of normalization." Normal algorithms have proved to be a convenient means for the construction of many sections of constructive mathematics. Moreover, inherent in the definition of a normal algorithm are a number of ideas used in programming languages aimed at handling symbolic informationfor example, in Refal.
Algorithm
The Rules are a sequence of pairs of strings, usually presented in the form of pattern → replacement. Each rule may be either ordinary or terminating. Given an input string:
Check the Rules in order from top to bottom to see whether any of the patterns can be found in the input string.
If none is found, the algorithm stops.
If one is found, use the first of them to replace the leftmost occurrence of matched text in the input string with its replacement.
If the rule just applied was a terminating one, the algorithm stops.
These rules give a more interesting example. They rewrite binary numbers to their unary counterparts. For example, 101 will be rewritten to a string of 5 consecutive bars.
Rules
"|0" -> "0||"
"1" -> "0|"
"0" -> ""
Symbol string
"101"
Execution
If the algorithm is applied to the above example, it will terminate after the following steps.