McCarthy (1960) described his formalism this way:1
In Marvin Minskys 1967 book Computation: Finite and Infinite Machines, § 10.7 Conditional Expressions: The McCarthy Formalism, he describes the "formalism" as follows:
Minsky uses the following operators in his demonstrations:2
From these he shows how to derive the predecessor function (i.e. DECREMENT); with this tool he derives the minimization operator necessary for "general" recursion, as well as primitive-recursive definitions.
In his 1952 Introduction of Meta-Mathematics Stephen Kleene provides a definition of what it means to be a primitive recursive function:
In other words, given a "basis" function (it can be a constant such as 0), primitive recursion uses either the base or the previous value of the function to produce the value of the function; primitive recursion is sometimes called mathematical induction
Minsky (above) is describing a two-CASE operator. A demonstration that the nested IF-THEN-ELSE—the "case statement" (or "switch statement")--is primitive recursive can be found in Kleene 1952:2294 at "#F ('mutually-exclusive predicates')". The CASE operator behaves like a logical multiplexer and is simply an extension of the simpler two-case logical operator sometimes called AND-OR-SELECT (see more at Propositional formula). The CASE operator for three cases would be verbally described as: "If X is CASE 1 then DO "p" else if X is CASE 2 then do "q" else if X is CASE "3" then do "r" else do "default".
Boolos-Burgess-Jeffrey 2002 observe that in a particular instance the CASE operator, or a sequence of nested IF-THEN-ELSE statements, must be both mutually exclusive, meaning that only one "case" holds (is true), and collectively exhaustive, meaning every possible situation or "case" is "covered". These requirements are a consequence of the determinacy of Propositional logic; the correct implementation requires the use of truth tables and Karnaugh maps to specify and simplify the cases; see more at Propositional formula. The authors point out the power of "definition by cases":
They prove, in particular, that the processes of substitution, graph relation (similar to the identity relation that plucks out (the value of) a particular variable from a list of variables), negation (logical NOT), conjunction (logical AND), disjunction (logical OR), bounded universal quantification, or bounded existential quantification can be used together with definition by cases to create new primitive recursive functions (cf Boolos-Burgess-Jeffrey 2002:74-77).
McCarthy 1960. - McCarthy, John (1960). "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". Communications of the ACM. 3 (4): 184–195. doi:10.1145/367177.367199. https://doi.org/10.1145%2F367177.367199 ↩
Minsky (1967) does not include the identity operator in his description of primitive recursive functions. Why this is the case is not known. /wiki/Primitive_recursive_function ↩
Various authors use various names for this operation. Kleene calls it: "the schema of definition by substitution. The expression for the ambiguous value of φ is obtained by substitution of expressions for the ambiguous values of χ1, . . ., χm for the variables of ψ . . .. the function φ defined by an application of this schema we sometimes write ast Smn(ψ, 1, . . ., χm." (Kleene 1952:220). Knuth names it the "all-important replacement operation (sometimes called assignment or substitution)", and he symbolizes it with the " ← " arrow, e.g. "m ← n" means the value of variable m is to be replaced by the current value of variable n" (cf Knuth 1973:3). ↩
Kleene's 5 primitive recursion "schema" include the following: zero constant: 0 or may be 0()successor: S(0) = "1", S(1) = "2", etc.projection: Uin(x1 , ..., xn) = xi, the xi's are "parameters" fixed throughout the calculation, and Uin project one of them out, the notation πin(x1, ..., xn) = xi is also used.substitution φ(x1 , ..., xn) = ψ(χ1(x1 , ..., xn), ..., χm(x1 , ..., xn))primitive recursion; cf Kleene 1952:219. ↩