Mathematica 13

Mathematica 13 DEFAULT

The Notation in Principia Mathematica

1. Why Learn the Symbolism in Principia Mathematica?

Principia Mathematica [PM] was written jointly by Alfred North Whitehead and Bertrand Russell over several years, and published in three volumes, which appeared between 1910 and 1913. It presents a system of symbolic logic and then turns to the foundations of mathematics to carry out the logicist project of defining mathematical notions in terms of logical notions and proving the fundamental axioms of mathematics as theorems of logic. While hugely important in the development of logic, philosophy of mathematics and more broadly of “Early Analytic Philosophy”, the work itself is no longer studied for these topics. As a result the very notation of the work has become alien to contemporary students of logic, and that has become a barrier to the study of Principia Mathematica. We include a series of definitions of notions such as transfinite cardinal numbers, well-orderings, rational and real numbers. These are defined differently in the theory of types of PM than than in axiomatic set theory.

This entry is intended to assist the student of PM in reading the symbolic portion of the work. What follows is a partial translation of the symbolism into a more contemporary notation, which should be familiar from other articles in this Encyclopedia, and which is quite standard in contemporary textbooks of symbolic logic. No complete algorithm is supplied, rather various suggestions are intended to help the reader learn the symbolism of PM. Many issues of interpretation would be prejudged by only using contemporary notation, and many details that are unique to PM depend on that notation. It will be seen below, with some of the more contentious aspects of the notation, that doctrines of substance are built into the notation of PM. Replacing the notation with a more modern symbolism would drastically alter the very content of the book.

2. Primitive Symbols of Mathematical Logic (Part I)

Below the reader will find, in the order in which they are introduced in PM, the following symbols, which are briefly described. More detail is provided in what follows:

pronounced “star”; indicates a number, or chapter, as in ∗1, or ∗20.
·a centered dot (an old British decimal point); indicates a numbered sentence in the order by first digit (all the 0s preceding all the 1s etc.), then second digit, and so on. The first definitions and propositions of ∗1 illustrate this “lexicographical” ordering: 1·01, 1·1, 1·11, 1·2, 1·3, 1·4, 1·5, 1·6, 1·7, 1·71, 1·72.
\(\vdash\)the assertion-sign; indicates an assertion, either an axiom (i.e., a primitive proposition, which are also annotated “\(\Pp\)”) or a theorem.
\(\Df\)the definition sign; follows a definition.
\(.\),   \(:\),   \(:.\),   \(::\),  etc.are dots used for delimiting punctuation; in contemporary logic, we use ( ), [ ], \(\{\ \}\), etc.
\(p, q, r\), etc.are propositional variables.
\(\lor\), \(\supset\), \(\osim\), \(\equiv\), \(\sdot\)are the familiar sentential connectives, corresponding to “or”, “if-then”, “not”, “if and only if” and “and”, respectively. [In the Second Edition of PM, 1925–27, the Sheffer Stroke “\(\mid\)” is the one primitive connective. It means “not bothand ___”.]
\(x, y, z\), etc.are individual variables, which are to be read with “typical ambiguity”, i.e., with their logical types to be filled in (see below).
\(a, b, c\), etc.are individual constants, and stand for individuals (of the lowest type). These occur only in the Introduction to PM, and not in the official system.
\(xRy, aRb, R(x)\), etc.are atomic predications, in which the objects named by the variables or constants stand in the relation \(R\) or have the property \(R\). These occur only in the Introduction. “\(a\)” and “\(b\)” occur as constants only in the Second Edition. The predications \(R(x), R(x,y)\), etc., are used only in the Second Edition.
\(\phi\), \(\psi\), \(\chi\), etc.,
and \(f, g\), etc.
are variables which range over propositional functions, no matter whether those functions are simple or complex.
\(\phi x\), \(\psi x\), \(\phi(x,y)\), atomic formulas in which both “\(x\)” and “\(\phi\)” are free. [An alternative interpretation is to view “\(\phi x\)” as a schematic letter standing for a formula in which the variable “\(x\)” is free.]
\(\hat{\phantom{x}}\)the circumflex; when placed over a variable in an open formula (as in “\(\phi \hat{x}\)”) results in a term for a function. [This matter is controversial. See Landini 1998.] When the circumflected variable precedes a complex variable, the result indicates a class, as in \(\hat{x}\phi x\).
\(\phi\hat{x}, \psi\hat{x}, \phi(\hat{x},\hat{z}),\) etc.Terms for propositional functions. Here are examples of such terms which are constants: “\(\hat{x}\) is happy”, “\(\hat{x}\) is bald and \(\hat{x}\) is happy”, “\(4 \lt \hat{x} \lt 6\)”, etc. If we apply, for example, the function “\(\hat{x}\) is bald and \(\hat{x}\) is happy” to the particular individual \(b\), the result is the proposition “\(b\) is bald and \(b\) is happy”.
\(\exists\) and ( )are the quantifiers “there exists” and “for all” (“every”), respectively. For example, where \(\phi x\) is a simple or complex open formula,
\((\exists x)\phi x\)asserts“there exists an \(x\) such that \(\phi x\)”
\((\exists \phi)\phi x\)asserts“there exists a propositional function \(\phi\) such that \(\phi x\)”
\((x)\phi x\)asserts“every \(x\) is such that \(\phi x\)”
\((\phi)\phi x\)asserts“every propositional function \(\phi\) is such that \(\phi x\)”

[These were used by Peano. More recently, \(\forall\) has been added for symmetry with \(\exists\). Some scholars see the quantfiers \((\phi)\) and \((\exists \phi\)) as substitutional.]

\(\phi x \supset_x \psi x\)
\(\phi x \equiv_x \psi x\)
This is notation that is used to abbreviate universally quantified variables. In modern notation, these become \(\forall x(\phi x \supset \psi x)\) and \(\forall x(\phi x \equiv \psi x)\), respectively. See the definitions for this notation at the end of Section 3.2 below.
\(\bang\)pronounced “shriek”; indicates that a function is predicative, as in \(\phi \bang x\) or \(\phi\bang \hat{x}\). See Section 7.
=the identity symbol; expresses identity, which is a defined notion in PM, not primitive as in contemporary logic.
\(\atoi\)read as “the”; is the inverted iota or description operator and is used in expressions for definite descriptions, such as \((\atoi x)\phi x\) (which is read: the \(x\) such that \(\phi x\)).
[\((\atoi x)\phi x\)]a definite description in brackets; this is a scope indicator for definite descriptions.
\(E\bang\) is defined at ∗14·02, in the context \(E\bang (\atoi x)\phi x\), to mean that the description \((\atoi x)\phi x\) is proper, i.e., there is exactly one \(\phi\).
\(\exists\bang\)is defined at ∗24·03, in the context \(\exists \bang \alpha\), to mean that the class \(\alpha\) is non-empty, i.e., has a member.

3. The Use of Dots for Punctuation

An immediate obstacle to reading PM is the unfamiliar use of dots for punctuation, instead of the more common parentheses and brackets. The system is precise, and can be learned with just a little practice. The use of dots for punctuation is not unique to PM. Originating with Peano, it was later used in works by Alonzo Church, W.V.O. Quine, and others, but it has now largely disappeared. (The use of dots of some historical interest, as Alan Turing made a study of the use of dots from a computational point of view in 1942, presumably in his spare time after a day's work at Bletchley Park breaking the codes of the Enigma Machine.) The best way to learn to use it is to look at a few samples which are translated to formulae using parentheses, and thus to get the feel for it. What follows is an explanation as presented in PM, pages 9–10, followed by a number of examples which illustrate each of its clauses:

The use of dots. Dots on the line of the symbols have two uses, one to bracket off propositions, the other to indicate the logical product of two propositions. Dots immediately preceded or followed by “\(\lor\)” or “\(\supset\)” or “\(\equiv\)” or “\(\vdash\)”, or by “\((x)\)”, “\((x,y)\)”, “\((x,y,z)\)” … or “\((\exists x)\)”, “\((\exists x,y)\)”, “\((\exists x,y,z)\)” … or “\([(\atoi x)(\phi x)]\)” or “\([R‘y]\)” or analogous expressions, serve to bracket off a proposition; dots occurring otherwise serve to mark a logical product. The general principle is that a larger number of dots indicates an outside bracket, a smaller number indicates an inside bracket. The exact rule as to the scope of the bracket indicated by dots is arrived at by dividing the occurrences of dots into three groups which we will name I, II, and III. Group I consists of dots adjoining a sign of implication \((\supset)\) or equivalence \((\equiv)\) or of disjunction \(\lor)\) or of equality by definition \((=\Df)\). Group II consists of dots following brackets indicative of an apparent variable, such as \((x)\) or \((x,y)\) or \((\exists x)\) or \((\exists x,y)\) or \([(\atoi x)(\phi x)]\) or analogous expressions. Group III consists of dots which stand between propositions in order to indicate a logical product. Group I is of greater force than Group II, and Group II than Group III. The scope of the bracket indicated by any collection of dots extends backwards or forwards beyond any smaller number of dots, or any equal number from a group of less force, until we reach either the end of the asserted proposition or a greater number of dots or an equal number belonging to a group of equal or superior force. Dots indicating a logical product have a scope which works both backwards and forwards; other dots only work away from the adjacent sign of disjunction, implication, or equivalence, or forward from the adjacent symbol of one of the other kinds enumerated in Group II. Some examples will serve to illustrate the use of dots. (PM, 9–10)

3.1 Some Basic Examples

Consider the following series of extended examples, in which we examine propositions in PM and then discuss how to translate them step by step into modern notation. (Symbols below are sometimes used as names for themselves, thus avoiding some otherwise needed quotation marks. Russell is often accused of confusing use and mention, so there may well be some danger in this practice.)

Example 1

\[\tag*{∗1·2} {\vdash} \colon p \lor p \ldot {\supset} \ldot p \quad\Pp \]

This is the second assertion of “star” 1. It is in fact an axiom or “Primitive Proposition” as indicated by the ‘\(\Pp\)’. That this is an assertion (axiom or theorem) and not a definition is indicated by the use of “\(\vdash\)”. (By contrast, a definition would omit the assertion sign but conclude with a “\(\Df\)” sign.) Now the first step in the process of translating ∗1·2 into modern notation is to note the colon. Recall, from the above quoted passage, that “a larger number of dots indicates an outside bracket, a smaller number indicates an inside bracket”. Thus, the colon here (which consists of a larger number of dots than the single dots occurring on the line in ∗1·2) represents an outside bracket. So, the first step is to translate ∗1·2 to:

\[ \vdash[ p \lor p \ldot {\supset} \ldot p] \]

So the brackets “[” and “]” represent the colon in ∗1·2. The scope of the colon thus extends past any smaller number of dots (i.e., one dot) to the end of the formula. Since formulas are read from left to right the expression “past” means “to the right of”.

Next, the dots around the “\(\supset\)” are represented in modern notation by the parenthesis around the antecedent and consequent. Recall, in the above passage, we find “… dots only work away from the adjacent sign of disjunction, implication, or equivalence …”. Thus, the next step in the translation process is to move to the formula: \[ \vdash [(p \lor p) \supset(p)] \]

Finally, standard modern conventions allow us to delete the outer brackets and the parentheses around single letters, yielding:

\[ \vdash(p \lor p) \supset p \]

Our next example involves conjunction, which is indicated by simple juxtaposition of atomic sentences, or with a dot when a substitution instance might be considered, as in the definition of conjunction in the following:

Example 2

\[ \tag*{∗3·01} p \sdot q \ldot {=} \ldot \osim(\osim p \lor \osim q) \quad\Df \]

Here we have a case in which dots occur indicate both a “logical product” (i.e., conjunction) and delimiting brackets. As a first step in translating ∗3·01 into modern notation, we replace the first dot by an ampersand (and its corresponding scope delimiters) and replace “\(\ldot {=} \ldot\)” by “\(=_{df}\)”, to yield:

\[ (p \amp q) =_{df} [\osim (\osim p \lor \osim q)] \]

The above step clearly illustrates how a “dot indicating a logical product has a scope which works both backwards and forwards”. Note that the first dot in ∗3·01, i.e., between the \(p\) and \(q\), is really optional, given the above quotation from PM. However, since we may sometimes want to substitute entire formulas for \(p\) and \(q\), the dot indicates the extent of the substituted formulas. Thus, we might have, as a substitution instance: \(r \lor s \sdot q \supset s\) (in PM notation) or \((r \lor s) \amp(q \supset s)\) (in contemporary symbols).

Finally, our modern conventions allow us to eliminate the outer parentheses from the definiendum and the brackets “[” and “]” from the definiens, yielding:

\[ p \amp q =_{df} \osim (\osim p \lor \osim q) \]

Notice that the scope of the negation sign “\(\osim\)” in ∗3·01 is not indicated with dots, even in the PM system, but rather requires parentheses.

Example 3

\[ \tag*{∗9·01} \osim \{(x) \sdot \phi x\} \ldot {=} \ldot (\exists x) \sdot \osim \phi x \quad\Df \]

If we apply the rule “dots only work away from the adjacent sign of disjunction, implication, or equivalence, or forward from the adjacent symbol of one of the other kinds enumerated in Group II” (where Group II includes “\((\exists x)\)”), then the modern equivalent would be: \[ \osim (x)\phi x =_{df} (\exists x)\osim \phi x \] or \[ \osim \forall x\phi x =_{df} \exists x\osim \phi x \]

3.2 The Force of Connectives

The ranking of connectives in terms of relative “force”, or scope, is a standard convention in contemporary logic. If there are no explicit parentheses to indicate the scope of a connective those which have precedence in the ranking are presumed to be the principal connective, and so on for subformulas. Thus, instead formulating the following DeMorgan’s law as the cumbersome:

\[ [(\osim p) \lor (\osim q)] \equiv[\osim (p \amp q)] \]

we nowadays write it as:

\[ \osim p \lor \osim q \equiv\osim (p \amp q) \]

This simpler formulation is natural because \(\equiv\) takes precedence over (has wider “scope” than) \(\lor\) and &, and the latter take precedence over \(\osim\). Indeed parentheses are often unneeded around \(\equiv\), given a further convention on which \(\equiv\) takes precedence over \(\supset\). Thus, the formula \(p \supset q \equiv\osim p\lor q\) becomes unambiguous. We might represent these conventions by listing the connectives in groups with those with widest scope at the top:

\[\begin{array}{c} \equiv \\ \supset \\ \amp, \lor \\ \osim \end{array}\]

For Whitehead and Russell, however, the symbols \(\supset\), \(\equiv\), \(\lor\) and \(\ldots =\ldots \Df\), in Group I, are of equal force. Group II consists of the variable binding expressions, quantifiers and scope indicators for definite descriptions, and Group III consists of conjunctions. Negation is below all of these. So the ranking in PM would be:

\[\begin{array}{c} \supset, \equiv, \lor \text{ and } \ldots =\ldots \quad\Df \\ (x), (x,y) \ldots (\exists x), (\exists x,y) \ldots [(\atoi x)\phi x] \\ p \sdot q \quad \text{(conjunction)} \\ \osim \end{array}\]

This is what Whitehead and Russell seem to mean when they say “Group I is of greater force than Group II, and Group II than Group III.” Consider the following:

Example 4

\[ \tag*{∗3·12} {\vdash} \colon \osim p \ldot {\lor} \ldot \osim q \ldot {\lor} \ldot p \sdot q \]

This theorem illustrates how to read multiple uses of the same number of dots within one formula. Grouping “associates to the left” both for dots and for a series of disjunctions, following the convention of reading from left to right and the definition:

\[ \tag*{∗2·33} p \vee q \vee r \ldot {=} \ldot (p \vee q) \vee r \quad\Df \]

So, in ∗3·12, the first two dots around the \(\lor\) simply “work away” from the connective. The second “extends” until it meets with the next of the same number (the third single dot). That third dot, and the fourth “work away” from the second \(\lor\), and the final dot indicates a conjunction with narrowest scope. The result, formulated with all possible punctuation for maximum explicitness, is:

\[ \{[(\osim p) \lor (\osim q)] \lor (p \amp q)\} \]

If we employ all the standard conventions for dropping parentheses, this becomes:

\[ (\osim p \lor \osim q) \lor (p \amp q) \]

This illustrates the passage in the above quotation which says “The scope of the bracket indicated by any collection of dots extends backwards or forwards beyond any smaller number of dots, or any equal number from a group of less force, until we reach either the end of the asserted proposition or a greater number of dots or an equal number belonging to a group of equal or superior force.”

Before we look at a wider range of examples, a detailed example involving quantified variables will prove to be instructive. Whitehead and Russell follow Peano’s practice of expressing universally quantified conditionals (such as “All \(\phi\)s are \(\psi\)s”) with the bound variable subscripted under the conditional sign. Similarly with universally quantified biconditionals (“All and only \(\phi\)s are \(\psi\)s”). That is, the expressions “\(\phi x \supset_x \psi x\)” and “\(\phi x \equiv_x \psi x\)” are defined as follows:

\[ \tag*{∗10·02} \phi x \supset_x \psi x \ldot {=} \ldot (x) \ldot \phi x \supset \psi x \quad\Df \] \[ \tag*{∗10·03} \phi x \equiv_x \psi x \ldot {=} \ldot (x) \ldot \phi x \equiv \psi x \quad\Df \]

and correspond to the following more modern formulas, respectively:

\[ \forall x(\phi x \supset \psi x) \] \[ \forall x(\phi x \equiv \psi x) \]

As an exercise the reader might be inclined to formulate a rigorous algorithm for converting PM into a particular contemporary symbolism (with conventions for dropping parentheses), but the best way to learn the system is to look over a few more examples of translations, and then simply begin to read formulae directly.

3.3 More Examples

In the examples below, each formula number is followed first by Principia notation and then its modern translation. Notice that in ∗1·5 parentheses are used for punctuation in addition to dots. (Primitive Propositions ∗1·2, ∗1·3, ∗1·4, ∗1·5, and ∗1·6 together constitute the axioms for propositional logic in PM.) Proposition ∗1·5 was shown to be redundant by Paul Bernays in 1926. It can be derived from appropriate instances of the others and the rule of modus ponens.

∗1·3\({\vdash} \colon q \ldot {\supset} \ldot p \lor q \quad\Pp\)
\(q \supset p \lor q\)
∗1·4\({\vdash} \colon p \lor q \ldot {\supset} \ldot q \lor p \quad\Pp\)
\(p \lor q \supset q \lor p\)
∗1·5\({\vdash} \colon p \lor (q \lor r ) \ldot {\supset} \ldot q \lor (p \lor r ) \quad\Pp\)
\(p \lor (q \lor r ) \supset q \lor (p \lor r )\)
∗1·6\({\vdash} \colondot q \supset r \ldot {\supset} \colon p \lor q \ldot {\supset} \ldot p \lor r \quad\Pp\)
\((q \supset r ) \supset(p \lor q \supset p \lor r )\)
∗2·03\({\vdash} \colon p \supset \osim q \ldot {\supset} \ldot q \supset\osim p\)
\((p \supset\osim q) \supset(q \supset\osim p)\)
∗3·3\({\vdash} \colondot p \sdot q \ldot {\supset} \ldot r \colon {\supset} \colon p \ldot {\supset} \ldot q \supset r\)
\([(p \amp q) \supset r] \supset [p \supset(q \supset r)]\)
∗4·15\({\vdash} \colondot p \sdot q \ldot {\supset} \ldot \osim r \colon {\equiv} \colon q \sdot r \ldot {\supset} \ldot \osim p\)
\(p \amp q \supset\osim r \equiv q \amp r \supset\osim p\)
∗5·71\({\vdash} \colondot q \supset\osim r \ldot {\supset} \colon p \lor q \sdot r \ldot {\equiv} \ldot p \sdot r\)
\((q \supset\osim r) \supset [(p \lor q) \amp r \equiv p \amp r]\)
∗9·04\(p \ldot {\lor} \ldot (x) \ldot \phi x \colon {=} \ldot (x) \ldot \phi x \lor p \quad\Df\)
\(p \lor \forall x\phi x =_{df} \forall x(\phi x \lor p)\)
∗9·521\({\vdash} \colons (\exists x) \ldot \phi x \ldot {\supset} \ldot q \colon {\supset} \colondot (\exists x) \ldot \phi x \ldot {\lor} \ldot r \colon {\supset} \ldot q \lor r\)
[\((\exists x\phi x) \supset q] \supset [((\exists x\phi x) \lor r) \supset (q \lor r)\)]
∗10·55\({\vdash} \colondot (\exists x) \ldot \phi x \sdot \psi x \colon \phi x \supset_x \psi x \colon {\equiv} \colon (\exists x) \ldot \phi x \colon \phi x \supset_x \psi x\)
\(\exists x(\phi x \amp \psi x) \amp \forall x(\phi x \supset \psi x) \equiv \exists x\phi x \amp \forall x(\phi x \supset \psi x)\)

4. Propositional Functions

There are two kinds of functions in PM. Propositional functions such as “\(\hat{x}\) is a natural number” are to be distinguished from the more familiar mathematical functions, which are called “descriptive functions” (PM, Chapter \(\ast\)31). Descriptive functions are defined using relations and definite descriptions. Examples of descriptive functions are \(x + y\) and “the successor of \(n\)”.

Focusing on propositional functions, Whitehead and Russell distinguish between expressions with a free variable (such as “\(x\) is hurt”) and names of functions (such as “\(\hat{x}\) is hurt”) (PM, 14–15). The propositions which result from the formula by assigning allowable values to the free variable “x” are said to be the “ambiguous values” of the function. Expressions using the circumflex notation, such as \(\phi \hat{x}\) only occur in the introductory material in the technical sections of PM and not in the technical sections themselves (with the exception of the sections on the theory of classes), prompting some scholars to say that such expressions do not really occur in the formal system of PM. This issue is distinct from that surrounding the interpretation of such symbols. Are they “term-forming operators” which turn an open formula into a name for a function, or simply a syntactic device, a placeholder, for indicating the variable for which a substitution can made in an open formula? If they are to be treated as term-forming operators, the modern notation for \(\phi \hat{x}\) would be “\(\lambda x\phi x\)”. The \(\lambda\)-notation has the advantage of clearly revealing that the variable \(x\) is bound by the term-forming operator \(\lambda\), which takes a predicate \(\phi\) and yields a term \(\lambda x\phi x\) (which in some logics is a singular term that can occur in the subject position of a sentence, while in other logics is a complex predicative expression). Unlike \(\lambda\)-notation, the PM notation using the circumflex cannot indicate scope. The function expression “\(\phi(\hat{x},\hat{z}\))” is ambiguous between “\(\lambda x\lambda y\phi xy\)” and “\(\lambda y\lambda x\phi xy\)”, without some further convention. Indeed, Whitehead and Russell specified this convention for relations in extension (on p. 200 in the introductory material of ∗21, in terms of the order of the variables), but the ambiguity it brought out most clearly by using \(\lambda\) notation: the first denotes the relation of being an \(x\) and \(y\) such that \(\phi xy\) and the second denotes the converse relation of being a \(y\) and \(x\) such that \(\phi xy\).

5. The Missing Notation for Types and Orders

This section explains notation that is not in Principia Mathematica. Except for some notation for “relative” types in \(\ast 63\), and again in early parts of Volume II, there are famously no symbols for types in Principia Mathematica! Sentences are generally to be taken as “typically ambiguous” and so standing for expressions of a whole range of types and so just as there are no individual or predicate constants, there are no particular functions of any specific type. So not only does one not see how to symbolize the argument:

All men are mortal
Socrates is a man
Therefore, Socrates is mortal

but also there is no indication of the logical type of the function “\(\hat{x}\) is mortal”. The project of PM is to reduce mathematics to logic, and part of the view of logic behind this project is that logical truths are all completely general. The derivation of truths of mathematics from definitions and truths of logic will thus not involve any particular constants other than those introduced by definition from purely logical notion. As a result no notation is included in PM for describing those types. Those of us who wish to consider PM as a logic which can be applied, must supplement it with some indication of types.

Readers should note that the explanation of types outlined below is not going to correspond with the statements about types in the text of PM. Alonzo Church [1976] developed a simple, rational reconstruction of the notation for both the simple and ramified theory of types as implied by the text of PM. (There are alternative, equivalent notations for the theory of types.) The full theory can be seen as a development of the simple theory of types.

5.1 Simple Types

A definition of the simple types can be given as follows:

  • \(\iota\) (Greek iota) is the type for an individual.
  • Where \(\tau_1,\ldots,\tau_n\) are any types, then \(\ulcorner(\tau_1,\ldots,\tau_n)\urcorner\) is the type of a propositional function whose arguments are of types \(\tau_1,\ldots,\tau_n\), respectively.
  • \(\ulcorner\)( )\(\urcorner\) is the type of propositions.

Here are some intuitive ways to understand the definition of type. Suppose that “Socrates” names an individual. (We are here ignoring Russell’s considered opinion that such ordinary individuals are in fact classes of classes of sense data, and so of a much higher type.) Then the individual constant “Socrates” would be of type \(\iota\). A monadic propositional function which takes individuals as arguments is of type \((\iota)\). Suppose that “is mortal” is a predicate expressing such a function. The function “\(\hat{x}\) is mortal” will also be of type \((\iota)\). A two-place or binary relation between individuals is of type \((\iota,\iota)\). Thus, a relation expression like “parent of” and the function “\(\hat{x}\) is a parent of \(\hat{z}\)” will be of type \((\iota,\iota)\).

Propositional functions of type \((\iota)\) are often called “first order”; hence the name “first order logic” for the familiar logic where the variables only range over arguments of first order functions. A monadic function of arguments of type \(\tau\) are of type \((\tau)\) and so functions of such functions are of type \(((\tau))\). “Second order logic” will have variables for the arguments of such functions (as well as variables for individuals). Binary relations between functions of type \(\tau\) are of type \((\tau,\tau)\), and so on, for relations of having more than 2 arguments. Mixed types are defined by the above. A relation between an individual and a proposition (such as “\(\hat{x}\) believes that \(\hat{P}\)”) will be of type \((\iota\),( )).

5.2 Ramified Types

To construct a notation for the full ramified theory of types of PM, another piece of information must be encoded in the symbols. Church calls the resulting system one of r-types. The key idea of ramified types is that any function defined using quantification over functions of some given type has to be of a higher “order” than those functions. To use Russell’s example:

\(\hat{x}\) has all the qualities that great generals have

is a function true of persons (i.e., individuals), and from the point of view of simple type theory, it has the same simple logical type as particular qualities of individuals (such as bravery and decisiveness). However, in ramified type theory, the above function will be of a higher order than those particular qualities of individuals, since unlike those particular qualities, it involves a quantification over those qualities. So, whereas the expression “\(\hat{x}\) is brave” denotes a function of r-type \((\iota)/1\), the expression “\(\hat{x}\) has all the qualities that great generals have” will have r-type \((\iota)/2\). In these r-types, the number after the “/” indicates the level of the function. The order of the functions will be defined and computed given the following definitions.

Church defines the r-types as follows:

  • \(\iota\) (Greek iota) is the r-type for an individual.
  • Where \(\tau_1,\ldots,\tau_m\) are any r-types, \(\ulcorner(\tau_1,\ldots,\tau_m)/n\urcorner\) is an r-type; this is the r-type of a \(m\)-ary propositional function of level \(n\), which has arguments of r-types \(\tau_1,\ldots,\tau_m\).

The order of an entity is defined as follows (here we no longer follow Church, for he defines orders for variables, i.e., expressions, instead of orders for the things the variables range over):

  • the order of an individual (of r-type \(\iota)\) is 0,
  • the order of a function of r-type \((\tau_1,\ldots,\tau_m)/n\) is \(n+N\), where \(N\) is the greatest of the order of the arguments \(\tau_1,\ldots,\tau_m\).

These two definitions are supplemented with a principle which identifies the levels of particular defined functions, namely, that the level of a defined function should be one higher than the highest order entity having a name or variable that appears in the definition of that function.

To see how these definitions and principles can be used to compute the order of the function “\(\hat{x}\) has all the qualities that great generals have”, note that the function can be represented as follows, where “\(x, y\)” are variables ranging over individuals of r-type \(\iota\) (order 0), “GreatGeneral\((y)\)” is a predicate denoting a propositional function of r-type \((\iota)/1\) (and so of order 1), and “\(\phi\)” is a variable ranging over propositional functions of r-type \((\iota)/1\) (and so of order 1) such as great general, bravery, leadership, skill, foresight, etc.:

\[ (\phi)\{[(y)(\textrm{GreatGeneral}(y) \supset \phi(y)] \supset \phi \hat{x} \} \]

We first note that given the above principle, the r-type of this function is \((\iota)/2\); the level is 2 because the level of the r-type of this function has to be one higher than the highest order of any entity named (or in the range of a variable used) in the definition. In this case, the denotation of GreatGeneral, and the range of the variable “\(\phi\)”, is of order 1, and no other expression names or ranges over an entity of higher order. Thus, the level of the function named above is defined to be 2. Finally, we compute the order of the function denoted above as it was defined: the sum of the level plus the greatest of the orders of the arguments of the above function. Since the only arguments in the above function are individuals (of order 0), the order of our function is just 2.

Quantifying over functions of r-type \((\tau)/n\) of order \(k\) in a definition of a new function yields a function of r-type \((\tau)/n+1\), and so a function of order one higher, \(k+1\). Two kinds of functions, then, can be of the second order: (1) functions of first-order functions of individuals, of r-type \(((\iota)/1)/1\), and (2) functions of r-type \((\iota)/2\), such as our example “\(\hat{x}\) has all the qualities that great generals have”. This latter will be a function true of individuals such as Napoleon, but of a higher order than simple functions such as “\(\hat{x}\) is brave”, which are of r-type \((\iota)/1\).

Logicians today use a different notion of “order”. Today, first-order logic is a logic with only variables for individuals. Second order logic is a logic with variables for both individuals and properties of individuals. Third-order logic is a logic with variables for individuals, properties of individuals, and properties of properties of individuals. And so forth. By contrast, Church would call these logics, respectively, the logic of functions of the types \((\iota)/1\) and \((\iota,\ldots,\iota)/1\), the logic of functions of the types \(((\iota)/1)/1\) and \(((\iota,\ldots,\iota)/1,\ldots,(\iota,\ldots,\iota)/1)/1\), and the logic of functions of the types \((((\iota)/1)/1)/1\) etc. (i.e., the level-one functions of the functions of the preceding type). Given Church’s definitions, these are logics of first-, second- and third-order functions, respectively, thus coinciding with the modern terminology of “\(n\)th-order logic”.

6. Variables

As mentioned previously, there are no individual or predicate constants in the formal system of PM, only variables. The Introduction, however, makes use of the example “\(a\) standing in the relation \(R\) to \(b\)” in a discussion of atomic facts (PM, 43). Although “\(R\)” is later used as a variable that ranges over relations in extension, and “\(a,b,c,\ldots\)” are individual variables, let us temporarily add them to the system as predicate and individual constants, respectively, in order to discuss the use of variables in PM.

PM makes special use of the distinction between “real”, or free, variables and “apparent”, or bound, variables. Since “\(x\)” is a variable, “\(xRy\)” will be an atomic formula in our extended language, with “\(x\)” and “\(y\)” real variables. When such formulae are combined with the propositional connectives \(\osim\), \(\lor\), etc., the result is a matrix. For example, “\(aRx \ldot {\lor} \ldot xRy\)” would be a matrix.

As we saw earlier, there are also variables which range over functions: “\(\phi\), \(\psi\), \(\ldots,f, g\)”, etc. The expression “\(\phi x\)” thus contains two variables and stands for a proposition, in particular, the result of applying the function \(\phi\) to the individual \(x\).

Theorems are stated with real variables, which gives them a special significance with regard to the theory. For example,

\[ \tag*{∗10·1} \vdash \colon (x) \ldot \phi x \ldot {\supset} \ldot \phi y \quad\Pp \]

is a fundamental axiom of the quantificational theory of PM. In this Primitive Proposition the variables “\(\phi\)” and “\(y\)” are real (free), and the “\(x\)” is apparent (bound). As there are no constants in the system, this is the closest that PM comes to a rule of universal instantiation.

Whitehead and Russell interpret “\((x) \sdot \phi x\)” as “the proposition which asserts all the values for \(\phi \hat{x}\)” (PM 41). The use of the word “all” has special significance within the theory of types. They present the “vicious circle principle”, which underlies the theory of types, as asserting that

… generally, given any set of objects such that, if we suppose the set to have a total, it will contain members which presuppose this total, then such as set cannot have a total. By saying that the set has “no total”, we mean, primarily, that no significant statement can be made about “all its members”. (PM, 37)

Specifically, then, a quantified expression, since it talks about “all” the members of a totality, must range over a specific logical type in order to observe the vicious circle principle. Thus, when interpreting a bound variable, we must assume that it ranges over a specific type of entity, and so types must be assigned to the other entities represented by expressions in the formula, in observance with the theory of types.

A question arises, however, once one realizes that the statements of primitive propositions and theorems in PM such as ∗10·1 are taken to be “typically ambiguous” (i.e., ambiguous with respect to type). These statements are actually schematic and represent all the possible specific assertions which can be derived from them by interpreting types appropriately. But if statements like ∗10·1 are schemata and yet have bound variables, how do we assign types to the entities over which the bound variables range? The answer is to first decide which type of thing the free variables in the statement range over. For example, assuming that the variable \(y\) in ∗10·1 ranges over individuals (of type \(\iota)\), then the variable \(\phi\) must range over functions of type \((\iota)/n\), for some \(n\). Then the bound variable \(x\) will also range over individuals. If, however, we assume that the variable \(y\) in ∗10·1 ranges over functions of type \((\iota)/1\), then the variable \(\phi\) must range over functions of type \(((\iota)/1)/m\), for some \(m\). In this case, the bound variable \(x\) will range over functions of type \((\iota)/1\).

So \(y\) and \(\phi\) are called “real” variables in ∗10·1 not only because they are free but also because they can range over any type. Whitehead and Russell frequently say that real variables are taken to ambiguously denote “any” of their instances, while bound variables (which also ambiguously denote) range over “all” of their instances (within a legitimate totality, i.e. type).

7. Predicative Functions and Identity

The exclamation mark “!” following a variable for a function and preceding the argument, as in “\(f\bang \hat{x}\)”, “\(\phi \bang x\)”, “\(\phi\bang \hat{x}\)”, indicates that the function is predicative, that is, of the lowest order which can apply to its arguments. In Church’s notation, this means that predicative functions are all of the first level, with types of the form \((\ldots)/1\). As a result, predicative functions will be of order one more than the highest order of any of their arguments. This analysis is based on quotations like the following, in the Introduction to PM:

We will define a function of one variable as predicative when it is of the next order above that of its argument, i.e., of the lowest order compatible with its having that argument. (PM, 53)

Unfortunately in the summary of ∗12, we find “A predicative function is one which contains no apparent variables, i.e., is a matrix” [PM, 167]. Reconciling this statement with that definition in the Introduction is a problem for scholars.

To see the shriek notation in action, consider the following definition of identity:

\[ \tag*{∗13·01} x = y \ldot {=} \colon (\phi) \colon \phi \bang x \ldot {\supset} \ldot \phi \bang y \quad\Df \]

That is, \(x\) is identical with \(y\) if and only if \(y\) has every predicative function \(\phi\) which is possessed by \(x\). (Of course the second occurrence of “=” indicates a definition, and does not independently have meaning. It is the first occurrence, relating individuals \(x\) and \(y\), which is defined.)

To see how this definition reduces to the more familiar definition of identity (on which objects are identical iff they share the same properties), we need the Axiom of Reducibility. The Axiom of Reducibility states that for any function there is an equivalent function (i.e., one true of all the same arguments) which is predicative:

Axiom of Reducibility: \[ \tag*{∗12·1} \vdash \colon (\exists f) \colon \phi x \ldot {\equiv_x} \ldot f\bang x \quad\Pp \]

To see how this axiom implies the more familiar definition of identity, note that the more familiar definition of identity is:

\[ x = y \ldot {=} \colon (\phi) \colon \phi x \ldot {\supset} \ldot \phi y \quad\Df \]

for \(\phi\) of “any” type. (Note that this differs from ∗13·01 in that the shriek no longer appears.) Now to prove this, assume both ∗13·01 and the Axiom of Reducibility, and suppose, for proof by reductio, that \(x = y\), and \(\phi x\), and not \(\phi y\), for some function \(\phi\) of arbitrary type. Then, the Axiom of Reducibility ∗12·1 guarantees that there will be a predicative function \(\psi \bang\), which is coextensive with \(\phi\) such that \(\psi \bang x\) but not \(\psi \bang y\), which contradicts ∗13·01.

8. Definite Descriptions

The inverted Greek letter iota “\(\atoi\)” is used in PM, always followed by a variable, to begin a definite description. \((\atoi x) \phi x\) is read as “the \(x\) such that \(x\) is \(\phi\)”, or more simply, as “the \(\phi\)”. Such expressions may occur in subject position, as in \(\psi(\atoi x) \phi x\), read as “the \(\phi\) is \(\psi\)”. The formal part of Russell’s famous “theory of definite descriptions” consists of a definition of all formulas “…\(\psi(\atoi x) \phi x\)…” in which a description occurs. To distinguish the portion \(\psi\) from the rest of a larger sentence (indicated by the ellipses above) in which the expression \(\psi(\atoi x) \phi x\) occurs, the scope of the description is indicated by repeating the definite description within brackets:

\[ [(\atoi x) \phi x] \sdot \psi(\atoi x) \phi x \]

The notion of scope is meant to explain a distinction which Russell famously discusses in “On Denoting” (1905). Russell says that the sentence “The present King of France is not bald” is ambiguous between two readings: (1) the reading where it says of the present King of France that he is not bald, and (2) the reading on which denies that the present King of France is bald. The former reading requires that there be a unique King of France on the list of things that are not bald, whereas the latter simply says that there is not a unique King of France that appears on the list of bald things. Russell says the latter, but not the former, can be true in a circumstance in which there is no King of France. Russell analyzes this difference as a matter of the scope of the definite description, though as we shall see, some modern logicians tend to think of this situation as a matter of the scope of the negation sign. Thus, Russell introduces a method for indicating the scope of the definite description.

To see how Russell’s method of scope works for this case, we must understand the definition which introduces definite descriptions (i.e., the inverted iota operator). Whitehead and Russell define:

\[ \tag*{∗14·01} [(\atoi x) \phi x] \sdot \psi(\atoi x) \phi x \ldot {=} \colon (\exists b) \colon \phi x \ldot {\equiv_x} \ldot x=b \colon \psi b \quad\Df \]

This kind of definition is called a contextual definition, which are to be contrasted with explicit definitions. An explicit definition of the definition description would have to look something like the following:

\[ (\atoi x)(\phi x) = \colon \ldots \quad\Df \]

which would allow the definite description to be replaced in any context by whichever defining expression fills in the ellipsis. By contrast, ∗14·01 shows how a sentence, in which there is occurrence of a description \((\atoi x)(\phi x)\) in a context \(\psi\), can be replaced by some other sentence (involving \(\phi\) and \(\psi\)) which is equivalent. To develop an instance of this definition, start with the following example:

The present King of France is bald.

Using \(PKFx\) to represent the propositional function of being a present King of France and \(B\) to represent the propositional function of being bald, Whitehead and Russell would represent the above claim as:

\[ [(\atoi x)(PKFx)] \sdot B(\atoi x)(PKFx) \]

which by ∗14·01 means:

\[ (\exists b) \colon PKFx \ldot {\equiv_x} \ldot x=b \colon Bb \]

In words, there is one and only one \(b\) which is a present King of France and which is bald. In modern symbols, using \(b\) non-standardly, as a variable, this becomes:

\[ (\exists b)[\forall x(PKFx \equiv x=b) \amp Bb] \]

Now we return to the example which shows how the scope of the description makes a difference:

The present King of France is not bald.

There are two options for representing this sentence.

\[ [(\atoi x)(Kx)] \sdot \osim B(\atoi x)(Kx) \]


\[ \osim [(\atoi x)(Kx)] \sdot B(\atoi x)(Kx) \]

In the first, the description has “wide” scope, and in the second, the description has “narrow” scope. Russell says that the description has “primary occurrence” in the former, and “secondary occurrence” in the latter. Given the definition ∗14·01, the two PM formulas immediately above become expanded into primitive notation as:

\[ \begin{align} (\exists b) \colon PKFx \equiv_x x=b \colon \osim Bb\\ \osim (\exists b) \colon PKFx \equiv_x x=b \colon Bb \end{align} \]

In modern notation these become:

\[ \begin{align} \exists x[\forall y(PKFy \equiv y=x) \amp \osim Bx]\\ \osim \exists x[\forall y(PKFy \equiv y=x) \amp Bx] \end{align} \]

The former says that there is one and only one object which is a present King of France and which is not bald; i.e., there is exactly one present King of France and he is not bald. This reading is false, given that there is no present King of France. The latter says it is not the case that there is exactly one present King of France which is bald. This reading is true.

Although Whitehead and Russell take the descriptions in these examples to be the expressions which have scope, the above readings in both expanded PM notation and in modern notation suggest why some modern logicians take the difference in readings here to be a matter of the scope of the negation sign.

9. Classes, Relations, and Functions

The circumflex “ˆ” over a variable preceding a formula is used to indicate a class, thus \(\hat{x} \psi x\) is the class of things \(x\) which are such that \(\psi x\). In modern notation we represent this class as \(\{x \mid \psi x\}\), which is read: the class of \(x\) which are such that \(x\) has \(\psi\). Recall that “\(\phi \hat{x}\)”, with the circumflex over a variable after the predicate variable, expresses the propositional function of being an \(x\) such that \(\phi x\). In the type theory of PM, the class \(\hat{x} \phi x\) has the same logical type as the function \(\phi \hat{x}\). This makes it appropriate to use the following contextual definition, which allows one to eliminate the class term \(\hat{x} \psi x\) from occurrences in the context \(f\): \[ \tag*{∗20·01} f\{ \hat{z}(\psi z)\} \ldot {=} \colon (\exists \phi) \colon \phi \bang x \ldot {\equiv_x} \ldot \psi x \colon f \{ \phi\bang \hat{z}\} \quad\Df \] or in modern notation: \[ f\{z \mid \psi z\} =_{df} \exists \phi[\forall x(\phi x \equiv \psi x) \amp f(\lambda x \phi x)] \] where \(\phi\) is a predicative function of \(x\)

Note that \(f\) has to be interpreted as a higher-order function which is predicated of the function \(\phi \bang \hat{z}\). In the modern notation used above, the language has to be a typed language in which \(\lambda\) expressions are allowed in argument position. As was pointed out later (Chwistek 1924, Gödel 1944, and Carnap 1947) there should be scope indicators for class expressions just as there are for definite descriptions. (The possibility of scope ambiguities in propositions about classes is mentioned in the final sentences of the Introduction (PM I, 84)). Chwistek, for example, proposed copying the notation for definite descriptions, thus replacing ∗20·01 with:

\[ [\hat{z}(\psi z)] \sdot f\{ \hat{z}(\psi z)\} \ldot {=} \colon (\exists \phi) \colon \phi \bang x \ldot {\equiv_x} \ldot \psi x \colon f \{ \phi\bang \hat{z} \} \]

Contemporary formalizations of set theory make use of something like these contextual definitions, when they require an “existence” theorem of the form \(\exists x\forall y(y \in x \equiv \ldots y\ldots)\), in order to justify the introduction of a singular term \(\{y \mid \ldots y\ldots \}\). See Suppes (1960). Given the law of extensionality, it follows from \(\exists x\forall y(y \in x \equiv \ldots y\ldots)\) that there is a unique such set. The relation of membership in classes \(\in\) is defined in PM by first defining a similar relationship between objects and propositional functions: \[ \tag*{∗20·02} x \in (\phi\bang \hat{z}) \ldot {=} \ldot \phi \bang x \quad\Df \] or, in modern notation: \[ x \in \lambda z\phi z =_{df} \phi x \]

∗20·01 and ∗20·02 together are then used to define the more familiar notion of membership in a class. The formal expression “\(y \in \{ \hat{z}(\phi z)\}\)” can now been seen as a context in which the class term occurs; it is then eliminated by the contextual definition ∗20·01. (Exercise)

PM also has Greek letters for classes: \(\alpha, \beta, \gamma\), etc. These will appear as bound (real) variables, apparent (free) variables and in abstracts for propositional functions true of classes, as in \(\phi \hat{\alpha}\). Only definitions of the bound Greek variables appear in the body of the text, the others are informally defined in the Introduction: \[ \tag*{∗20·07} (\alpha) \sdot f \alpha \ldot {=} \ldot (\phi) \sdot f \{ \hat{z}(\phi\bang z)\} \quad\Df \] or, in modern notation, \[ \forall \alpha\, f\alpha =_{df} \forall \phi f\{z\mid\phi z\} \] where \(\phi\) is a predicative function.

Thus universally quantified class variables are defined in terms of quantifiers ranging over predicative functions. Likewise for existential quantification: \[ \tag*{∗20·071} (\exists \alpha) \sdot f \alpha \ldot {=} \ldot (\exists \phi) \sdot f \{ \hat{z}(\phi\bang z)\} \quad\Df \] or, in modern notation, \[ \exists \alpha\, f\alpha =_{df} \exists \phi f\{z\mid\phi z\} \] where \(\phi\) is a predicative function.

Expressions with a Greek variable to the left of \(\in\) are defined: \[ \tag*{∗20·081} \alpha \in \psi\bang \hat{\alpha} \ldot {=} \ldot \psi \bang \alpha \quad\Df \]

These definitions do not cover all possible occurrences of Greek variables. In the Introduction to PM, further definitions of \(f \alpha\) and \(f \hat{\alpha}\) are proposed, but it is remarked that the definitions are in some way peculiar and they do not appear in the body of the work. The definition considered for \(f \hat{\alpha}\) is:

\[ f \hat{\alpha} \ldot {=} \ldot (\exists \psi) \sdot \hat{\phi} \bang x \equiv_x \psi \bang x \sdot f \{ \psi\bang \hat{z} \} \]

or, in modern notation,

\[ \lambda \alpha\, f\alpha =_{df} \lambda \phi f\{x \mid \phi x\} \]

That is, \(f \hat{\alpha}\) is an expression naming the function which takes a function \(\phi\) to a proposition which asserts \(f\) of the class of \(\phi\)s. (The modern notation shows that in the proposed definition of \(f \hat{\alpha}\) in PM notation, we shouldn’t expect \(\alpha\) in the definiens, since it is really a bound variable in \(f \hat{\alpha}\); similarly, we shouldn’t expect \(\phi\) in the definiendum because it is a bound variable in the definiens.) One might also expect definitions like ∗20·07 and ∗20·071 to hold for cases in which the Roman letter “\(z\)” is replaced by a Greek letter. The definitions in PM are thus not complete, but it is possible to guess at how they would be extended to cover all occurrences of Greek letters. This would complete the project of the “no-classes” theory of classes by showing how all talk of classes can be reduced to the theory of propositional functions.

10. Concluding Mathematical Logic

Although students of philosophy usually read no further than ∗20 in PM, this is in fact the point where the “construction” of mathematics really begins. ∗21 presents the “General Theory of Relations” (the theory of relations in extension; in contemporary logic these are treated as sets of ordered pairs, following Wiener). \(\hat{x} \hat{y} \psi(x, y)\) is the relation between \(x\) and \(y\) which obtains when \(\psi(x, y)\) is true. In modern notation we represent this as as the set of ordered pairs \(\{\langle x, y \rangle \mid \psi(x, y)\}\), which is read: the set of ordered pairs \(\langle x, y \rangle\) which are such that \(x\) bears the relation \(\psi\) to \(y\).

The following contextual definition (∗21·01) allows one to eliminate the relation term \(\hat{x} \hat{y}\psi (x, y)\) from occurrences in the context \(f\):

\[ f \{ \hat{x} \hat{y} \psi ( x, y )\} \ldot {=} \colondot (\exists \phi) \colon \phi \bang ( x, y ) \ldot {\equiv_{x,y}} \ldot \psi( x, x ) \colon f \{ \phi\bang (\hat{u}, \hat{v} )\} \quad\Df \]

or in modern notation:

\[ f \{\langle x, y \rangle \mid \psi( x, y )\} =_{df} \exists \phi[\forall xy (\phi(x, y) \equiv \psi( x, y) ) \amp f ( \lambda u \lambda v \phi(u,v))] \]

where \(\phi\) is a predicative function of \(u\) and \(v\).

Principia does not analyze relations (or mathematical functions) in terms of sets of ordered pairs, but rather takes the notion of propositional function as primitive and defines relations and functions in terms of them. The upper case letters \({R}, {S}\) and \({T}\), etc., are used after ∗21 to stand for these “relations in extension”, and are distinguished from propositional functions by being written between the arguments. Thus it is \(\psi(x,y)\) with arguments after the propositional function symbol, but \(xRy\). From ∗21 functions “\(\phi\) and \(\psi\)”, etc., disappear and only relations in extension, \({R}\), \({S}\) and \({T}\), etc., appear in the pages of Principia. While propositional functions might be true of the same objects yet not be identical, no two relations in extension are true of the same objects. The logic of Principia is thus “extensional”, from page 200 in volume I, through to the end in Volume III.

∗22 on the “Calculus of Classes” presents the elementary set theory of intersections, unions and the empty set which is often all the set theory used in elementary mathematics of other sorts. The student looking for the set theory of Principia to compare it with, say the Zermelo-Fraenkel system, will have to look at various numbers later in the text. The Axiom of Choice is defined at ∗88 as the “Multiplicative Axiom” and a version of the Axiom of Infinity appears at ∗120 in Volume II as “Infin ax”. The set theory of Principia comes closest to Zermelo’s axioms of 1908 among the various familiar axiom systems, which means that it lacks the Axiom of Foundation and Axiom of Replacement of the now standard Zermelo-Fraenkel axioms of set theory. The system of Principia differs importantly from Zermelo’s in that it is formulated in the simple theory of types. As a result, for example, there are no quantifiers ranging over all sets, and there is a set of all things (for each type).

∗30 on “Descriptive Functions” provides Whitehead and Russell’s analysis of mathematical functions in terms of relations and definite descriptions. Frege had used the notion of function, in the mathematical sense, as a basic notion in his logical system. Thus a Fregean “concept” is a function from objects as arguments to one of the two “truth values” as its values. A concept yields the value “True” for each object to which the concept applies, and “False” for all others. Russell, from 1904, well before the writing of Principia had preferred to analyze functions in terms of the relation between each argument and value, and the notion of “uniqueness”. With modern symbolism, his view would be expressed as follows. For each function \(\lambda x f(x)\), there will be some relation (in extension) \(R\), such that the value of the function for an argument \(a\), that is \(f(a)\), will be the unique individual which bears the relation \(R\) to \(a\). (Nowadays we reduce functions to a binary relation between the argument in the first place and value in the second place.) The result is that there are no function symbols in Principia. As Whitehead and Russell say, the familiar mathematical expressions such as “\(\sin \pi/2\)” will be analyzed with a relation and a definite description, as a “descriptive function”. The “descriptive function”, \(R‘y\) (the \(R\) of \(y)\), is defined as follows:

\[ \tag*{∗30·01} R‘y = (\atoi x)xRy \quad\Df \]

We conclude this section by presenting a number of prominent examples from these remainder of Volume I, with their intuitive meaning, location in PM, definition in PM, and a modern equivalent. (Some of these numbers are theorems rather than definitions.) Note, however, that the modern equivalent will sometimes logically differ from the original version in PM, such as by treating relations as sets of ordered pairs, etc. In his account of the logic of Principia, W.V. Quine (1951) objects to the complexity and even redundancy of much of this symbolism in comparison with axiomatic set theory. These formulas can be worked out, however, with a step by step application of the definitions.

For each formula number, we present the information in the following format:

PM Symbol(Intuitive Meaning)    [Location]
PM Definition
Modern Equivalent
\(\alpha \subset \beta\) (\(\alpha\) is a subset of \(\beta\))    [∗22·01]
\(x\in \alpha \ldot {\supset_x} \ldot x\in \beta\)
\(\alpha \subseteq \beta\)
\(\alpha \cap \beta\) (the intersection of \(\alpha\) and \(\beta)\)    [∗22·02]
\(\hat{x} (x \in \alpha \sdot x \in \beta\))
\(\alpha \cap \beta\)
\(\alpha \cup \beta\) (the union of \(\alpha\) and \(\beta\))    [∗22·03]
\(\hat{x} (x \in \alpha \lor x \in \beta\))
\(\alpha \cup \beta\)
\(-\alpha\) (the complement of \(\alpha)\)    [∗22·04]
\(\hat{x} (x\osim \in \alpha\)) [i.e., \(\hat{x} \osim (x \in \alpha\)) by ∗20·06]
\(\{x \mid x \not\in \alpha \}\)
\(\alpha - \beta\) (\(\alpha\) minus \(\beta)\)    [∗22·05]
\(\alpha \cap -\beta\)
\(\{x \mid x\in \alpha \amp x\not\in \beta \}\)
\(R \: \dot{\cap} \: S\) (the intersection of \(R\) and \(S\) )    [∗23·02]
\(\hat{x}\hat{y} (x R y \: . \: x S y)\)
\(\{\langle x, y \rangle | Rxy \; \amp \; Sxy \}\)
\(\mathrm{V}\) (the universal class)    [∗24·01]
\(\hat{x} (x\) = \(x)\)
\(\mathrm{V}\) or \(\{x \mid x = x\}\)
\(\Lambda\) (the empty class)    [∗24·02]
\(\dot{\exists}! R\) (the relation \(R\) exists)    [∗25·03]
\((\exists x,y) .\: xRy\)
\(\exists x \exists y Rxy\)
\(R‘y\) (the \(R\) of \(y)\) (a descriptive function)    [∗30·01]
(\(\atoi x)(xRy)\)
\(f^{-1}(y)\), where \(f = \{\langle x,y\rangle \mid Rxy \}\)
\(\breve{R}\) (the converse of \(R)\)    [∗31·02]
\(\hat{x} \hat{z} (zRx)\)
\(\{\langle x,z\rangle \mid Rzx\}\)
\(\overrightarrow{R}‘y\) (the R-predecessors of \(y)\)    [∗32·01]
\(\hat{x} (xRy)\)
\(\{x \mid Rxy \}\)
\(\overleftarrow{R}‘x\) (the R-successors of \(x)\)    [∗32·02]
\(\hat{z} (xRz)\)
\(\{z \mid Rxz \}\)
\(\text{D} ‘R\) (the domain of \(R)\)    [∗33·01]
\(\hat{x} \{ (\exists y) \sdot xRy \}\)
\(\{x \mid \exists y Rxy \}\) also \(\mathcal{D}` R\)
\(\backd ‘R\) (the range of \(R)\)    [∗33·02]
\(\hat{z} \{(\exists x) \sdot xR z \}\)
\(\{z \mid \exists x Rxz \}\) also \(\mathcal{R}`R\)
\(C‘R\) (the field of \(R)\)    [∗33·03]
\(\hat{x} \{(\exists y): xRy \ldot {\lor} \ldot yRx\}\)
\(\{x \mid \exists y (Rxy \lor Ryx)\}\) also \(\mathcal{F}`R\)
\(R\mid S\) (the relative product of \(R\) and \(S)\)    [∗34·01]
\(\hat{x} \hat{z} \{(\exists y) \sdot xRy \sdot ySz \}\)
\(R \circ S\) or \(\{\langle x,z\rangle \mid \exists y(Rxy \amp Syz)\}\)
\(\alpha \upharpoonleft R\) (the restriction of the domain of \(R\) to \(\alpha )\)    [∗35·01]
\(\hat{x} \hat{y}[ x\in \alpha \sdot xRy]\)
\(\{\langle x,y \rangle \mid x \in \alpha \amp Rxy \}\)
\(R \restriction \beta\) (the restriction of the range of \(R\) to \(\beta)\)    [∗35·02]
\(\hat{x} \hat{y}[xRy \sdot y \in \beta]\)
\(\{\langle x,y \rangle \mid Rxy \amp y \in \beta\}\)
\(\alpha \uparrow \beta\) (the Cartesian product of \(\alpha\) and \(\beta)\)    [∗35·04]
\(\hat{x} \hat{y}[x \in \alpha \sdot y \in \beta\)]
\(\alpha \: X \: \beta\) or \(\{\langle x,y\rangle \mid x\in \alpha \amp y\in \beta \}\)
\(P \restriction \! \! \! \downharpoonright \alpha\) (the restriction of \(R\) to \(\alpha)\)    [∗36·01]
\(\alpha \upharpoonleft P \restriction \alpha\)
\(\{\langle x,y \rangle \mid x \in \alpha \amp y \in \alpha \amp Rxy \}\)
\(R ‘‘\beta\) (the projection of \(\beta\) by \(R)\)    [∗37·01]
\(\hat{x} \{(\exists y) \sdot y\in \beta \sdot x Ry\}\)
\(\{x \mid \exists y(y\in \beta \amp Rxy)\}\)
\(\alpha R_{\in} \beta\) (the members of \(\alpha\) which have the relation \(R\) to some member of \(\beta)\)    [∗37·02]
\(\hat{\alpha} \hat{\beta} ( \alpha = R ‘‘ \beta )\)
\(\{\langle x,y \rangle \mid x \in \alpha \amp \exists z ( y \in z \amp z \in \beta \amp Ryz ) \}\)

\(\ast 38\) Double descriptive functions. A range of operations between individuals, classes, or relations, that are treated as operations on their arguments. The operation of intersection can be represented as a higher order function of its first argument. Thus \(\cap \beta ` \alpha = \alpha \cap \beta\). Other operations correspond to \(\downarrow\), \(\mid\), and \(+_c\). The following are instances of [∗38·02] and [∗38·03] for operations that are to be defined later.

\(\venus y\) (the relative product of \(R\) and \(S)\)    [∗38·02]
\(\hat{u} \hat{x} ( u = x \venus y)\)
\(\{\langle u,x \rangle \mid u = x \venus y \}\)
\(\downarrow y\) (the relation of a first component to a pair)    [∗38·02]
\(\hat{R}\hat{x}(R = x \downarrow y)\)
\(Id_1^2 \langle x, y \rangle = x\) (the projection function to the first element of a pair)
\(\mid R\) (the relation of one power of \(R\) to the next)    [∗38·02]
\(\hat{P}\hat{S}(P = R \mid S )\)
\(\{ \langle P, S \rangle \mid P = R \circ S \}\)
\((+_c )1\) (the relation of adding 1 – successor)    [∗38·02]
\(\hat{u}\hat{x}(u = x +_c 1)\)
\(\{ \langle m , n \rangle \mid \; m = n + 1 \}\)
\(\alpha\stackrel{\downarrow}{,,} y\) (the class of pairs \(\langle x, y \rangle\) when \(x\) is an \(\alpha\))    [∗38·03]
\(\downarrow y ‘‘ \alpha\)
\(\{ \langle x , y \rangle \mid x \in \alpha \}\)
\(s ‘ \kappa\) (the sum or union of the \(\kappa\)s)    [∗40·02]
\(\hat{x} \{ ( \exists \alpha ). \: \alpha \in \kappa \; . \; x \in \alpha \}\)
\(\cup \kappa\), or \(\{ x \mid \exists \beta ( \beta \in \kappa \amp x \in \beta ) \}\)

11. Prolegomena to Cardinal Arithmetic (Part II)

Contemporary philosophers would consider the transition to mathematics to begin with the theory of sets, but in PM that is also a part of Mathematical Logic. The Prolegomena to Arithmetic thus begins with the definitions in terms of logic of explicitly arithmetical notions, the cardinal numbers 1 and 2.

\(\iota ‘ x\)(the unit class of \(x\)) as defined by theorem    [∗51·1] from definition    [∗51·01]
\(\hat{y} (y = x)\)
\(\{ y \mid y = x \}\) (the singleton \(x\))
\(\mathbf{1}\)(the cardinal number 1)    [∗52·01]
\(\hat{\alpha} \{ (\exists x) \sdot x = \iota‘x \}\)
\(\{ x \mid \exists y \; ( x = \{y \} ) \}\) (the class of all singletons)
\(\mathbf{2}\)(the cardinal number 2)    [∗54·02]
\(\hat{\alpha} \{ (\exists x,y) \sdot x \neq y \sdot \alpha = \iota‘x \cup \iota‘y \}\)
\(\{ x \mid \exists y \exists z( y \neq z \amp x = \{y \} \cup \{z\} ) \}\) (the class of all pairs)
\(x \downarrow y\)(the ordinal couple of \(x\) and \(y\))    [∗55·01]
\(\iota‘x \uparrow \iota‘y\)
\(\langle x, y \rangle\) (the ordered pair \(\langle x,y \rangle\))

The paperback abridged edition of Principia Mathematica to ∗56 only goes this far, so the remaining definitions have only been available to those with access to the full three volumes of PM. Russell did not make the decision to end the 1962 abridged version at this point, but the choice is understandable. It is here that contemporary set theory begins to look even more different from PM. Set theory follows Norbert Wiener (1914) by representing relations as sets of ordered pairs, which themselves defined as sets. (Wiener's proposal of \( \langle x, y \rangle =_{df} \{ \{ \{x \}, \emptyset \}, \{ \{y \} \} \} \) has generally been replaced by Kuratowski's simpler \(\{ \{x \}, \{ x,y \} \}\)) . The remainder of PM examines the structure of relations that lead to the mathematics of natural and real numbers, and the portion of the theory of transfinite sets that can be carried out in the theory of types. This looks very different from the development of these notions in axiomatic set theory.

\(\Cl\ ` \alpha\) (the class of subclasses of \(\alpha\))    [∗60·01]
\(\hat{\alpha} \{ \kappa = \hat{\beta} (\beta \subset \alpha) \}\)
\(\wp{\alpha}\), the power set of \(\alpha\), \(\{x | x \subseteq \alpha\}\)
\(\Cl\ \ex\ ` \alpha\) (the class of existent subclasses of \(\alpha\))    [∗60·02]
\(\hat{\kappa} \{ \kappa = \hat{\beta} (\beta \subset \alpha \; . \; \exists ! \beta ) \}\)
\(\{x | x \subseteq \alpha \; \amp \; x \neq \emptyset\}\)
\(\Rl\ ` P\) (the class of sub relations of \(P\))    [∗61·01]
\(\hat{R} \{ R \subset \! \! \! \cdot \; P \}\)
\(\{ R \mid \forall x \forall y ( \langle x, y \rangle \in R \supset \langle x,y \rangle \: \in P) \}\)
\(\in\) (the relation of membership in a class)    [∗62·01]
\(\hat{x} \hat{\alpha} ( x \in \alpha)\)
\(\{ \langle x,y \rangle \mid \: x \in y \}\)

\(\ast 63\) Relative Types of Classes. The simple theory of types of classes allows for expressions relating classes of different types. The gap between set theory and the theory of classes in PM comes from the lack of a cumulative theory of classes of any type. These restricted cases allow definitions of relations between, say, individuals and classes of individuals. These are needed in the account of real numbers in terms of classes of classes of ratios in Volume III.

\(t‘x\) (the type of which \(x\) is a member)    [∗63·01]
\(\iota ` x \cup - \iota ` x\)
\(\{ x \} \cup \{ y \mid y \not \in \{ x \} \}\)
\(t_0‘\alpha\) (the type in which \(\alpha\) is contained)    [∗63·02]
\(\alpha \cup - \alpha\)
\(\alpha \cup \{ x \mid x \not \in \alpha \}\)
\(t_1‘ \kappa\) (the type next below that in which \(\kappa\) is contained)    [∗63·03]
\(t_0 `s`\kappa\)
\(\cup \: \{ \: \cup \{ \alpha \mid \alpha \in \kappa \} \: , \: \{ \beta \mid \beta \not \in \cup \{ \alpha \mid \alpha \in \kappa \} \} \: \}\)
\(t_{11}‘ \alpha\)    [∗64·022]
\(t ‘ ( t_1 ‘ \alpha \uparrow t_1 ‘ \alpha )\)
the type of pairs of classes of types \(t_1 ‘ \alpha\)
\(\alpha \rightarrow \beta\) [∗70·01]
\(\hat{R} (\overrightarrow{R}“\backd ‘R \subset \alpha \sdot \overleftarrow{R}“D‘R \subset \beta )\)
\(f : \alpha \rightarrow \beta\) (the functions \(f\) from \(\alpha\) to \(\beta\))
\(\alpha \mathbin{\overline{\mathrm{sm}}} \beta\)(the class of similarity relations between \(\alpha\) and \(\beta\))    [∗73·01]
\((1 \rightarrow 1) \cap \overleftarrow{D}‘\alpha \cap \overleftarrow{\backd}‘\beta\)
\(\{f \mid f : \alpha \stackrel{1-1}{\longrightarrow} \beta\}\)
\(\mathrm{sm}\)(the relation of similarity)    [∗73·02]
\(\hat{\alpha} \hat{\beta}(\exists! \alpha \mathbin{\overline{\mathrm{sm}}} \beta)\)
\(\alpha \approx \beta\)

\(\ast 80\) Selections. A selection function for a class \(\kappa\) is a function \(f\) making each element \(x\) of \(\kappa\) to a member of \(x\). These are denoted by \( \in_{\Delta} `\kappa\). The cardinal number of the product of two classes \(\alpha X \beta\) is the cardinal number of the class of all pairs of members selected from \(\alpha\) and \(\beta\). The guarantee that such selections exist is called the Multiplicative Axiom in PM. This is now known as the Axiom of Choice, which had been identified as an assumption used in proofs in set theory by Ernst Zermelo in 1904. In PM it is defined as asserting that if a class \(\kappa\) is a set of mutually exclusive, non-empty classes, then there exists a class \(\mu\) which contains exactly one member of each element of \(\kappa\).

\(\in_{\Delta}`\kappa\)(the selective relations for \(\in\))    [∗80·01]
\((1 \rightarrow Cls) \; \cap \; Rl` \in \; \cap \; \overleftarrow{\backd}`\kappa\)
\(\{ f \mid \forall \alpha (\alpha \in \kappa \supset f(\alpha) \in \alpha ) \}\)
\(\Cls ^2 \ \excl\) (class of mutually exclusive classes)    [∗84·01]
\(\hat{\kappa} ( \alpha , \beta \in \kappa \; .\; \alpha \neq \beta \; . \supset_{\alpha , \beta} . \; \alpha \cap \beta = \Lambda )\)
\(\{ \kappa \mid \forall \alpha \forall \beta (\alpha , \beta \in \kappa \; \amp \; \alpha \neq \beta \supset \alpha \cap \beta = \emptyset)\}\)
\(\Cls\ \excl\ ` \gamma\) (class of mutually exclusive sub-classes of \(\gamma\))    [∗84·02]
\(\Cls^2\ \excl\ \cap \ \Cl\ ` \gamma\)
\(\{ \kappa \subset \gamma \mid \forall \alpha \forall \beta (\alpha , \beta \in \kappa \; \amp \; \alpha \neq \beta \supset \alpha \cap \beta = \emptyset)\}\)
\(\Cls\ \ex ^{2} \ \excl\) (class of mutually exclusive non-empty classes)  [∗84·03]
\(\Cls^2 \; \excl \; - \overleftarrow{\in} ` \Lambda\)
\(\{ \kappa \mid [ \; \forall \alpha (\alpha \in \kappa \supset \alpha \neq \emptyset) \; \amp\) \(\; \forall \alpha \forall \beta \: (\alpha \in \kappa \: \amp \: \beta \in \kappa \supset (\alpha = \beta \vee \alpha \cap \beta = \emptyset))\:]\}\)
Mult ax (the Multiplicative Axiom)    [∗88·03 ]
\(\kappa \: \epsilon \: \mathrm{Cls \; ex^2 excl} \: . \supset_{\kappa} \: : (\exists \mu) : \alpha \: \epsilon \: \kappa \: . \supset_{\alpha} . \: \mu \cap \alpha \: \epsilon \: 1\)
\(\forall \kappa \{ [ \; \forall \alpha (\alpha \in \kappa \supset \alpha \neq \emptyset ) \; \amp\) \(\; \forall \alpha \forall \beta \: (\alpha \in \kappa \: \amp \: \beta \in \kappa \supset (\alpha = \beta \vee \alpha \cap \beta = \emptyset)) \:] \;\supset\) \(\; \exists \mu \forall \alpha \exists x \: (\alpha \in \kappa \supset \mu \cap \alpha = \{x \} ) \}\)

\(\ast 90\) Inductive Relations. The concluding section of Volume I presents a generalization of the structure of the natural numbers that underlies the principle of mathematical induction.

\(R_*\) (the ancestral of \(R)\)    [∗90·01]
\(\hat{x} \hat{y} \{ x \in C‘ R \colon \breve{R}“\mu \subset \mu \sdot x \in \mu \ldot {\supset_{\mu}} \ldot y \in \mu \}\)
\(\{ \langle x, y \rangle \mid x \in \mathcal{F}`R \; \amp\) \(\; \forall_{\mu} [ \forall z \forall w [( z \in \mu \; \amp \; Rzw ) \supset w \in \mu ] \supset y \in \mu ] \}\)
Now written \(R^*\) this follows Frege’s definition: \(y\) is in all the \(R\)-hereditary classes that contain \(x\).
\(R_{\text{ts}}\)(one relation is a positive power of \(R\) times the other)    [∗91·02]
\(( \: \mid R)_{\ast}\)
\(\{ \langle x, y \rangle \mid \exists P \exists n \; ( P = R^n \; \amp \; \langle x, y \rangle \in P ) \}\)
Pot \(‘ R\)(the positive powers of \(R\) – Potentia)    [∗91·03]
\(\overrightarrow{R}_{\text{ts}} ‘ R\)
\(\{ S \: \mid \; \exists n \: S = R^n \; \amp \; S \neq \lambda x \lambda y (x = y) \}\)
\(R_{\text{po}}\)(the union of the positive powers of \(R\))    [∗91·05]
\(\dot{s}‘ \text{Pot} ‘ R\)
\(\cup \{ \langle X, Y \rangle \mid Y \in \{ S \mid \exists n \: S = X^n \; \amp \; S \neq \lambda x \lambda y (x = y) \} \}\)
\(xB‘P\)( \(x\) begins the relation \(P\))    [∗93·01]
\(x \in D ‘ P - \backd ‘P\)
\(\{ x \mid \exists y \: Pxy \; \amp \sim \exists z Pzx \}\)
\(x \:\) min\(_P ` \alpha\)( \(x\) is a minimal member of \(P\))    [∗93·02]
\(x \in \alpha \cap C`P - \breve{P} `` \alpha\)
\(x \in \alpha \; \amp \; x \in \mathcal{F}P \; \amp \; \sim \exists z \: (Pzx \: \amp \: z \in \alpha )\)
\(\stackrel{\leftrightarrow}{R} `x\)( the family of \(R\), ancestry and posterity)    [∗97·01]
\(\overrightarrow{R}`x \cup (\iota ` x \cap C ` R)\cup \overleftarrow{R}` x\)
\(\{ y \mid Rxy \; \vee \; \{ y \} \in \mathcal{F} `R \; \vee \; Ryx \} \)

12. Cardinal Arithmetic (Part III)

With \(\ast 100\) at the start of Volume II, Principia Mathematica finally begins developing the theory of cardinal numbers with the Frege-Russell Definition of numbers as classes of equinumerous classes.

\(\mathrm{N_c}\)(the Cardinal Numbers)    [∗100·01]
This is actually the relation between a class and its cardinal number.
\(\{x \mid \forall y (y \in x \leftrightarrow \forall z \forall w z,w \in y \leftrightarrow z \approx w))\}\)
\(\mathbf{0}\)(the cardinal number 0)    [∗101·01]
\(0 = \mathrm{N_c}‘\Lambda\)
The class of all classes equinumerous with the empty set is just the singleton containing the empty set.
\(\text{N}_0 \text{c}‘\alpha\)( the homogeneous cardinal of \(\alpha\))    [∗103·01]
\(\text{Nc}‘ \alpha \; \cap \; t‘\alpha\)
\(\{ \beta \mid \beta \approx \alpha \}\) for \(\beta\) of the same type as \(\alpha\)
\(\alpha + \beta\)(the arithmetic sum of \(\alpha\) and \(\beta\))    [∗110·01]
\(\downarrow (\Lambda \cap \beta)“\iota“\alpha \cup (\Lambda \cap \alpha) \downarrow“\iota“\beta)\)
This is the union of \(\alpha\) and \(\beta\) after they are made disjoint by pairing each element of \(\beta\) with \(\{ \alpha \}\) and each element of \(\alpha\) with \(\{ \beta \}\). The classes \(\alpha\) and \(\beta\) are intersected with the empty class, \(\Lambda\), to adjust the type of the elements of the sum.
\((\beta \times \{\alpha\}) \cup (\alpha \times \{\beta\})\)
\(\mu +_c \nu\)(the cardinal sum of \(\mu\) and \(\nu\))    [∗110·02]
\(\hat{\xi}\{(\exists \alpha,\beta) \sdot \mu = \mathrm{N_0 c}‘\alpha \sdot \nu = \mathrm{N_0 c}‘\beta\sdot\xi\,\mathrm{sm}(\alpha + \beta)\}\)
Cardinal addition is the arithmetical sum of “homogeneous cardinals”, cardinals of a uniform type, to which \(\alpha\) and \(\beta\) are related by \(\mathrm{N_0 c}\) (itself defined [∗103·01]).
\(\{ x \mid x \approx (\beta \times \{\alpha\}) \cup (\alpha \times \{\beta\}) \}\)

The reader can now appreciate why this elementary theorem is not proved until page 83 of Volume II of PM:

\[\tag*{∗110·643} 1 +_c 1 = 2 \]

Whitehead and Russell remark that “The above proposition is occasionally useful. It is used at least three times, in …”. This joke reminds us that the theory of natural numbers, so central to Frege’s works, appears in PM as only a special case of a general theory of cardinal and ordinal numbers and even more general classes of isomorphic structures.

\(\beta \times \alpha\) (the product of classes)    [∗113·02]
\(s` \alpha\stackrel{\downarrow}{,,} ``\beta\)
\(\{ \langle x , y \rangle \mid x \in \alpha \; \amp \; y \in \beta \}\)
\(\mu \times_{\text{c}} \nu\) (the product of homogenous cardinal numbers)    [∗113·03]
\(\hat{\xi} \{ (\exists \alpha, \beta) . \: \mu = N_0\text{c}` \alpha \: . \: \nu = N_0\text{c}` \beta \; . \; \xi \: \text{sm} \: (\alpha \times \beta)\}\)
If \(\mu = \bar{\bar{\alpha}} \; \amp \; \nu = \bar{\bar{\beta}}\) then \(\mu \times \nu = \{ \beta \mid \beta \approx ( \alpha \times \beta) \}\)
\(\alpha\) exp \(\beta\) (the exponentiation of classes)    [∗116·01]
Prod \(‘ \alpha\stackrel{\downarrow}{,,} ‘‘\beta\)
\(\{ f \mid \mathcal{D} f = \beta \; \amp \; \mathcal{R} f \subseteq \alpha \}\)
\(\mu^{\nu}\) (the exponentiation of cardinal numbers)    [∗116·02]
\(\hat{\gamma} \{ (\exists \alpha, \beta) . \: \mu = N_0\text{c}` \alpha \: . \: \nu = N_0\text{c}` \beta \; . \; \gamma\) sm \((\alpha\) exp \(\beta)\}\)
\(\{ \gamma \mid \exists \alpha \exists \beta \: ( \mu = \bar{\bar{\alpha}} \; \amp \; \nu = \bar{\bar{\beta}} \; \amp \; \gamma \approx \alpha^{\beta} )\}\)

The following theorem, that the cardinality of the power set of \(\alpha\) is 2 raised to the power of the cardinality of \(\alpha\), \(\; \bar{\bar{ \wp{\alpha} }} = 2^{\bar{\bar{\alpha}}}\), is called “Cantor's Proposition”, and is said to be “very useful” (PM II, 140):

\[\tag*{∗116·72} \text{Nc}‘\text{Cl}‘\alpha = 2^{\text{Nc}‘\alpha} \]

The more familiar result, Cantor's Theorem, proves the power set of \(\alpha\) is strictly larger, \(2^{\bar{\bar{\alpha}}} > \bar{\bar{ \alpha }}\).

\[\tag*{∗117·661} \mu \in \text{N}_0\text{C} \; . \: \supset \: . \; 2^{\mu} > \mu \]
NC induct(the Inductive Cardinals)    [∗120·01]
\(\hat{\alpha}\{\alpha({+_c}1)_* 0\}\)
\(\{x \mid 0 S^* x\}\)
The inductive cardinals are the “natural numbers”, that is, 0 and all those cardinal numbers that are related to 0 by the ancestral of the “successor relation” \(S\), where \(xSy\) just in case \(y = x +1\).
Infin ax(the Axiom of Infinity)    [∗120·03]
\(\alpha \in \text{NC induct} \sdot \supset_{\alpha} \sdot \exists!\alpha\)
\(\forall \alpha (\alpha \in \{x \mid 0S^* x\} \supset \alpha \neq \varnothing)\)
The Axiom of Infinity asserts that all inductive cardinals are non-empty. (Recall that 0 = \(\{ \varnothing \}\), and so 0 is not empty.) The Axiom of Infinity is not a “primitive proposition” but instead to be listed as an “hypothesis” where used, that is as the antecedent of a conditional, where the consequent will be said to depend on the axiom. Technically it is not an axiom of PM as [∗120·03] is a definition, so this is just further notation in PM!
Prog(Progressions, or \(\omega\) orderings)    [∗122·01]
\((1 \rightarrow 1) \cap \hat{R} (D`R = \overleftarrow{R_{\ast}} ‘‘ B ‘R)\)
\(\{ R \mid R\) is isomorphic to an initial segment of \(R_{\ast} \}\)
“It is not convenient to define a progression as a series which is ordinally similar to that of the inductive cardinals, both because this definition only applies if we assume the axiom of infinity, and because we have in any case to show that (assuming the axiom of infinity) the series of inductive cardinals has certain properties, which can be used to afford a direct definition of progressions.” (PM II, 245)
\(\aleph_0\)(the smallest of Cantor's transfinite cardinals)    [∗123·01]

13. Relation Arithmetic (Part IV)

The notion of relation number, is the generalization of the notion of a well-ordering to an arbitrary relation. Just as a cardinal number is defined in PM as a class of equinumerous classes, an arbitrary relation number is a class of ordinally similar relations.

\(S^{;}Q\) (S is a correlator of Q)    [∗150·01]
\(S \mid Q \mid \breve{S}\)
\(S \circ Q \circ S^{-1}\)
\(P \: \overline{\text{smor}} \: Q\) (the class of similarities of between \(P\) and \(Q\) )    [∗151·01]
\(\hat{S} \{ S \in 1 \rightarrow 1 \; . \; C‘Q = \backd ‘S \; . \; P = S^{;} Q \}\)
\(\{ f \mid \mathcal{F} P \stackrel{1-1}{\longrightarrow} \mathcal{F} Q \; \amp \; \forall x \forall y [ (x \in \mathcal{D} f ) \supset Pxy \equiv Q f(x) f(y)]\}\)
\(P \;\) smor \(\:Q\) ( \(P\) is ordinary similar to \(Q\) )    [∗151·02]
\(\exists ! P \; P \: \overline{\text{smor}} \: Q\)
\(P \cong Q\) ( \(P\) is isomorphic to \(Q\)).
Nr\(`P\) (the relation number of \(P\))    [∗152·01]
\(\overrightarrow{\text{smor}} ‘ P\)
\(\{ Q \mid P \cong Q\}\)

\(\ast 170\) The relation of first differences orders classes on the basis of an ordering of their members. The method is a variation on the notion of lexicographic ordering of classes as in the alphabetical ordering of words in a dictionary. See Fraenkel (1968). PM uses two versions of the notion.

\(P_{\text{cl}}\) (ordering of classes by first differences of \(P\))    [∗170·01]
\(\hat{\alpha}\hat{\beta} \{ \alpha, \beta \in \text{Cl}`C`P \; . \; \exists ! \alpha - \beta - \breve{P}`` ( \beta - \alpha ) \}\)
For \(\prec\) an ordering of individuals, \(\alpha \prec_{\text{cl}} \beta\) iff \(\alpha\) , \(\beta \in \mathcal{F} P \; \amp \; \alpha \not\subseteq \beta \; \amp \; \forall x \forall y (x \not \in \beta \; \amp \; y \in \alpha \; \supset \; x \prec y )\)
“\(\alpha\) and \(\beta\) each pick out terms from \(C`P\), and these terms have an order conferred by \(P\); we suppose that the earlier terms selected by \(\alpha\) and \(\beta\) are perhaps the same, but sooner or later, if \(\alpha \neq \beta\), we must come to terms which belong to one but not the other. We assume that the earliest terms of this sort belong to \(\alpha\), not to \(\beta\); in this case, \(\alpha\)has to \( \beta\) the relation \(P_{\text{cl}}\). That is, where \(\alpha\) and \(\beta\) begin to differ, it is terms of \(\alpha\) that we come to, not terms of \(\beta\). We do not assume that there is a first term which belongs to \(\alpha\) but not \(\beta \), since this would introduce undesirable restrictions in case \(P\) is not well-ordered.” (PM II, 399)
\(P_{\text{lc}}\) (converse ordering of classes by first differences of \(P\))    [∗170·02]
Cnv \(` (\breve{P})_{\text{cl}}\)
\(\alpha \prec_{lc} \beta\) iff \(\alpha\) , \(\beta \in \mathcal{F} P \; \amp \; \alpha \not\subseteq \beta \; \amp \; \forall x \forall y (x \in \beta \; \amp \; y \not \in \alpha \; \supset \; x \prec y )\)
“ Thus \(\alpha P_{\text{lc}} \beta\) means, roughly speaking, that \(\beta - \alpha\) goes on longer than \( \alpha - \beta\), just as \(\alpha P_{\text{cl}} \beta\) means that \( \alpha - \beta\) begins sooner. This if \(P\) is the relation of earlier and later in time, and \(\alpha\) and \(\beta\) are the times when \(A\) and \(B\) respectively are out of bed, “\(\alpha P_{\text{cl}} \beta\)” will mean that \(A\) gets up earlier than \(B\) and “\(\alpha P_{\text{lc}} \beta\)” will mean that \(B\) goes to bed later than \(A\).” (PM II, 401)

14. Series (Part V)

Series” in PM are linear orderings. Volume II concludes halfway through this part, with Volume III beginning at \(\ast250\) and the theory of well-orderings. These concepts are defined in the now standard way. This section is only alien to the modern reader because of the notation.

trans P (P is transitive)    [∗201·01]
\(P^2 \subset \! \! \! \! \cdot \;\; P\)
\(\forall x \forall y \forall z (Pxy \: \amp \: Pyz \: \supset \: Pxz)\)
connex P (P is connected)    [∗202·01]
\(x \in C` P \; . \supset_x . \; \stackrel{\leftrightarrow}{P} ` x = C`P\)
\(\forall x \forall y [(x, y \in \mathcal{F} P ) \: \amp \: x \neq y \supset Pxy \vee Pyx ]\)
Ser (Series)    [∗204·01]
Rl\(‘ J \cap\) trans \(\cap\) connex
\(\{ P \mid \; \forall x \forall y (Pxy \supset x \neq y) \; \amp \; P\) is transitive \(\amp \; P\) is connected \(\}\) or \(P\) is a linear ordering
\(\varsigma ` P\) (the series of segments of P)    [∗212·01]
\(P_{\text{lc}} \restriction \! \! \downharpoonright\) D\(`P_{\in}\)
In contemporary terms: the set \(\beta\) is a section of a set \(\alpha = \beta \cup \gamma\) (with respect to an ordering \( \prec\)) iff \(\forall x \forall y (x \in \beta \: \amp \: y \in \gamma \supset x \prec y )\). A segment \(\gamma\) is a section in which if \(\alpha, \beta \in \gamma\) and \(\alpha \prec_{\text{lc}} \beta\) then \(\alpha \subseteq \beta\).

Volume III begins with \(\ast 250\) on well-orderings. An ordinal number is then defined as a class of ordinary similar well-orderings.

Bord (well ordered relations - Bene ordinata)    [∗250·01]
\(\hat{P} \{\) Cl ex \(‘C ‘P \subset \backd ‘ \text{min}_{P} \}\)
\(\{ P \mid \forall \alpha \; [ \: (\alpha \subseteq P \: \amp \: \alpha \neq \emptyset )\supset \exists x \: \exists y \: ( \langle x , y \rangle \in \alpha \; \amp\) \(\; \forall z \: \forall w \;( \langle z , w \rangle \in \alpha \supset \: \sim \! Pzx ) ) \: ]\; \}\)
\(\Omega\) (the well ordered series)    [∗250·02]
Ser \(\; \cap \;\) Bord
\(\Omega\) is the class of well ordered linear orderings.
NO (Ordinal Numbers)    [∗251·01]
Nr “ \(\Omega\)
The ordinal numbers are classes of isomorphic well-ordered linear orderings.

“Zermelo’s Theorem”, that the Multiplicative Axiom (Axiom of Choice) implies that every set can be well-ordered, is derived in \(\ast 258\). This was first proved in Zermelo (1904).

\[\tag*{∗258·32 } \mu \sim \in \: 1 \: . \; \exists ! \in_{\Delta}‘\text{Cl ex} ‘ \mu \: . \supset . \: \mu \: \epsilon \: C“ \Omega \]

15. Quantity (Part VI)

The last section of PM studies the rational numbers and real numbers. They are constructed from relations between entities, such as being longer than, or being heavier than, that might be measured with a ruler or balance scale. Contemporary measurement theory studies the relations among entities in order to determine which scales, or systems of independently characterized numbers, might be assigned to them as representing the “quantities” of various properties, such as length or weight, that they possess. Notice that the real numbers are not constructed as classes of rational numbers, but are of a uniform type as “Dedekind cuts” in a series of classes of ratios.

\(U\) (greater than for inductive cardinals)    [∗300·01]
\((+_c 1)_{\text{po}} \; \upharpoonright \! \! \! \downharpoonright \; ( \text{NC induct } - \iota ` \Lambda)\)
\(\{ \langle n, m \rangle \mid \; n > m \}\)
Prm (relative primes)    [∗302·01]
\(\hat{\rho}\hat{\sigma} \{ \rho , \sigma \: \epsilon \: \text{NC ind} \; :\) \(\;\rho = \xi \times_c \tau \: . \: \sigma = \eta \times_c \tau . \supset_{\xi, \eta, \tau} . \tau = 1\}\)
\(r \; \text{and} \; s \; \text{are}\) relatively prime iff \(\forall j \: \forall l \: \forall k \: [ ( r = j \times k \; \amp \; s = l \times k) \supset k = 1]\)
\((\rho , \sigma) \text{Prm}_{\tau} (\mu , \nu )\) ( \(\rho / \sigma \; \text{is}\; \mu / \nu\) in its lowest terms and \(\tau\) is the highest common factor of \(\mu \; \text{and} \; \nu\) )    [∗302·02]
\(\rho \: \text{Prm} \: \sigma \; . \; \tau \in \text{NC ind} - \iota ` 0 \; . \; \mu = \rho \times_{\text{c}} \tau \; . \; \nu = \sigma \times_{\text{c}} \tau\)
The ratio of \(r/s\) is \(m /n\) in its lowest terms with \(k\) as its highest common factor \(=_{\text{df}}\) \(k\) is the greatest factor such that \(r\) and \(s\) are relatively prime with \(k \; \amp \; k \neq 0 \; \amp \; m = r \times k \; \amp \; n = s \times k\)
\((\rho , \sigma) \text{Prm}(\mu , \nu )\) (the ratio \(\rho / \sigma \; \text{is}\; \mu / \nu \; \text{in its}\) lowest terms)    [∗302·03]
\((\exists \tau) . \: (\rho, \sigma ) \text{Prm}_{\tau} (\mu , \nu)\)
The ratio of \(r/s\) is \(m /n\) in its lowest terms \(=_{\text{df}} \exists k (\text{The ratio of}\; r/s \; \text{ is} \; m /n \text{in its lowest terms with}\; k\) as its highest common factor.)
\(\mu / \nu\) (ratio of relations)    [∗303·01]
\(\hat{R} \hat{S} \{ (\exists \rho, \sigma) . (\rho, \sigma) \text{Prm}(\mu, \nu) . \: \dot{\exists} ! \; R^{\sigma} \: \dot{\cap} \: S^{\rho} \}\)
\(\{ \langle R, S \rangle \mid \exists m, n\) the ratio of \(r/s\) is \(m/n\) in lowest terms and \(\exists x \exists y (R^s xy \amp S^r xy) \}\)
“A distance on a line is a one-one relation whose converse domain (and its domain too) is the whole line. If we call two such distances \(R\) and \(S\), we may say that they have the ratio \(\mu / \nu\) if, starting from some point \(x\) , \(\nu\) repetitions of \(R\) take us to the same point \(y\) as we reach by \(\mu \;\)repetitions of \(S\), i.e., if \(xR^{\nu} y \: . \: x S^{\mu} y\).” (PM III, 260)
Rat def (definite ratios)    [∗303·05]
\(\hat{X} \{ (\exists \mu, \nu) . \: \mu , \nu \: \epsilon \: \text{D}`U \: \cap \; \backd `U . \: X = (\mu / \nu) \upharpoonright \!\!\! \downharpoonright \; t_{11} ` \mu \}\)
The class of ratios restricted to members of a given type, so that the following definitions will not depend on the Axiom of Infinity.
\(X \lt_r Y\) (less than between ratios)    [∗304·01]
\(( \exists \mu, \nu, \rho , \sigma).\) \(\: \mu, \nu, \rho , \sigma \: \epsilon \: \text{Nc ind} \: . \sigma \neq 0 .\) \(\; \mu \times_c \sigma \lt \nu \times_c \rho \: . \; X = \mu / \nu \: . \; Y = \rho / \sigma\)
\(X \lt Y =_{\text{df}} \exists j \: \exists k \: \exists m \: \exists n\) \(\: ( j \times n \lt k \times m \; \amp \; X = j/k \; \amp \; Y = n/m )\)
\(H\) (the relation less than between definite ratios )    [∗304·02]
\(\hat{X} \hat{Y} \{ X,Y \: \in \: \text{Rat def} \: . \: X \lt_r Y \}\)
\(\{ \langle r, s \rangle \mid \; r \: \text{is rational} \; \amp \; s \: \text{is rational} \; \amp \; r \lt s \}\)
“H” is a capital eta “\(\eta\)”, Cantor's symbol for rational numbers.
\(\Theta\) ( real numbers )    [∗310·01]
\((\varsigma ‘ H ) \upharpoonright \!\!\! \downharpoonright \; ( - \iota ‘ \Lambda - \iota ‘\text{D}‘ H)\)
A real number is the lower segment of a section of the series of ratios.

16. Conclusion

This summary cites about 90 definitions. The last eight pages (667–674) of Volume I of the second edition (1925) consists of a complete list of 498 definitions from all three volumes. Correspondence in the Bertrand Russell Archives confirms that this was compiled by Dorothy Wrinch. Her list can be used to trace every one of the other defined expressions of PM back to the notation discussed in this entry.


  • Boolos G. , Burgess, J., and Jeffrey, R., 2007, Computability and Logic, 5th edition, Cambridge: Cambridge University Press.
  • Carnap, R., 1947, Meaning and Necessity, Chicago: University of Chicago Press.
  • Church, A., 1976, “Comparison of Russell’s Resolution of the Semantical Antinomies with That of Tarski”, Journal of Symbolic Logic, 41: 747–60.
  • Chwistek, L., 1924, “The Theory of Constructive Types”, Annales de la Société Polonaise de Mathématique (Rocznik Polskiego Towarzystwa Matematycznego), II: 9–48.
  • Feys, R. and Fitch, F.B., 1969, Dictionary of Symbols of Mathematical Logic, Amsterdam: North Holland.
  • Fraenkel, A.A., 1968, Abstract Set Theory, Amsterdam: North Holland.
  • Gödel, K., 1944, “Russell’s Mathematical Logic”, in P.A. Schilpp, ed., The Philosophy of Bertrand Russell, LaSalle: Open Court, 125–153.
  • Krivine, J-L., 1971, Introduction to Axiomatic Set Theory, Dordrecht: D. Reidel.
  • Landini, G., 1998, Russell’s Hidden Substitutional Theory, New York and Oxford: Oxford University Press.
  • Linsky, B., 1999, Russell’s Metaphysical Logic, Stanford: CSLI Publications.
  • –––, 2009, “From Descriptive Functions to Sets of Ordered Pairs”, in Reduction – Abstraction – Analysis, A. Hieke and H. Leitgeb (eds.), Ontos: Munich, 259–272.
  • –––, 2011, The Evolution of Principia Mathematica: Bertrand Russell’s Manuscripts and Notes for the Second Edition, Cambridge: Cambridge University Press.
  • Quine, W.V.O., 1951, “Whitehead and the Rise of Modern Logic”, The Philosophy of Alfred North Whitehead, ed. P.A. Schilpp, 2nd edition, New York: Tudor Publishing, 127–163.
  • Russell, B., 1905, “On Denoting”, Mind (N.S.), 14: 530–538.
  • Suppes, P., 1960, Axiomatic Set Theory, Amsterdam: North Holland.
  • Turing, A.M., 1942, “The Use of Dots as Brackets in Church’s System”, Journal of Symbolic Logic, 7:146–156.
  • Whitehead, A.N. and B. Russell, [PM], Principia Mathematica, Cambridge: Cambridge University Press, 1910–13, 2nd edition, 1925–27.
  • Whitehead, A.N. and B. Russell, 1962, Principia Mathematica to ∗56, Cambridge: Cambridge University Press.
  • Zermelo, E., 1904, “Proof that every set can be well-ordered”, in From Frege to Gödel, J. van Heijenoort (ed.), Cambridge, Mass: Harvard University Press, 1967, 139–141.

Other Internet Resources

  • Principia Mathematica, reproduced in the University of Michigan Historical Math Collection.
  • Russell’s “On Denoting”, from the reprint in Logic and Knowledge (R. Marsh, ed., 1956) of the original article in Mind 1905, typed into HTML by Cosma Shalizi (Center for the Study of Complex Systems, U. Michigan)


The author would like to thank: Gregory Landini, Dick Schmitt, Franz Fritsche, Rafal Urbaniak, Adam Trybus, Pawel Manczyk, Kenneth Blackwell, and Dirk Schlimm for corrections to this entry.


Mathematica 12.3.1   |   July 2021Reference »

Version 12.3.1 continues an ongoing effort of incremental quality development of the Wolfram Language and Mathematica.

  • Native support for macOS for Apple Silicon
  • Streamlined product activation for site licenses supporting single sign-on
  • New Wolfram|Alpha-Mode notebook features, including 2D typesetting for math constructs, additional support for chemical computations and biomolecular sequences and interactive plot quizzes
  • Numerous other feature enhancements, bug fixes and performance improvements

Mathematica 12.3   |   May 2021Reference »

With more than a hundred new functions, a thousand bug fixes and many substantially updated and enhanced functions, Version 12.3 delivers an important incremental release that makes Mathematica and the Wolfram Language more complete, faster, smoother and more convenient to use across many different areas.

  • Get direct solution values for equations with SolveValues and NSolveValues
  • Carlson elliptic integral functions have been implemented, as well as the Fox H-function
  • Compute the bilateral or double-sided Laplace transform and its inverse with BilateralLaplaceTransform and InverseBilateralLaplaceTransform
  • Plot streamlines for vector field functions and vector field data with StreamPlot3D and ListStreamPlot3D
  • Plot lines through 3D data with ListLinePlot3D
  • Display a graph plot with geographic vertices on a map with GeoGraphPlot
  • New framework for the construction and manipulation of symbolic trees
  • Solve and Reduce now support systems of transcendental equations
  • Root now supports multivariate roots
  • DSolve now solves any linear system of ODEs with rational function coefficients and any linear ODE with q-rational function coefficients
  • New AxisObject to represent a generalized quantitative axis
  • MaterialShading allows for realistic rendering of surface material
  • Change the representation of a region with CanonicalizeRegion and RegionConvert
  • Test whether geometric objects satisfy given properties or relations with GeometricTest
  • Generate different kinds of videos with AnimationVideo, SlideShowVideo and FrameListVideo
  • Improved video processing capabilities, including addition of VideoRecord, VideoTimeStretch, VideoInsert and VideoReplace
  • Parse date strings using locale, time zones and more with FromDateString
  • Implemented SystemsModelControllerData, generated from control design functions with rich data needed to connect and analyze the closed-loop system
  • New computational chemistry functions including MoleculeName, MoleculeSubstructureCount and MoleculeAlign
  • Improvements to several import and export formats and additions of new formats such as SAS7BDAT, DTA and POR
  • Support for Java, Octave and system shells added to ExternalEvaluate
  • Control the overall appearance of Dataset output with DatasetTheme
  • New data structures added: "ImmutableVector" and "KDTree"
  • The function Around has been reimplemented and is now significantly faster
  • New features since 12.2
Mathematica 12.3 word cloud

Mathematica 12.2   |   December 2020Reference »

Version 12.2 adds 228 new functions, expanding Mathematica and the Wolfram Language's functionality in biomolecular sequence operations, PDE modeling, spatial statistics and remote batch job evaluation, plus new notebook interface features and more.

  • Represent a biological sequence such as DNA with BioSequence and perform operations on it with functions BioSequenceTranscribe, BioSequenceComplement, etc.
  • New PDE modeling framework for solving a wide variety of partial differential equations both symbolically and numerically
  • Analyze spatial data and work with point processes with new spatial statistics functions such as SpatialPointData, RandomPointConfiguration, MeanPointDensity, PointCountDistribution and more
  • Submit batch jobs for asynchronous evaluation on external computation providers with RemoteBatchSubmit and RemoteBatchMapSubmit
  • Use Enclose and Confirm to write code with more robust error handling
  • CheckArguments and ArgumentsOptions help check for valid positional and optional arguments in function definitions
  • New x|->f syntax for defining pure functions with named variables
  • Use ApplyTo (//=) to apply a function to a variable and update its value
  • Conveniently select dates from date intervals or lists with DateSelect
  • Improve code debugging and tuning with new EchoEvaluation, EchoLabel and EchoTiming functions
  • New theories and properties added to AxiomaticTheory
  • Solve general convex optimization problems with ConvexOptimization
  • Find solutions to robust optimization problems with RobustConvexOptimization and to parametric convex optimization problems with ParametricConvexOptimization
  • Test for various function properties with FunctionInjective, FunctionSign, FunctionContinuous, etc.
  • Improved support for elliptic functions, including addition of the JacobiEpsilon and JacobiZN (Jacobi zeta) functions
  • Mathematical Lamé functions LameS, LameC, LameSPrime, LameCPrime, LameEigenvalueA and LameEigenvalueB for solving boundary value problems for Laplace's equation in ellipsoidal and spheroconal coordinates
  • Create radar plots with RadialAxisPlot
  • ParallelAxisPlot creates parallel coordinate plots
  • Represent 2D geographic regions with GeoPolygon, a new GeoGraphics primitive
  • Artistically fill 2D graphics primitives with LinearGradientFilling, RadialGradientFilling and ConicGradientFilling
  • Test convexity and compute the convex hull of any region with ConvexRegionQ and ConvexHullRegion
  • Check if a set of points is positively oriented, negatively oriented, collinear or coplanar with PositivelyOrientedPoints, NegativelyOrientedPoints, CollinearPoints and CoplanarPoints, respectively
  • Greatly improved support for video computation, with new functions such as VideoGenerator, VideoIntervals, VideoDelete, VideoMap, VideoMapTimeSeries and more
  • New AnimatedImage object to represent animated GIF, PNG, etc.
  • Use FaceRecognize to find and recognize faces in an image using machine learning
  • Support for several new neural network layer types, including FunctionLayer, CompiledLayer, NetArrayLayer and RandomArrayLayer
  • Several new methods for DimensionReduction and DimensionReduce have been added, including t-SNE, principal component analysis and latent semantic analysis
  • Support for compression and archival formats 7z, ISO, RAR and ZSTD
  • Represent public-key security certificates with SecurityCertificate and import them from common variants of the PEM file format
  • Significant improvement to PDF import
  • Improved Import with support for URLs, updates to FileFormat and addition of FileFormatQ and more
  • Attach a floating cell to content in a notebook window with AttachCell
  • Canvas adds interactive free-form drawing in the notebook interface
  • Create a button that copies its contents when clicked with ClickToCopy
  • Redesigned interface for inserting and editing hyperlinks
  • Added support for inline TeX input with automatic typesetting
  • Create on-demand license entitlements to run standalone Wolfram Engine kernels on a pay-as-you-go basis with CreateLicenseEntitlement
  • Improved Microcontroller Kit with new support for many 32-bit targets from Arduino, Adafruit and SparkFun
  • New features since 12.1
Mathematica 12.2 word cloud

Mathematica 12.1.1   |   June 2020Reference »

Version 12.1.1 is the result of an ongoing effort of incremental quality development of the Wolfram Language. It includes almost a thousand bug fixes, feature enhancements and performance improvements in cryptography, video processing, data science, visualization and more.

  • Cryptography functions are more robust and consistent, including additional hashing methods for GenerateDigitalSignature
  • VideoStream now supports livestreams, and video processing and export functions use H264/AAC codecs by default (when available)
  • Improved performance for Dataset and GridBox constructs and increased stability for TableView
  • RLink can now use custom R installations up to Version 3.6
  • Improved data handling for StackedListPlot and StackedDateListPlot
  • Improvements and fixes for Around, including better handling of asymmetric uncertainties
  • Better typesetting for DateObject
  • Resolved a slowdown in prime-number computations
  • And more

Mathematica 12.1   |   March 2020Reference »

Version 12.1 is our biggest point release so far, expanding Mathematica and the Wolfram Language's functionality in mathematical visualization, audio and image processing, machine learning and neural networks, data access/storage, and more, as well as introducing new systems for video processing and paclet management.

  • Windows and Linux notebook interface updated with HiDPI support for thousands of icons and other assets
  • Windows and macOS interfaces now use Direct3D 11 and Metal API for improved rendering of 3D graphics
  • Spreadsheet-like viewing, editing and manipulation of tabular data with TableView
  • Detailed control of appearance, sorting, data storage and other options for Dataset
  • New DataStructure framework for efficient creation, storage and manipulation of common data structures
  • Compute asymptotic approximations and expansions for mathematical expressions with Asymptotic and DiscreteAsymptotic
  • Mathematical HeunG function representing the regular solution of the general Heun equation
  • Generate distributions over unordered classes with CategoricalDistribution
  • Use GeometricOptimization to find positive values that minimize the posynomial objective subject to given constraints
  • Plot functions, regions and vectors in the complex plane with ComplexRegionPlot, ComplexContourPlot, ComplexVectorPlot, etc.
  • Support for generating proofs from arbitrary predicates (first-order logic) with FindEquationalProof
  • Several improvements and new options for vector visualization
  • Artistically fill 2D polygons with HatchFilling and PatternFilling, and shade 3D objects with StippleShading, ToonShading, HatchShading and other new graphics directives
  • Improved support for geometric operations on geographic regions
  • Display values on maps as smoothly varying colors with GeoDensityPlot or as contours with GeoContourPlot
  • Explore the topology of meshes with MeshConnectivityGraph and NearestMeshCells
  • Train generative models on various types of data with NetGANOperator
  • Include anomaly detection in machine learning functions with AnomalyDetector
  • Set styled annotations for graphs and other objects with Annotate
  • Use Splice to automatically splice expressions into a list
  • Operate on subsets/sublists with functions such as SubsetCases, SubsetPosition, SubsetCount, etc.
  • Represent operator forms with OperatorApplied and CurryApplied, and use ReverseApplied to apply a function with arguments reversed
  • TimeRemaining for retrieving the seconds until a TimeConstrained computation will be terminated
  • DateInterval for representing time intervals continuously or at a given granularity, InfinitePast/InfiniteFuture for representing indefinite time intervals and MinDate/MaxDate for finding extrema in an interval or list of dates
  • View tree graphs of expressions at any level with ExpressionGraph
  • ExternalIdentifier for representing and referencing resources in external identifier systems
  • Search and retrieve values from Wikidata's SPARQL endpoint with WikidataSearch and WikidataData
  • Support for Julia, Ruby and R languages through ExternalEvaluate
  • Identify molecular structures in an image with MoleculeRecognize
  • Upload files to an external storage such as Dropbox with ExternalStorageUpload
  • View and analyze ARK blockchain data and submit transactions
  • Combine and separate entity classes with UnionedEntityClass, IntersectedEntityClass and ComplementedEntityClass
  • Improved support for ZIP and TAR through CreateArchive and ExtractArchive
  • Securely store system passwords, secrets, keys, etc. locally with SystemCredential, and create digital file signatures from a given key with GenerateFileSignature
  • Paclet framework for representing, installing and managing local and remote paclets with functions such as PacletInstall, PacletFind, PacletSites, etc.
  • Improved support for MicrosoftSQL, MySQL and other relational databases
  • Solve the max-cut problem for a graph with FindMaximumCut
  • Use FaceAlign to align faces in images based on facial landmarks
  • FindImageText for detecting the regions of an image containing a character, word, line or block of text
  • Use SpeechCases and SpeechInterpreter to identify text and entities in spoken audio, and compare speech with a reference clip with SpeakerMatchQ
  • Sophisticated video framework for programmatic viewing, processing and analysis of a range of multimedia types
  • Use CharacterNormalize to convert text to various Unicode normalization forms
  • Support for user-provided CUDA Toolkits
  • Create notebooks with free-form, Wolfram|Alpha-like input and output, ready for multistep computations
  • New features since 12
Mathematica 12.1 word cloud

Mathematica 12   |   April 2019Reference »

Version 12.0 greatly expands Mathematica's functionality in mathematics and geometry, geographic visualization, audio and image processing, machine learning and more, including major front end enhancements and system-wide performance improvements.

  • Major OS integration updates to Mac and Linux notebook interfaces using the 64-bit Cocoa API and Qt 5, respectively, with the Linux interface no longer requiring a supporting X server
  • Optimization solvers such as LinearOptimization, QuadraticOptimization, SemidefiniteOptimization, etc. for optimizing convex functions over convex constraints, including vector inequalities such as VectorGreater for modeling vector-valued variables
  • Expanded asymptotics functionality, including asymptotic solutions to algebraic and difference equations and asymptotic approximations to sums
  • Added support for generating arbitrary constants in Integrate, Sum and Product
  • Improved elementary functions support for Integrate, support for large structured systems in Solve and Reduce, DSolve support for nonlinear first-order ODEs and extended coverage and support in FunctionDomain
  • Extended numerical PDE-solving capabilities of NDSolve to solve nonlinear PDEs over arbitrary-shaped regions with the finite element method, and automated idealized n-body interactions using NBodySimulation
  • Geometric capabilities have been further enhanced with the addition of general polygons with holes and polyhedra primitives, as well as improved support across the board
  • New framework to visualize Euclidean geometry and its theorems using GeometricScene and GeometricAssertion
  • Access built-in axiomatic theories for use in symbolic proofs with AxiomaticTheory
  • Visualize complex-valued data and functions using ComplexListPlot, plot real and imaginary components of a function using ReImPlot and plot the modulus of a complex function of a real variable colored by its argument using AbsArgPlot
  • Use Around to describe uncertainty in measured values, with built-in support in visualization functions
  • Create, analyze and modify chemical species using the Molecule function, and visualize structures in two and three dimensions with MoleculePlot and MoleculePlot3D
  • Represent geodetic vectors with GeoVector, and visualize geodetic vector fields using GeoVectorPlot and GeoStreamPlot
  • Generate randomly distributed geo positions in any region using RandomGeoPosition, and analyze distance, area and angular distortion of geo projections using GeoGridUnitDistance, GeoGridUnitArea and GeoGridDirectionDifference
  • Updated default appearance for GraphPlot visualizations, as well as new plot themes and updated properties
  • Color-processing functions such as FindMatchingColor, ImageRecolor and ColorDetect, all powered by the new ColorsNear wrapper to represent a color neighborhood
  • High-level recognition functions such as ImageCases, FacialFeatures,AudioIdentify and SpeechRecognize, and performance enhancements to FindFaces, FeatureSpacePlot, AudioMFCC, etc.
  • Performance improvements in audio analysis functions such as AudioIntervals and windowing functions such as HannWindow, and a new AudioAnnotate framework for annotating audio objects
  • Multi-language support for SpeechSynthesize, as well as improved discovery and searching of available voices through VoiceStyleData
  • ShortTimeFourier for computing and storing properties of short-time Fourier transforms, and InverseSpectrogram for approximating a signal from a magnitude spectrogram
  • The neural network framework has been enhanced with additional pre-trained models, new layers, new encoders and decoders, multi-GPU support and automatic early stopping of training to prevent overfitting
  • ClassifierMeasurements can now handle uncertainties and multi-class averaging, and the "NeuralNetwork" method for Classify has been vastly improved using a self-normalizing net
  • Learn a generalized probability distribution from arbitrary data using LearnDistribution, replace missing values in data by generated values using SynthesizeMissingValues and find anomalous examples in data using FindAnomalies
  • Interact with relational databases symbolically using RelationalDatabase, integrating out-of-core and in-memory techniques to access terabyte-scale data and automatically generating SQL code for popular databases
  • Query remote or in-memory RDF graph databases using SPARQL queries, and import/export RDF data from a variety of RDF formats
  • Support for "on-the-fly" properties, filtering and sorting, aggregation, combining types and sampling of classes in the entity framework
  • Expanded and enhanced data for built-in entities across all domains, including geographic, cultural and historic, life science and medical, financial, astronomical, earth science, transportation, engineering, linguistic and mathematical
  • Efficient partial import and other improvements in scientific formats such as "FITS" and "HDF5", as well as tabular formats such as "CSV" and "XLS"
  • NumericArray for creating the most compact representation of a numeric array
  • Pass arguments to functions in any order or bracket structure with Curry, or map vector functions onto sublists of elements with SubsetMap
  • Information has been greatly extended and modernized to provide information on different object types
  • Initial version of Wolfram Compiler for translating portions of Wolfram Language code into optimized native machine code
  • Improvements to the external evaluation framework, including core performance enhancements, ExternalFunction to directly call external code and WebExecute to control web browsers
  • Create, sign and deploy custom blockchain transactions and interact with computational contracts using BlockchainTransaction, BlockchainTransactionSign, BlockchainTransactionSubmit and BlockchainContractValue
  • New Microcontroller Kit for automating the generation and deployment of code to microcontrollers
  • Bidirectional interface to the Unity game engine
  • Share notebooks to the Wolfram Cloud or via email without leaving the front end
  • Create, store and instantly access functions through the public Wolfram Function Repository and the ResourceFunction system
  • And more
Mathematica 12 word cloud

Mathematica 11.3   |   March 2018Reference »

Version 11.3 expands Mathematica and the Wolfram Language's functionality in mathematical computation, audio and image processing, machine learning and neural networks, system modeling and more, as well as introduces several new front end features.

  • Expanded asymptotics functionality, including relational operators and approximate solutions to integrals and differential equations
  • Apply algebraic operations to both sides of equations and inequalities with ApplySides, and find proofs for equational logic theorems from axioms with FindEquationalProof
  • Create smooth intensities of locations on a map with GeoSmoothHistogram
  • FeatureSpacePlot3D for plotting dimension-reduced feature spaces in 3D
  • CurrentImage support for simultaneous multi-device capture and Linux image capture
  • FacialFeatures extracts facial characteristics such as age, emotion and landmarks, and FindFaces can filter based on these features
  • Efficient audio net encoding and feature extraction for in-core and out-of-core audio objects
  • SpeechSynthesize supports native OS synthesis, and AudioDistance can be used to compute distance measures for audio signals
  • FindTextualAnswer for finding the part of a text that answers a question, improved automation for Classify and Predict and new methods for DimensionReduction
  • Additional pre-trained models, faster RNN training, efficient sequence generation, training session summaries, array sharing, 3D and variable-length convolutions and surgery on networks have been added to the neural network framework
  • Browse, import or generate simulation-ready system models for data extraction, analysis and visualization
  • Blockchain framework for accessing current information about blockchains (e.g. Ethereum or Bitcoin) and storing/retrieving data using a Wolfram blockchain
  • New systems-level functionality for remote process execution, user authentication, process management and network packet capture
  • Directly process mail in live mailboxes by searching, flagging, moving, deleting, etc.
  • SendMail supports HTML emails and automatically embeds objects such as Dataset, TimeSeries and more
  • Improved support for system modeling, raster image, audio, tabular, spreadsheet, systems and network formats
  • Prefetch entities and register custom entities and entity types for immediate computation using the EntityStore system
  • Wolfram Presenter Tools environment for creating live, interactive technical presentations
  • Exchange text, code and other content in real time using the notebook-based Wolfram Chat interface
  • New features since 11.2
Mathematica 11.3 word cloud

Mathematica 11.2   |   September 2017Reference »

Version 11.2 expands Mathematica and the Wolfram Language's cutting-edge functionality in audio and image processing, mathematical computation, task handling and machine learning—plus much more.

  • Compute undirected and multivariate limits, upper and lower limits or discrete limits
  • Solve directly for limiting values in continuous or discrete equations
  • FourierTransform support for periodic functions
  • Perform 3D Boolean operations on regions
  • New methods and options for automated machine learning, with support for extracting word vectors, audio and sequences
  • Expanded neural network layer types with new options and methods
  • Additional support for neural network import/export formats
  • ImageRestyle to recreate one image based on the features of another
  • Get satellite images with GeoImage
  • RegionImage for 3D rasterization of regions
  • Capture the current screen or notebook with CurrentScreenImage and CurrentNotebookImage
  • SpeechSynthesize for generating spoken audio from expressions
  • Support for stereo audio, programmatic audio playback and Linux audio capture
  • Connect to external language interpreters with ExternalEvaluate and StartExternalSession
  • ZeroMQ network programming through the SocketConnect framework
  • Framework for configuring initialization values and computations
  • Manage asynchronous and background tasks with the TaskObject framework
  • Additional documentation for low-level numerical linear algebra
  • New features since 11.1
Mathematica 11.2 word cloud

Mathematica 11.1.1   |   April 2017Reference »

Mathematica 11.1.1 resolves critical issues identified in Version 11.1 and includes performance improvements.

  • Reenabled GPU support for neural networks for Mac
  • Several updates and fixes to neural networks, including proper support for HDF5 format
  • Fixed slowdown in documentation lookup
  • LinearModelFit no longer uses excessive memory
  • Fixed rendering issue with ListPlot3D
  • Fixed incorrect behavior of Suggestions Bar and attached cells on Windows
  • Region operations on rectangles with packed array coordinates no longer crash

Mathematica 11.1   |   March 2017Reference »

Version 11.1 extends Mathematica and the Wolfram Language's state-of-the-art capabilities in machine learning, neural nets, audio processing, robust statistics and much more.

  • Over 130 new functions across a wide range of application areas
  • 20 new neural net layer types, and seamless support for recurrent nets and variable-length sequences
  • NetModel to access a growing repository of complete trained and untrained neural nets
  • FeatureSpacePlot for machine-learning-based visualization of spaces of data, images, text, etc.
  • New machine learning functions, including SequencePredict, ActiveClassification and ActivePrediction
  • Record audio directly in notebooks using AudioCapture, readying it for immediate processing and analysis
  • Do arithmetic (with *, -, etc.) directly on 2D and 3D images
  • Extended support for computational photography and computational microscopy
  • ImageGraphics to find vector graphic approximations to bitmaps
  • Space-filling and fractal region constructors such as HilbertCurve and SierpinskiMesh
  • New robust and spatial statistics, including WinsorizedMean and SpatialMedian
  • GeoBubbleChart, as well as extended support for Callout, ScalingFunctions, etc.
  • Support for derivatives with symbolic orders
  • Higher-resolution geo elevation data
  • Seamlessly integrated external services for web search, web image search and text translation
  • Broad PersistentValue system for storing values between sessions locally, in the cloud, etc.
  • AutoCopy for seamless distribution of separately editable notebooks in the cloud
  • Creation of WolframScript .wls files with a notebook-based script editor
  • Self-executing Wolfram Language scripts extended to Windows
  • New, responsive design for all documentation and online examples
Mathematica 11.1 word cloud

Mathematica 11.0.1   |   September 2016Reference »

Mathematica 11.0.1 resolves critical issues identified in Mathematica 11 and adds many feature refinements.

  • New Audio support for Linux, and improved audio behavior on all platforms
  • Fixed Graphics3D rotation and magnification bug that caused system to crash
  • Significantly improved GIF import performance
  • Fixed regression in Plot and dramatic slowdowns in ParametricPlot, ParametricPlot3D
  • ListPlot labeling and callout functionality now exhibit expected behavior
  • Improved performance and stability of Dataset and related functionality
  • Over 9,000 words added to the English spellchecking dictionary
  • TextRecognize now correctly supports all documented languages
  • Fixed an issue with WolframScript's ability to differentiate between options and script names
  • Compatibility with macOS Sierra and improved stability on other Mac and Linux platforms
  • Resolved partial evaluation and other errors thrown by CenterArray
  • Enabled SetOptions for URLRead, URLExecute and URLDownload

Mathematica 11   |   August 2016Reference »

Mathematica 11 introduces functionality for major new areas, including 3D printing, audio processing, machine learning and neural networks—plus many other new improvements, all built on the underlying Wolfram Language.

  • Over 500 new functions significantly broaden scope in new and existing areas
  • Algorithmically generate, import and directly print 3D models to local or cloud 3D printers
  • New computational audio synthesis, processing and analysis for applications in music and speech
  • New neural network framework gives access to GPU-accelerated deep learning
  • Expanded and enhanced machine learning functionality, including feature extraction and Bayesian optimization
  • Numerous extensions and improvements to the Wolfram Cloud and web operations and data storage
  • Vast new array of visualizations, from statistical to geographic to anatomical, and improved presentation options
  • Performance and feature enhancements to already industry-leading symbolics, numerics and geometry
  • Expanded geographics, including new geo data entities, map backgrounds, projections and more
  • New computational photography, plus more tools for image and signal processing
  • New and improved support for random matrices, time series and quantities in probability and statistics
  • Experimental Wolfram channel framework for asynchronous communications between cloud, desktop and embedded systems
  • Execute Wolfram Language code from anywhere—locally or in the cloud—with new WolframScript command-line interpreter
  • Richer functional programming constructs thanks to list- and array-processing enhancements
  • More powerful text and language processing, and increased multilingual support
  • Real-time spellchecker augmented with dictionaries for technical terms, proper names and support for some 25 languages
  • Improved code appearance, autocompletion and error messages help increase user productivity
  • Faster, more flexible access to the growing Wolfram Knowledgebase, including support for arbitrary datasets
  • And more
Mathematica 11.0 word cloud

Mathematica 10.4.1   |   April 2016Reference »

Mathematica 10.4.1 addresses several critical issues identified in recent releases.

  • Provides workaround for a bug in Mac OS X 10.11.4 that could prevent Mathematica from being launched under default Gatekeeper policies
  • Resolves OpenGL issues that were causing graphics instability and failures, especially with regard to Graphics3D and Manipulate rendering, rotation and dynamics
  • Addresses activation problems for Linux users who may have experienced difficulties
  • Resolves slowdown when images are directly evaluated in the front end
  • Restores expected behavior for users experiencing errors when launching multiple notebooks on Windows
  • Corrects evaluation errors returned by ListPlot [Table[…]] and CoefficientRules
  • Restores behavior of Clear Formatting menu item
  • Show now works with GeoGraphics objects
  • Stability improvements to Code Assist functionality
  • Refines support and documentation for DateFormat when using Interpreter
  • For Japanese Edition users, updated dialog messages returned when moving a notebook from the cloud to the desktop

Mathematica 10.4   |   March 2016Reference »

  • Support for pattern matching and significant speedup in many operations for Association
  • Ability to implicitly define an Entity by value and property
  • New CloudExpression for representation of an expression whose value is persistently stored in the cloud
  • Experimental user interface functionality for creating interactive applications using AskFunction
  • Scaled plots can now be generated using ListPlot, ListLinePlot and DateListPlot through the ScalingFunctions option, plus all-new Dendrogram for constructing a dendrogram from the hierarchical clustering of list elements
  • New textual computation and data functionality for spellchecking and word frequency analysis, plus substantially improved TextSearch and Snippet
  • New graphs and networks capabilities for PlanarGraph construction, and for determination of ConnectedGraphComponents for many different graph types
  • Experimental ClusterClassify to generate a ClassifierFunction based on clusters found in numerical, textual and image data, as well as dates and times
  • New symbolic computation functions DifferenceQuotient and GreenFunction, plus additional functionality for number theory and signal processing
  • Added geometric computation formats and functions for constructing meshes from arrays, as well as for computing region properties such as inertia or general integral moments, bounding regions for point sets and measures of regions defined by parameter formulas
  • Expanded support for Quantity data in probability and statistics, including new function QuantityDistribution
  • Experimental DynamicGeoGraphics function for creating dynamic, interactive 2D geographic images that can be panned and zoomed
  • New DynamicImage interactive image viewer for panning and zooming in large images, and dramatically expanded HighlightImage functionality for highlighting specified regions of interest
  • Function and data labeling capability improvements for some functions through the Labeled wrapper or the PlotLabels option
  • Support for Arduino Yun to directly interface with the Wolfram Data Drop
  • API connectivity via ServiceConnect to seven more external services—including Google Analytics, SurveyMonkey, FRED and PubMed—for data retrieval and analysis
  • Over 20 new interpreter types for use in Interpreter and related constructs, including deployed smart form fields
  • Added support for 24 new font families for additional customization of web and print work

Mathematica 10.3.1   |   December 2015Reference »

  • Restored performance when sending strings using WSTP (Wolfram Symbolic Transfer Protocol)
  • Stability improvements to image processing functionality, including Image3D, ColorConvert and HighlightImage
  • Resolved slowdowns in evaluation time for numerical interpolation functions
  • Better tracking of Undo history and options when using copy and paste
  • More robust import of image file formats, including JPEG and TIFF
  • Restored expected behavior for some arguments of TravelDirections and Nearest
  • Refined support for international language and translation, including Spanish spellchecking and Chinese search
  • Many user interface updates, including to DynamicModule, ActionMenu and Frames

Mathematica 10.3   |   October 2015Reference »

  • Access to identities and properties of the extensive collection of mathematical functions in the Wolfram Language, via MathematicalFunctionData
  • New geocomputation functionality such as TravelDirections, TravelDistance and more for computing travel times, methods and related data
  • New AnatomyData and AnatomicalStructure interpreter types for computation and deployment with connectivity to the Wolfram Cloud
  • Ability to group, copy and identify specific instances of entities for more automated and efficient computation
  • Support for random matrix distributions and properties of random matrices
  • Comparative operator forms such as GreaterThan, LessThan and EqualTo for testing expressions
  • Enhanced natural language understanding with added linguistic data for string manipulation of words and alphabets
  • New date and time functionality for representation and handling of time zones
  • Symbolic support for solving partial differential equations and eigenproblems
  • More convenient network programming options for host lookup, IP address representation and socket connection
  • Improved functionality for processing and analysis of text elements and structure, including definitions, parts of speech, translations and more
  • New service connection options to GoogleCalendar, GoogleContacts and Yelp data, as well as to arXiv and CrossRef for academic research
  • Numerous improvements to core Wolfram Language and Wolfram System interface functionality on the desktop and in the cloud

Mathematica 10.2   |   July 2015Reference »

  • Translated code captions to help non-English speakers understand Wolfram Language code
  • New volume and discrete data visualization functionality: SliceDensityPlot3D and ListStepPlot
  • Numerical solving of eigenvalues and eigenfunctions for ODEs and PDEs
  • New capabilities for text search and analysis
  • New and updated methods for both supervised and unsupervised machine learning
  • Automatic mail processing with MailReceiverFunction and MailResponseFunction
  • Time series and statistics updates, including support for intensity measures in Histogram
  • Added operations for lists and associations, including automatic removal of elements using Nothing
  • Expanded cloud usage and deployment options for permissions control, scheduled tasks, data logging and local objects
  • Image processing techniques for computational photography including tone mapping, exposure combination and more
  • Extensive geometric computing enhancements for basic and mesh regions
  • An international Alphabet, plus a full range of technical and other character sets and encodings
  • Support for more geometry and data file formats, with dramatically improved STL import/export and streamlined JSON

Mathematica 10.0.2   |   December 2014Reference »

  • Support for OS X 10.9.5 and OS X 10.10
  • New EmbedCode support for languages, including R, Scala, Perl and Ruby
  • New optimizations, supported inputs, performance improvements and bug fixes for geometric computation
  • Additional options for DocumentGenerator, including DocumentDescription, GeneratedDocumentBinding, GeneratedDocumentHistoryLength and more
  • Additional options for DateFunction, SunPosition and MoonPosition
  • Performance enhancements and bug fixes for statistics
  • Numerous visualization bug fixes, new icons for maps and a wider range of inputs for NumberLinePlot
  • Replace, ReplaceAll and ReplacePart now work with Associations
  • Thirty-four new Interpreter types
  • Mathematica and Wolfram Cloud support for ScheduledTask
  • Several fixes and updates to VerificationTest and notebook testing
  • New options for Animator, including AnimationRunTime and AnimationTimeIndex

Mathematica 10.0.1   |   September 2014Reference »

  • Image processing updates and enhancements, including new image effects, Image3D options for WatershedComponents and built-in color support for Nearest and FindClusters
  • Simplified SendMail syntax for easier usability
  • New operators and compositions of operators enabled for associations functions such as Dataset and Query
  • RLink compatibility update for R 3.1.
  • New Interpreter types such as "Beach", "CountryClass", "OilField" and "Reef"
  • New optimizations, supported inputs and path types for geographic computation and regions
  • Machine learning functions Classify and Predict now support NeuralNetwork as a built-in classification method
  • Stability and performance improvements for smoother user interface experience on all platforms
  • Improved coverage of supported types in SemanticImport and optimizations for handling anonymous columns, empty fields, headerless data and import of files with long file names
  • Updates and improvements to a wide range of areas including weather data, associations, symbolic integration and measure computations over implicit regions
  • Stability and performance updates for select plot and chart types and for numerical solvers including NDSolve, ParametricNDSolve, SparseArray and MatrixExp
  • Compatibility update for InterpolatingFunction saved with Version 9 and earlier

Mathematica 10.0.0   |   July 2014Reference »

  • First version based on the complete Wolfram Language, with over 700 new functions
  • Highly automated machine learning, including pre-trained models for a variety of tasks
  • Integrated geometric computation, including symbolic geometry, mesh-based regions and named and formula regions
  • Advanced geographic computation, including the powerful new GeoGraphics function for map construction
  • Computation with structured datasets and semantic data import
  • Ability to create and deploy powerful forms on the web that understand natural language input
  • Fundamental new associations construct allows highly efficient lookup and updating
  • Expanded random process framework, including hidden Markov models and automated time series analysis
  • Flexible system for representing dates and times symbolically and performing computations on them
  • Built-in plot themes to easily tailor plots for specific audiences, from business reports to technical articles
  • Enhanced 2D and 3D image processing with extended color support
  • Nonlinear control systems and enhanced signal processing
  • Finite element analysis, enhanced PDEs, symbolic delay differential equations and hybrid differential equations
  • Formal math operators, dimensional variables and extended algebra and graph computation
  • Automatic report generation and string, file and HTML templating
  • Connectivity for working with external devices, services and APIs, plus URL manipulation
  • Built-in unit testing
  • Integration with the Wolfram Cloud
  • Access to the expanded Wolfram Knowledgebase
  • And more

Mathematica 9.0.1   |   January 2013Reference »

  • All Featured Examples are now available in-product
  • Improved the stability of the Suggestions Bar
  • Suggestions Bar offers more accurate suggestions
  • Improved performance and stability for image processing functions, extending coverage for Image3D
  • Installation workflow and stability improvements for Linux configurations
  • Increased the performance and robustness of many random processes functions
  • Various Input Assistant improvements: full support of Linux platforms, better support for dual monitors, better option placeholders and eliminated repeated options

Mathematica 9.0.0   |   November 2012Reference »

  • The new Wolfram Predictive Interface, which dramatically improves navigation and discovery of Mathematica's functionality
  • Highly integrated units support, including free-form linguistic entry, conversions and dimensional consistency checking across graphics and numeric and symbolic calculations
  • New graph and network analysis, including a built-in link for Facebook, LinkedIn, Twitter and more
  • Direct CDF deployment with live data at runtime and other enhanced features with Mathematica Enterprise Edition, plus preview modes that emulate Wolfram CDF Player and Wolfram Player Pro
  • Major new data science, probability and statistics functionality—including survival and reliability analysis, Markov chains, queueing theory, time series and stochastic differential equations
  • 3D volumetric image processing and out-of-core technology that scales up performance to very large 2D and 3D images and video
  • Integrated analog and digital signal processing
  • Built-in symbolic tensors with support for arrays of any rank, dimension and symmetry
  • Highly customizable interactive gauges for dashboards and controls
  • Systemwide support for automatic legends for plots and charts
  • R fully integrated into Mathematica workflow for seamless data and code exchange
  • Full client-side web access for exchanging data with remote servers and interacting with web APIs
  • Updated look for slide shows with new style templates and background images
  • And more

Mathematica 8.0.4   |   October 2011Reference »

  • New menu options and an interactive wizard for deploying to CDF
  • New functions CDFInformation and CDFDeploy for programmatically deploying CDF files
  • New download progress indicator for the CDF browser plugin
  • Improved stability, speed and security of the CDF browser plugin
  • Tested under Mac OS X Lion
  • Improved memory use of the Share function when storing large sets of data
  • Updated MKL library to improve performance
  • New syntax coloring to warn about use of Module variable in Dynamic
  • Performance improvements to citation functions
  • Improved behavior of optimized variables in compiled conditional statements
  • Improved front end behavior when saving untitled notebooks under new versions of Linux

Note: Mathematica 8.0.2 was released and distributed exclusively with gridMathematica 8.0.2. No new features were introduced at that time. Version 8.0.3 was a development branch for Wolfram CDF Player 8.0.3.

Mathematica 8.0.1   |   March 2011Reference »

  • Many new automatic simplifications for derived distributions, including affine transformations, sums of variables, parameter mixtures and censored and truncated distributions
  • Improved results for Dot with large (> 1,000,000 elements) lists of integers
  • Improved stability under Intel Sandy Bridge CPUs by including a new version of the Intel Math Kernel Library
  • Performance and robustness improvements for many graph and network operations
  • Improved startup time of the front end
  • Improved the creation of MathLink TCPIP connections under certain special network conditions
  • Improved export of Real and "Real32" images to TIFF, to be compatible with more external TIFF image viewers
  • Improved functionality and stability of Home Edition by including more 64-bit components

Mathematica 8.0   |   November 2010Reference »

  • Integration with Wolfram|Alpha
  • Automated probability and expectation computation
  • Over a hundred new statistical distributions and many statistics visualizations
  • Generation of new statistical distributions directly from data, formulas or other distributions
  • Enhanced graphs and networks and linear algebra capabilities
  • More than 60 exotic equity option solvers, and over 100 built-in financial indicators
  • Built-in control systems capabilities
  • Enhanced image analysis features
  • Integrated wavelet analysis
  • Built-in CUDA and OpenCL support
  • Automatic C code generation
  • Symbolic C code manipulation and optimization
  • Enhanced 2D and 3D graphics, including texture mapping and hardware-accelerated 3D rendering
  • Built-in web browser plugin
  • And more

Mathematica 7.0.1   |   March 2009Reference »

  • Performance enhancements to core image-processing functions
  • Right-click menu for quick image manipulation
  • New tutorials, "How to" guides and screencasts
  • Thousands of new examples in the documentation
  • Improved documentation search
  • Integration with mathematical handwriting-recognition features of Windows 7
  • Integration with the upcoming release of gridMathematica Server

Mathematica 7.0   |   November 2008Reference »

  • Built-in parallel high-performance computing (HPC)
  • Integrated image processing
  • New on-demand curated data, including genomic data, protein data and current and historical weather data
  • Many new usability and productivity features
  • Charting and information visualization
  • Vector field visualization
  • Comprehensive spline support, including NURBS
  • Industrial-strength Boolean computation
  • Statistical model analysis
  • Integrated geodesy and GIS data
  • Many symbolic computation breakthroughs, including discrete calculus, sequence recognition and transcendental roots
  • And more

Mathematica 6.0.3   |   June 2008Reference »

  • Comprehensive list of standard extra packages added to the Documentation Center
  • Improvements to package documentation
  • Improved options handling for MatrixForm and TableForm
  • Enhanced front end stability with Manipulate containing a selected graphic
  • Improved options handling for ListPlot
  • Improved handling of AxesLabel and Ticks combinations
  • Improved handling of numerical data without spaces in Protein Data Bank (PDB) import
  • Changed winding in LightWave Object (LWO) export to better adhere to industry standards
  • Improved interactivity under Linux with compositing window managers, such as Compiz
  • Improved font handling on Ubuntu Hardy and Fedora Core 9

Mathematica 6.0.2   |   February 2008Reference »

  • New Virtual Book documentation with updated Mathematica Book content
  • New Function Navigator, an easily browsable overview of all Mathematica objects
  • Several additional documentation enhancements, including performance improvements, indexing and link trails
  • Full 64-bit performance on Intel Macs
  • Improved performance of Import and Export converters on Mac and Unix
  • Significant speedup in import of binary data files
  • Improved handling of graphics when exporting to TeX and PDF
  • Enhanced import of metadata from FITS astronomical image files
  • New coordinate-picking tool and improved highlighting of graphical selections for interactive graphics

Mathematica 6.0.1   |   July 2007Reference »

  • Enhanced automatic and manual proxy settings for internet connectivity
  • More extensive documentation on legacy Mathematica functions
  • Significantly improved WSTP (Wolfram Symbolic Transfer Protocol) performance on Mac and Unix systems
  • Improved performance of various Import and Export converters
  • Faster ListPlot, ListPlot3D and Plot3D for large numbers of points
  • Improved help-system initialization
  • Extensions to automatic file type recognition for Import
  • Complete support for scaled FontSizevalues
  • Enhancements to Table, CSV, TSV and MathML import
  • Evaluate Notebook menu item, and Magnification submenu
  • Additional Mathematica function examples and tutorials
  • Updates to curated data

Mathematica 6.0   |   May 2007Reference »

  • Dynamic interactivity, allowing sophisticated interactive interfaces to be created from single lines of input
  • High-impact adaptive visualization for automated creation of high-fidelity function and data graphics
  • Language for data integration, including automatic integration of hundreds of standard data formats
  • Load-on-demand curated data for math, physics, chemistry, finance, geography, linguistics and more
  • Symbolic interface construction for immediate creation of arbitrary interfaces from simple programs
  • Automated computational aesthetics, with algorithmic optimization for visual presentation
  • Unification of active graphics and controls with flowing text and input
  • And more

Mathematica 5.2   |   July 2005Reference »

  • All-platform support for 64-bit addressing
  • Multicore support on major platforms
  • Multithreaded numerical linear algebra
  • 64-bit-enhanced arbitrary-precision numerics
  • Vector-based performance enhancements
  • Automatic binary installation selection
  • Bundled notebook indexing for desktop search
  • SSH support for secure remote kernels
  • vCard and RSS import
  • New algorithms for symbolic differential equations
  • Enhanced performance for linear Diophantine systems
  • Enhanced quadratic quantifier elimination
  • Singular-case support for high-level special functions
  • Enhanced statistics charts
  • MathematicaMark 5.2 benchmark now covering grids and clusters

Mathematica 5.1   |   November 2004Reference »

  • Industrial-strength string manipulation
  • Built-in universal database connectivity
  • Highly optimized binary data I/O
  • Additional import-export formats, including XLS and AVI
  • Integrated web services support
  • 2D and 3D automated network visualization
  • High-performance array visualization
  • Numerical linear algebra performance enhancements
  • Fully integrated piecewise functions
  • Integration over implicitly defined regions
  • Event handling in numerical differential equations
  • New algorithms for symbolic differential equations
  • Cluster analysis capabilities added
  • Interactive exploration tool for differential equations
  • MathematicaMark benchmarking tool
  • GUIKit interface and application builder built in

Mathematica 5.0   |   June 2003Reference »

  • Record-breaking speed through processor-optimized numerical linear algebra
  • Full support for high-speed sparse linear algebra
  • New-generation optimized numerical solvers for ordinary and partial differential equations
  • Major new algorithms for solving equations and inequalities symbolically over different domains
  • Fully integrated solver for differential algebraic equations
  • High-performance optimization and linear programming, including interior point method
  • More generalized numeric solvers expanded to accept vector and general array variables
  • Industry-leading solver for recurrence equations
  • Broader support for assumptions in symbolic computation
  • Included .NET/Link, providing full integration with Microsoft's .NET Framework
  • Flexible import and export of DICOM, PNG, SVG and sparse matrix formats
  • Optimized versions for 64-bit hardware and operating systems
  • New quick-start interactive tutorial

Mathematica 4.2   |   June 2002Reference »

  • Transparent Java integration with J/Link 2.0 and built-in Java Runtime Engine
  • Improved linear programming and optimization
  • Speed and robustness improvements for many numerical functions
  • Improved simplifier
  • Statistics enhancements, including new ANOVA package
  • New bundled Combinatorica package for combinatorics and graph theory
  • New bundled AuthorTools package for technical publishing
  • Slide show environment for presentations
  • New import and export formats, including FITS and STDS
  • XML extensions that allow Mathematica notebooks and expressions to be stored as XML
  • New bundled XML tools package for symbolic XML manipulation
  • Support for XHTML export, including stylesheets
  • Extended MathML 2.0 support

Mathematica 4.1   |   November 2000Reference »

  • Macintosh OS X version introduced (Version 4.1.5 in 2001)
  • Greatly enhanced symbolic differential equation solvers
  • Enhanced Mathematica pattern matcher and compiler, increasing speed and minimizing memory consumption
  • New standard package for integration over inequality-defined regions and piecewise functions
  • Dramatic speed improvements in statistics functions
  • Conversion between linear systems of equations and matrices
  • Java integration with J/Link 1.1
  • Improved MathML integration on the web
  • Support for saving in IBM techexplorer format
  • New and faster import and export filters for Excel files, tabular data and compressed BMP, DXF and STL
  • Support for real-time manipulation of 3D graphics on Linux and Unix platforms
  • Sound support under X
  • Routines for plotting graphics defined by inequalities
  • Support for PowerPC Linux and AlphaLinux
  • Discrete trigonometric package
  • Enhanced look and feel for the X front end

Mathematica 4.0   |   May 1999Reference »

  • Extensive enhancements in speed and efficiency in numerical calculation
  • Publishing documents in a variety of formats
  • Spellchecking and hyphenation in the notebook interface
  • Direct import and export from over 20 standard data, graphics and sound file formats
  • Extended range and improved functions for data analysis including correlation, convolution and a new Fourier transform algorithm
  • Support for handling computations in specified algebraic domains
  • Network license management availability on all platforms
  • Enhancements to many built-in Mathematica functions

Mathematica 3.0   |   September 1996Reference »

  • Interactive mathematical typesetting system
  • Algebraic numbers
  • Mathematica compiler extended to work with arrays of machine numbers
  • Support for nonlinear least squares with Levenberg–Marquardt technique
  • Improved interpolation (important in finding the result of numerical ordinary differential equations)
  • Interval arithmetic
  • New functions for simplifying and transforming expressions
  • Optimized Groebner basis functions
  • Many new special functions
  • Exception-based programming flow control

Mathematica 2.2   |   June 1993Reference »

  • Windows front end with new notebook commands
  • Separate front end on Macintosh
  • X front end
  • WSTP (Wolfram Symbolic Transfer Protocol) for Windows
  • Linux version
  • Isocontour plotting routine added
  • Package for symbolic solutions of first-order partial differential equations added
  • Ten other packages added in areas such as three-dimensional contour plotting, variational calculus and music
  • New help features, including online manuals on X Windows and a Function Browser on Macintosh and NeXT
  • Faster numerical solutions of sparse linear systems of equations
  • Symbolic definite integration expanded to include tests for nonintegrable singularities and also handle branch cuts in the range of integration

Mathematica 2.1   |   June 1992Reference »

  • Upgrade of contour plotting algorithm
  • Unix WSTP (Wolfram Symbolic Transfer Protocol) enhancements and documentation
  • WSTP (Wolfram Symbolic Transfer Protocol) for Macintosh
  • QuickTime animations for Macintosh version
  • Support for Windows 3.1
  • Unix and PC thin-version installation for reduced memory usage
  • New packages added in areas such as nonlinear fitting, binary file manipulation, Dirac delta functions and sound synthesis

Mathematica 2.0   |   January 1991 (first major update)Reference »

  • Numerical ordinary differential equation solver
  • Numerical compiler
  • Linear algebra improvements
  • Implementation of Risch algorithm for Integrate
  • Symbolic ordinary differential equation solver
  • Series extended to many special functions
  • ParametricPlot3D added
  • Many extra embellishments for graphics
  • Improved hidden-surface elimination for 3D graphics
  • Many string and file operations
  • WSTP (Wolfram Symbolic Transfer Protocol) protocol for interprocess and network-based communication
  • Sound support
  • Support of foreign character sets
  • Error detection and debugging
  • Notebook front end

Mathematica 1.2   |   August 1989Reference »

  • Macintosh front end
  • Support for remote kernels
  • Symbolic integration greatly enhanced
  • Rudimentary differential equation-solving capabilities with DSolve
  • Solving of transcendental and other equations that require explicit use of inverse functions
  • Exact interpolating polynomials
  • LinearProgramming, ConstrainedMax and ConstrainedMin added
  • MatrixPower and MatrixExp added
  • Groebner bases added
  • Modulus options added to Det, Inverse and LinearSolve
  • Statistics and Graphics standard packages added
  • Many new graphics options and features, including axes and labels for 3D graphics
  • Much more efficient multivariate polynomial GCD (greatest common divisor) and factorization

Mathematica 1.0   |   June 1988Reference »

  • Initial release of Mathematica
  1. 2001 mercury cougar
  2. Act glassdoor
  3. Staples connect business directory
  4. Kia 2014 prices
  5. Craiglist tulsa cars

Volume 13

A Toolbox for Quasirandom Simulation »

Michael Carter

Published December 30, 2011

Quasirandom simulation uses low-discrepancy or quasirandom sequences in place of pseudorandom sequences, producing faster convergence in problems of moderate dimensions. The objective of this article is both pedagogical and practical: to provide an easily understood introduction to the construction of Sobol sequences and a toolkit for constructing and evaluating such sequences. Read More »

MathPDE: A Package to Solve PDEs by Finite Differences »

K. Sheshadri,Peter Fritzson

Published December 21, 2011

A package for solving time-dependent partial differential equations (PDEs), MathPDE, is presented. It implements finite-difference methods. After making a sequence of symbolic transformations on the PDE and its initial and boundary conditions, MathPDE automatically generates a problem-specific set of Mathematica functions to solve the numerical problem, which is essentially a system of algebraic equations. MathPDE then internally calls MathCode, a Mathematica-to-C++ code generator, to generate a C++ program for solving the algebraic problem, and compiles it into an executable that can be run via MathLink. When the algebraic system is nonlinear, the Newton-Raphson method is used and SuperLU, a library for sparse systems, is used for matrix operations. This article discusses the wide range of PDEs that can be handled by MathPDE, the accuracy of the finite-difference schemes used, and importantly, the ability to handle both regular and irregular spatial domains. Since a standalone C++ program is generated to compute the numerical solution, the package offers portability. Read More »

Sampling Distribution of ML Estimators: Cauchy Example »

Jan Vrbik

Published December 4, 2011

We show how to use the Edgeworth series to construct an accurate approximation to the sampling distribution of the maximum likelihood estimator of a parameter of a Cauchy distribution. We then demonstrate the accuracy of this approximation, valid even for relatively small samples. Read More »

The Acoustic Wave Equation in the Expanding Universe: Sachs-Wolfe Theorem »

Wojciech Czaja,Zdzisław A. Golda,Andrzej Woszczyna

Published October 28, 2011

This article considers the acoustic field propagating in the radiation-dominated () universe of arbitrary space curvature (). The field equations are reduced to the d’Alembert equation in an auxiliary static Robertson-Walker spacetime and dispersion relations are discussed. Read More »

Computing Mixed-Design (Split-Plot) ANOVA »

Sylvain Chartier,Denis Cousineau

Published October 5, 2011

The mixed, within-between subjects ANOVA (also called a split-plot ANOVA) is a statistical test of means commonly used in the behavioral sciences. One approach to computing this analysis is to use a corrected between-subjects ANOVA. A second approach uses the general linear model by partitioning the sum of squares and cross-product matrices. Both approaches are detailed in this article. Finally, a package called MixedDesignANOVA is introduced that runs mixed-design ANOVAs using the second approach and displays summary statistics as well as a mean plot. Read More »

Two Basic Results Concerning Random Walks on Graphs »

Greg Markowsky

Published September 21, 2011

Two problems involving random walks on graphs are studied. First, the starting point from which a random walk on is most likely to hit a given point before another given point is determined. Second, the slowest mixing initial distribution under a random walk on a given finite graph is found. Read More »

Betting Two Patterns against Each Other »

Jan Vrbik

Published September 1, 2011

We present a technique for computing the probability that a specific pattern of successes and failures is generated randomly before another such pattern, thus winning the corresponding game. The program we build for this purpose finds the mean and standard deviation of the number of trials needed to complete one round of such a game. It can be used to maximize the probability of winning a game by choosing the best possible pattern, and also by adjusting the probability of a success. Finally, we verify our theoretical results by a Monte Carlo simulation. Read More »

A Study of Super-Nonlinear Motion of a Simple Pendulum »

Haiduke Sarafian

Published August 9, 2011

Two identically charged simple pendulums are allowed to swing in a vertical plane, acted upon by gravity and their mutual electrostatic interactive repulsive forces. We show that the inclusion of the electrostatic interaction makes the movement of the pendulums highly nonlinear. To describe the motion, we quantify the relevant time-dependent kinematic and dynamic quantities. Our analysis also includes an extended study of equal and oppositely charged pendulums. Motivated by the outcomes of the calculation, the author manufactured a real-life replica of the study demonstrating the features of the interactive pendulums; a photograph of the replica is included. Read More »

Fisher Discrimination with Kernels »

Hugh Murrell,Kazuo Hashimoto,Daichi Takatori

Published July 26, 2011

Fisher first introduced the Fisher linear discriminant back in 1938. After the popularization of the support vector machine (SVM) and the kernel trick it became inevitable that the Fisher linear discriminant would be kernelized. Sebastian Mika accomplished this task as part of his Ph.D. in 2002 and the kernelized Fisher discriminant (KFD) now forms part of the large-scale machine-learning tool Shogun. In this article we introduce the package MathKFD. We apply MathKFD to synthetic datasets to demonstrate nonlinear classification via kernels. We also test performance on datasets from the machine-learning literature. The construction of MathKFD follows closely in style the construction of MathSVM by Nilsson and colleagues. We hope these two packages and others of the same ilk will eventually be integrated to form a kernel-based machine-learning environment for Mathematica. Read More »

Solving Kepler’s Problem »

Jan Vrbik

Published July 20, 2011

We demonstrate how the equation for the location of a satellite orbiting a large primary can be solved with the help of quaternions. We also treat the issue of orbit determination, given (1) a location and a velocity of the satellite; (2) two observations of its location; and (3) three or more values of its position. Read More »

Mathematica Essentials: Intro \u0026 Overview (Wolfram Language)

Launching Version 12.3 of Wolfram Language & Mathematica

Livecoding & Q&A With Stephen Wolfram

Look What We Made in Five Months!

It’s hard to believe we’ve been doing this for 35 years, building a taller and taller tower of ideas and technology that allow us to reach ever further. In earlier times we used to release the results of efforts only every few years. But in recent times we’ve started doing incremental (“.1”) releases that deliver our latest R&D achievements—both fully fleshed out, and partly as “coming attractions”—much more frequently.

We released Version 12.2 on December 16, 2020. And today, just five months later, we’re releasing Version 12.3. There are some breakthroughs and major new directions in 12.3. But much of what’s in 12.3 is just about making Wolfram Language and Mathematica better, smoother and more convenient to use. Things are faster. More “But what about ___?” cases are handled. Big frameworks are more completely filled out. And there are lots of new conveniences.

There are also the first pieces of what will become large-scale structures in the future. Early functions—already highly useful in their own right—that will in future releases be pieces of major systemwide frameworks.

One way to assess a release is to talk about how many new functions it contains. For Version 12.3 that number is 111 (or about 5 new functions per development-week). It’s a very impressive level of R&D productivity. But particularly for 12.3 it’s just part of the story; there are also 1190 bug fixes (about a quarter for externally reported bugs), and 105 substantially updated and enhanced functions.

Incremental releases are part of our commitment to open development. We’ve also been sharing more kinds of functionality in open-source form (including more than 300 new functions in the Wolfram Function Repository). And we’ve been doing our unique thing of livestreaming our internal design processes. For Version 12.3 it’s once again possible to see just where and how design decisions were made, and the reasoning behind them. And we’ve also had great input from our community (often in real time during livestreams)—that has significantly enhanced the Version 12.3 that we are delivering today.

By the way, when we say “Version 12.3” of Wolfram Language and Mathematica we mean desktop, cloud and engine: all three versions are being released today.

Lots of Little New Conveniences

What should “just work”? What should be made easier? Ever since Version 1.0 we’ve been working hard to figure out what little conveniences we can add to make the Wolfram Language ever more streamlined.

Version 12.3 has our latest batch of conveniences, scattered across many parts of the language. A new dynamic that’s emerged in this version is functions that have essentially been “prototyped” in the Wolfram Function Repository, and then “upgraded” to be built into the system.

Here’s a first example of a new convenience function: . The function —originally introduced in Version 1.0—has a very flexible way of representing its results, that allows for different numbers of variables, different numbers of solutions, etc.

&#10005Solve[x^2 + 3 x + 1 == 0, x]

But often you’re happy to assume a fixed structure for the solution, and you just want to know the values of variables. And that’s what gives:

&#10005SolveValues[x^2 + 3 x + 1 == 0, x]

By the way, there’s also an that gives approximate numerical values:

&#10005NSolveValues[x^2 + 3 x + 1 == 0, x]

Another example of a new convenience function is . Let’s say you want the 10th digit of π. You can always use and then pick out the digit you want:

&#10005RealDigits[Pi, 10, 20]

But now you can also just use (where now by “10th digit” we’re assuming you mean the coefficient of 10-10):

&#10005NumberDigit[Pi, -10]

Back in Version 1.0, we just had . In Version 10.3 (2015) we added , and then in Version 11.1 (2017) we added . Now in Version 12.3—to round out this family of default types of sorting—we’re adding . The default sorting sort (as produced by ) is:

&#10005Subsets[{a, b, c, d}]

But here’s true lexicographic order, like you would find in a dictionary:

&#10005LexicographicSort[Subsets[{a, b, c, d}]]

Another small new function in Version 12.3 is :

&#10005StringTakeDrop["abcdefghijklmn", {2, 5}]

Having this as a single function makes it easier to use in functional programming constructs like this:

&#10005FoldPairList[StringTakeDrop, "abcdefghijklmn", {2, 3, 4, 5}]

It’s always an important goal to make “standard workflows” as straightforward as possible. For example, in handling graphs we’ve had since Version 8.0 (2010). It gives a list of the vertices that can be reached from a given vertex. And for some things that’s exactly what one wants. But sometimes it’s much more convenient to get the subgraph (and in fact in the formalism of our Physics Project that subgraph—that we view as a “geodesic ball”—is a rather central construct). So in Version 12.3 we’ve added :

&#10005VertexOutComponentGraph[CloudGet[""], 10, 4]

Another example of a small “workflow improvement” is in . typically takes a list of regions of interest to highlight in the image. But functions like don’t just make lists of regions in an image; instead they produce a “label matrix” that puts numbers to label different regions in an image. So to make the workflow smoother, in Version 12.3 we let it directly use a label matrix, assigning different colors to the differently labeled regions:

&#10005HighlightImage[ CloudGet[""], MorphologicalComponents]

One thing we work hard to ensure in the Wolfram Language is coherence and interoperability. (And in fact, we have a whole initiative around this that we call “Language Completeness & Consistency”, whose weekly meetings we regularly livestream.) One of the various facets of interoperability is that we want functions to be able to “eat” any reasonable input and turn it into something they can “naturally” handle.

And as a small example of this, something we added in Version 12.3 is automatic conversion between color spaces. by default means the RGB color red (). But now

means turns that red into red in hue space:

&#10005Hue[Red] // InputForm

Let’s say you’re running a long computation. You often want to get some indication of the progress that’s being made. In Version 6.0 (2007) we added , and in subsequent versions we’ve added automatic built-in progress reporting for some functions, for example . But now we have an initiative underway to systematically add progress reporting for all sorts of functions that can end up doing long computations. ( globally switches it off.)

&#10005VideoMap[ColorConvert[#Image, "Grayscale"] &, Video["ExampleData/bullfinch.mkv"]]

We work hard in Wolfram Language to make sure that we pick good defaults, for example for how to display things. But sometimes you have to tell the system what kind of “look” you want. And in Version 12.3 we’ve added the option to specify “themes” for how objects should be displayed.

Underneath, each theme is just setting specific options, which you could set yourself. But the theme is “bank switching” options in a convenient way. Here’s a basic dataset with default formatting:


Here it is looking more “lively” for the web:

&#10005Dataset[IdentityMatrix[6], DatasetTheme -> "Web"]

You can give various “theme directives” too:

&#10005Dataset[IdentityMatrix[6], DatasetTheme -> "AlternatingColumnBackgrounds"]

As well as additional hints:

&#10005Dataset[IdentityMatrix[6], DatasetTheme -> {"AlternatingColumnBackgrounds", LightGreen}]

I’m not sure why we didn’t think of it before, but in Version 11.3 (2018) we introduced a very nice “user interface innovation”: . And in Version 12.3 we’ve added another piece of polish to iconization. If you select a piece of an expression, then use Iconize in the context (“right-click”) menu, an appropriate subpart of the expression will get iconized, even if the selection you made might have included an extra comma, or been something that can’t be a strict subpart of the expression:

Let’s say you generate an object that takes a lot of memory to store:


By default, the object is kept in your kernel session, but it’s not stored directly in your notebook—so it won’t persist after you end your current kernel session. In Version 12.3 we’ve added some options for where you can store the data:


One important area where we put lots of effort into making things “just work” is in importing and exporting of data. The Wolfram Language now supports about 250 external data formats, with for example new statistical data formats like SAS7BDAT, DTA, POR and SAV being added in Version 12.3.

Lots of Things Got Faster

In addition to all the effort we put into creating new functionality for Wolfram Language, we’re also always trying to make existing functionality better, and faster. And in Version 12.3 there are lots of things that are now faster. One particularly large group of things got faster because of advances in our compiler technology that allow a broader range of Wolfram Language functionality to be compiled directly into optimized machine code. An example of a beneficiary of this is .

Here’s a computation with :

&#10005Sin[Around[RandomReal[], 0.001]]

In Version 12.2 doing this 10,000 times takes about 1.3 seconds on my computer:

&#10005Do[Sin[Around[RandomReal[], 0.001]], 10^4] // Timing

In Version 12.3, it’s roughly 100 times faster:

&#10005Do[Sin[Around[RandomReal[], 0.001]], 10^4] // Timing

There are lots of different reasons that things got faster in Version 12.3. In the case of , for example, we were able to use a new and much better algorithm. Here it is in 12.2:

&#10005Permanent[Table[2.3 i/j, {i, 15}, {j, 15}]] // Timing

And now in 12.3:

&#10005Permanent[Table[2.3 i/j, {i, 15}, {j, 15}]] // Timing

Another example is date parsing: converting dates from textual to internal form. The main advance here came from realizing that date parsing is often done in bulk, so it makes sense to adaptively cache parts of the operation. And the result, for example in parsing a million dates, is that what used to take many minutes now takes just a few seconds.

One more example is , which in Version 12.3 is typically 2 to 4 times faster than in Version 12.2. The reason for this speedup is somewhat subtle. Back when was first introduced in Version 6.0 (2007) data transfer speeds between processes were an issue, and so it was a good optimization to compress any data being transferred. But today transfer speeds are much higher, and we have better optimized array data structures—and so compression no longer makes sense, and removing it (together with other codepath optimization) allows to be significantly faster.

An important advance in Version 12.1 was the introduction of , allowing direct use of optimization data structures (implemented through our new compiler technology). Version 12.3 introduces several new data structures. There’s for fast prefix-based lookups (think and ), and there’s for fast geometric lookups (think ). There’s also now , which is basically like an ordinary Wolfram Language list, except that it’s optimized for fast appending.

In addition to speed improvements in the computational kernel, Version 12.3 has user interface speed improvements too. Particularly notable is significantly faster rendering on Windows platforms, achieved by using DirectWrite and making use of GPU capabilities.

Pushing the Math Frontier

Version 1 of Mathematica was billed as “A System for Doing Mathematics by Computer”, and—for more than three decades—in every new version of Wolfram Language and Mathematica there’ve been innovations in “doing mathematics by computer”.

For Version 12.3 let’s talk first about symbolic equation solving. Back in Version 3 (1996) we introduced the idea of implicit “ object” representations for roots of polynomials, allowing us to do exact, symbolic computations even without “explicit formulas” in terms of radicals. Version 7 (2008) then generalized to also work for transcendental equations.

What about systems of equations? For polynomials, elimination theory means that systems really aren’t a different story from individual equations; the same objects can be used. But for transcendental equations, this isn’t true anymore. But for Version 12.3 we’ve now figured out how to generalize objects so they can work with multivariate transcendental roots:

&#10005Solve[Sin[x y] == x^2 + y && 3 x E^y == 2 y E^x + 1 && -3 < x < 3 && -3 < y < 3, {x, y}, Reals]

And because these objects are exact, they can for example be evaluated to any precision:

&#10005N[First[x /. %], 150]

In Version 12.3 there are also some new equations, involving elliptic functions, where exact symbolic results can be given, even without objects:

&#10005Reduce[JacobiSN[x, 2 y] == 1, x]

A major advance in Version 12.3 is being able to solve symbolically any linear system of ODEs (ordinary differential equations) with rational function coefficients.

Sometimes the result involves explicit mathematical functions:

&#10005DSolve[{Derivative[1][x][t] == -((4 x[t])/t) + (4 y[t])/t, Derivative[1][y][t] == (4/t - t/4) x[t] - (4 y[t])/t}, {x[t], y[t]}, t]

Sometimes there are integrals—or differential roots—in the results:

&#10005DSolveValue[{Derivative[1][y][x] + 2 Derivative[1][z][x] == z[x], (-3 + x) x^2 (y[x] + z[x]) + Derivative[1][z][x] == (1 + 3 x^2) z[x]}, {y[x], z[x]}, x] // Simplify

Another ODE advance in Version 12.3 is full coverage of linear ODEs with q-rational function coefficients, in which variables can appear explicitly or implicitly in exponents. The results are exact, though they typically involve differential roots:

&#10005DSolve[2^x y[x] + ((-1 + 2^x) \!\(\*SuperscriptBox[\(y\), TagBox[ RowBox[{"(", "4", ")"}], Derivative], MultilineFunction->None]\)[x])/(1 + 2^x) == 0, y[x], x]

What about PDEs? For Version 12.2 we introduced a major new framework for modeling with numerical PDEs. And now in Version 12.3 we’ve produced a whole 105-page monograph about symbolic solutions to PDEs:


Here’s an equation that in Version 12.2 could be solved numerically:

&#10005eqns = {Laplacian[u[x, y],{x, y}] == 0, u[x, 0] == Sin[x] && u[0, y] == Sin[y] && u[2, y] == Sin[2 y]};

Now it can be solved exactly and symbolically as well:

&#10005DSolveValue[eqns, u[x, y], {x, y}]

In addition to linear PDEs, Version 12.3 extends the coverage of special solutions to nonlinear PDEs. Here’s one (with 4 variables) that uses Jacobi’s method:

&#10005DSolveValue[(\!\( \*SubscriptBox[\(\[PartialD]\), \(x\)]\(u[x, y, z, t]\)\))^4 == (\!\( \*SubscriptBox[\(\[PartialD]\), \(y\)]\(u[x, y, z, t]\)\))^2 + (\!\( \*SubscriptBox[\(\[PartialD]\), \(z\)]\(u[x, y, z, t]\)\))^3 \!\( \*SubscriptBox[\(\[PartialD]\), \(t\)]\(u[x, y, z, t]\)\), u[x, y, z, t], {x, y, z, t}]

Something added in 12.3 that both supports PDEs and provides new functionality for signal processing is bilateral Laplace transforms (i.e. integrating from –∞ to +∞, like a Fourier transform):

&#10005BilateralLaplaceTransform[Sin[t] Exp[-t^2], t, s]

Ever since Version 1, we’ve prided ourselves on our coverage of special functions. Over the years we’ve been able to progressively extend that coverage to more and more general special functions. Version 12.3 has several new long-sought classes of special functions. There are the Carlson elliptic integrals. And then there is the Fox H-function.

Back in Version 3 (1996) we introduced which dramatically expanded the range of definite integrals that we could do in symbolic form. is defined in terms of a Mellin–Barnes integral in the complex plane. It’s a small change in the integrand, but it’s taken 25 years to unravel the necessary mathematics and algorithms to bring us now in Version 12.3 .

is a very general function—that encompasses all hypergeometric pFq and Meijer G functions, and much beyond. And now that is in our language, we’re able to start the process of expanding our integration and other symbolic capabilities to make use of it.

Symbolic Optimization Breakthrough

A major step forward in Version 12.0 was the introduction of industrial-strength convex optimization, routinely handling problems involving millions of variables in the linear case and thousands in the nonlinear case. In Version 12.0 everything had to be numerical (in 12.1 we added integer optimization). In Version 12.3 we’re now adding the possibility for symbolic parameters in large-scale linear and quadratic problems, as in this small example:

&#10005MinValue[{(x - 1)^2 + (2 y - 1)^2, x + 2 y <= a + b && 2 x - y <= a - b + 1 && x - 2 y <= 2 a - b + 1}, {x, y}]
&#10005Plot3D[%, {a, -5, 5}, {b, -5, 5}]

In typical convex optimization computations not involving symbolic parameters one aims only for approximate numerical results, and it wasn’t clear whether there was any general method for getting exact numerical results. But for Version 12.3 we’ve found one, and we’re now able to give exact numerical results which you can, for example, evaluate to any precision you want.

Here’s a geometric optimization problem—which can now be solved exactly in terms of transcendental root objects:

&#10005MinValue[{x^(3/4) + 2 y^(4/5) + 3 z^(5/7), x y z <= 1 && x^E y^\[Pi] z >= 2 && x > 0 && y > 0 && z > 0}, {x, y, z}]

Given such an exact solution, it’s now possible to do numerical evaluation to any precision:

More with Graphs

In case one ever doubted that graphs are important, our Wolfram Physics Project has made it pretty clear over the past year that at the lowest level physics is all about graphs. And in fact our whole Physics Project was basically made possible by the rich graph functionality in the Wolfram Language.

In Version 12.3 we’ve continued to expand that functionality. Here, for example, is a new 3D visualization function for graphs:

&#10005LayeredGraphPlot3D[KaryTree[255], BoxRatios -> {1, 1, 1}]

And here’s a new 3D graph embedding:

&#10005Graph3D[GridGraph[{20, 20}], GraphLayout -> "SphericalEmbedding"]

We’ve been able to find spanning trees in graphs since Version 10 (2014). In Version 12.3, however, we’ve generalized to directly handle objects—like geo locations—that have some kind of coordinates. Here’s a spanning tree based on the positions of capital cities in Europe:

&#10005FindSpanningTree[ EntityClass["Country", "Europe"][ EntityProperty["Country", "CapitalCity"]]]

And now in Version 12.3 we can use the new to plot this on a map:


By the way, in a “geo graph” there are “geo” ways to route the edges. For example, you can specify that they follow (when possible) driving directions (as provided by ):

&#10005GeoGraphPlot[%%, GraphLayout -> "Driving"]

Euclid Meets Descartes, and More

We’ve been doing a lot with geometry in the past few years, and there’s more to come. In Version 12.0 we introduced “Euclid-style” synthetic geometry. In Version 12.3 we’re connecting to “Descartes-style” analytic geometry, converting geometric descriptions to algebraic formulas.

Given three symbolically specified points, can give the algebraic condition for them to be collinear:

&#10005GeometricTest[{{a, b}, {c, d}, {e, f}}, "Collinear"]

For the particular case of collinearity, there’s a specific function for doing the test:

&#10005CollinearPoints[{{a, b}, {c, d}, {e, f}}]

But is much more general in scope—supporting more than 30 kinds of predicates. This gives the condition for a polygon to be convex:

&#10005GeometricTest[Polygon[{{a, b}, {1, 2}, {3, 3}, {4, 7}}], "Convex"]

And this gives the condition for a polygon to be regular:

&#10005GeometricTest[Polygon[{{a, b}, {c, d}, {1, 1}, {2, 3}}], "Regular"]

And here’s the condition for three circles to be mutually tangent (and, yes, that ∃ is a little “post Descartes”):

&#10005GeometricTest[{Circle[{0, 0}, r], Circle[{a, b}, s], Circle[{c, d}, t]}, "Tangent"]

Version 12.3 also has enhancements to core computational geometry. Most notable are and , that essentially convolve regions with each other. effectively finds the whole (“Minkowski sum”) “union region” obtained by translating one region to every point in another region.

Why is this useful? It turns out there are lots of reasons. One example is the “piano mover problem” (AKA the robot motion planning problem). Given, say, a rectangular shape, is there a way to maneuver it (in the simplest case, without rotation) through a house with certain obstacles (like walls)?

Basically what you need to do is take the rectangular shape and “dilate the room” (and the obstacles) with it:

&#10005RegionDilation[\!\(\* GraphicsBox[ TagBox[ DynamicModuleBox[{Typeset`mesh = HoldComplete[ BoundaryMeshRegion[{{0., 0.}, {0.11499999999999999`, 0.}, { 0.11499999999999999`, 0.22999999999999998`}, {0., 0.22999999999999998`}}, { Line[{{1, 2}, {2, 3}, {3, 4}, {4, 1}}]}, Method -> { "EliminateUnusedCoordinates" -> True, "DeleteDuplicateCoordinates" -> Automatic, "DeleteDuplicateCells" -> Automatic, "VertexAlias" -> Identity, "CheckOrientation" -> Automatic, "CoplanarityTolerance" -> Automatic, "CheckIntersections" -> Automatic, "BoundaryNesting" -> {{0, 0}}, "SeparateBoundaries" -> False, "TJunction" -> Automatic, "PropagateMarkers" -> True, "ZeroTest" -> Automatic, "Hash" -> 740210533488462839}]]}, TagBox[GraphicsComplexBox[{{0., 0.}, {0.11499999999999999`, 0.}, { 0.11499999999999999`, 0.22999999999999998`}, {0., 0.22999999999999998`}}, {Hue[0.6, 0.3, 0.95], EdgeForm[Hue[0.6, 0.3, 0.75]], TagBox[PolygonBox[{{1, 2, 3, 4}}], Annotation[#, "Geometry"]& ]}], MouseAppearanceTag["LinkHand"]], AllowKernelInitialization->False], "MeshGraphics", AutoDelete->True, Editable->False, Selectable->False], DefaultBaseStyle->{ "MeshGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.1, 1, 0.7]}, ImageSize->{27.866676879084963`, Automatic}]\), CloudGet[""]]

Then if there’s a connected path “left over” from one point to another, then it’s possible to move the piano along that path. (And of course, the same kind of thing can be done for robots in a factory, etc. etc.)

is also useful for “smoothing out” or “offsetting” shapes, for example, for CAD applications:

&#10005Region[RegionDilation[Triangle[], Disk[]]]

At least in simple cases, one can “go Descartes” with it, and get explicit formulas:

&#10005RegionDilation[Triangle[], Disk[]]

And, by the way, this all works in any number of dimensions—providing a useful way to generate all sorts of “new shapes” (like a cylinder is the dilation of a disk by a line in 3D).

Yet More Visualization

The Wolfram Language has a huge collection of built-in visualization functions—but there always seem to be more that we figure out can be added. We’ve had since Version 1.0 (1988); we added in Version 6.0 (2007)—and now in Version 12.3 we’re adding .

Here’s a 3D random walk rendered with :

&#10005ListLinePlot3D[ AnglePath3D[RandomReal[{0 \[Degree], 20 \[Degree]}, {1000, 3}]]]

If you give multiple lists of data, plots them each separately:

&#10005ListLinePlot3D[Table[Array[BitXor[#, n] &, 100], {n, 8}], Filling -> Axis]

We first introduced plotting of vector fields in Version 7.0 (2008), with functions like and —that were substantially enhanced in Versions 12.1 and 12.2. In Version 12.3 we’re now adding (as well as ). Here’s a plot of streamlines for a 3D vector field, colored by field strength:

&#10005StreamPlot3D[{y + x, y - x, z}, {x, -2, 2}, {y, -2, 2}, {z, -3, 3}]

It’s one thing to make a plot; it’s another to give it axes. There’s a remarkable amount of subtlety in specifying how axes—and their ticks and labels—should be drawn. This is going to be a longer story, but in Version 12.3 we have the beginnings of symbolic axis specifications.

Axes work a bit like arrows: first you give the “core structure”, then you say how to annotate it. Here’s an axis that is linearly labeled from 0 to 100 on a line:

&#10005Graphics[AxisObject[Line[{{-1, -1}, {1, 1}}], {0, 100}]]

And here’s a spiral axis (AKA labeling on a parametric curve):

&#10005Graphics[ AxisObject[ Line[Table[{t Cos[t], t Sin[t]}, {t, 0, 5 Pi, 0.1}]], {0, 100}]]

And, yes, it works in more ornate cases as well:

&#10005Graphics[AxisObject[HilbertCurve[3], {0, 100}, TickPositions -> 50]]

Among many subtle issues, there’s the question of how tick labels should be oriented with respect to the axis:

&#10005Graphics[ AxisObject[ Line[Table[{t Cos[t], t Sin[t]}, {t, 0, 5 Pi, 0.1}]], {0, 100}, TickPositions -> 50, TickLabelOrientation -> "Parallel"]]

Talking of subtleties in graphics, here’s another one that’s addressed in Version 12.3. Say you’re making a dashed line:

&#10005Graphics[{Dashing[{.2, .15}], Thickness[.05], Line[{{0, 0}, {1, .1}}]}]

The numbers inside indicate the length of each dash, and between dashes. In Version 12.3 there’s an additional number you can give: the offset of the start of the first dash:

&#10005Graphics[{Dashing[{.2, .15}, 0.1], Thickness[.05], Line[{{0, 0}, {1, .1}}]}]

And something else is that you can control the “caps” on each dash, here making them rounded:

&#10005Graphics[{Dashing[{.2, .15}, 0.1, "Round"], Thickness[.05], Line[{{0, 0}, {1, .1}}]}]

These may all seem like micro-details—but they’re the kinds of things that are important in having Wolfram Language graphics look really good. Like, for example, if you have two dashed axes that cross, you probably want the “dashings” to line up:

&#10005Graphics[{{Dashing[{0.1`, 0.05`}, 0.0195`], Line[{{-1, 0}, {1, 0}}]}, {Dashing[{0.1`, 0.05`}, 0.0195`], Line[{{0, -1}, {0, 1}}]}}, ImageSize -> 200]

Golden Knots, and Other Material Matters

We’ve talked about it almost since Version 1.0. And now finally in Version 12.3 it’s here! Realistic rendering of surfaces as materials. Here’s a knot, rendered as if it’s made of gold:

&#10005Graphics3D[{MaterialShading["Gold"], KnotData["SolomonSeal", "ImageData"]}]

Here’s a surface, in velvet:

&#10005Plot3D[Sin[x + y^2], {x, -7, 7}, {y, -2, 2}, PlotStyle -> MaterialShading["Velvet"]]

In Version 12.3 we’re supporting a bit more than a dozen standard named materials (with more to come). But is also set up to allow you to specify in detail explicit physical and geometrical properties of materials—so you can get effects like this:


13 mathematica

Wolfram Language & Mathematica Releases

Announcements & Events

Launching Version 12.3 of Wolfram Language & Mathematica

Look What We Made in Five Months!

It’s hard to believe we’ve been doing this for 35 years, building a taller and taller tower of ideas and technology that allow us to reach ever further. In earlier times we used to release the results of efforts only every few years. But in recent times we’ve started doing incremental (“.1”) releases that deliver our latest R&D achievements—both fully fleshed out, and partly as “coming attractions”—much more frequently.

We released Version 12.2 on December 16, 2020. And today, just five months later, we’re releasing Version 12.3. There are some breakthroughs and major new directions in 12.3. But much of what’s in 12.3 is just about making Wolfram Language and Mathematica better, smoother and more convenient to use. Things are faster. More “But what about ___?” cases are handled. Big frameworks are more completely filled out. And there are lots of new conveniences.

There are also the first pieces of what will become large-scale structures in the future. Early functions—already highly useful in their own right—that will in future releases be pieces of major systemwide frameworks.

Stephen Wolfram

Announcements & Events

Launching Version 12.2 of Wolfram Language & Mathematica: 228 New Functions and Much More…

Yet Bigger than Ever Before

When we released Version 12.1 in March of this year, I was pleased to be able to say that with its 182 new functions it was the biggest .1 release we’d ever had. But just nine months later, we’ve got an even bigger .1 release! Version 12.2, launching today, has 228 completely new functions!

Stephen Wolfram

Best of Blog

In Less Than a Year, So Much New: Launching Version 12.1 of Wolfram Language & Mathematica

We're pleased that despite the coronavirus pandemic and its impact on so many people and businesses we're still able to launch today as planned... (Thanks to our dedicated team and the fact that remote working has been part of our company for decades...)

The Biggest .1 Release Ever

It’s always an interesting time. We’re getting ready to wrap up a .1 version---to release the latest fruits of our research and development efforts. “Is it going to be a big release?”, I wonder. Of course, I know we’ve done a lot of work since we released Version 12.0 last April. All those design reviews (many livestreamed). All those new things we’ve built and figured out.

But then we start actually making the list for the new version. And---OMG---it goes on and on. Different teams are delivering on this or that project that started X years ago. A new function is being added for this. There's some new innovation about that. Etc.

We started this journey a third of a century ago when we began the development of Version 1.0. And after all these years, it's amazing how the energy of each new release seems to be ever greater.

And as we went on making the list for Version 12.1 we wondered, "Will it actually be our biggest .1 release ever?". We finally got the answer: "Yes! And by a lot".

Counting functions isn't always the best measure, but it's an indication. And in Version 12.1 there are a total of 182 completely new functions---as well as updates and enhancements to many hundreds more.

Stephen Wolfram

Announcements & Events

Stephen Wolfram

Announcements & Events

Roaring into 2018 with Another Big Release: Launching Version 11.3 of the Wolfram Language & Mathematica

The Release Pipeline

Last September we released Version 11.2 of the Wolfram Language and Mathematica—with all sorts of new functionality, including 100+ completely new functions. Version 11.2 was a big release. But today we’ve got a still bigger release: Version 11.3 that, among other things, includes nearly 120 completely new functions.

This June 23rd it’ll be 30 years since we released Version 1.0, and I'm very proud of the fact that we’ve now been able to maintain an accelerating rate of innovation and development for no less than three decades. Critical to this, of course, has been the fact that we use the Wolfram Language to develop the Wolfram Language—and indeed most of the things that we can now add in Version 11.3 are only possible because we’re making use of the huge stack of technology that we’ve been systematically building for more than 30 years.

We’ve always got a large pipeline of R&D underway, and our strategy for .1 versions is to use them to release everything that’s ready at a particular moment in time. Sometimes what's in a .1 version may not completely fill out a new area, and some of the functions may be tagged as “experimental”. But our goal with .1 versions is to be able to deliver the latest fruits of our R&D efforts on as timely a basis as possible. Integer (.0) versions aim to be more systematic, and to provide full coverage of new areas, rounding out what has been delivered incrementally in .1 versions.

In addition to all the new functionality in 11.3, there’s a new element to our process. Starting a couple of months ago, we began livestreaming internal design review meetings that I held as we brought Version 11.3 to completion. So for those interested in “how the sausage is made”, there are now almost 122 hours of recorded meetings, from which you can find out exactly how some of the things you can now see released in Version 11.3 were originally invented. And in this post, I'm going to be linking to specific recorded livestreams relevant to features I'm discussing.

What’s New?

OK, so what’s new in Version 11.3? Well, a lot of things. And, by the way, Version 11.3 is available today on both desktop(Mac, Windows, Linux) and the Wolfram Cloud. (And yes, it takes extremely nontrivial software engineering, management and quality assurance to achieve simultaneous releases of this kind.)

Stephen Wolfram

Announcements & Events

It’s Another Impressive Release! Launching Version 11.2 Today

Our Latest R&D Output

I’m excited today to announce the latest output from our R&D pipeline: Version 11.2 of the Wolfram Language and Mathematica---available immediately on desktop (Mac, Windows, Linux) and cloud.

It was only this spring that we released Version 11.1. But after the summer we're now ready for another impressive release---with all kinds of additions and enhancements, including 100+ entirely new functions:

Stephen Wolfram

Announcements & Events

The R&D Pipeline Continues: Launching Version 11.1

A Minor Release That's Not Minor

I'm pleased to announce the release today of Version 11.1 of the Wolfram Language (and Mathematica). As of now, Version 11.1 is what's running in the Wolfram Cloud---and desktop versions are available for immediate download for Mac, Windows and Linux. What's new in Version 11.1? Well, actually a remarkable amount. Here's a summary:

Stephen Wolfram

Announcements & Events

Today We Launch Version 11!

Note: There have been additional updates to Mathematica. Read about the updates in Version 11.1, Version 11.2 and Version 11.3 I'm thrilled today to announce the release of a major new version of Mathematica and the Wolfram Language: Version 11, available immediately for both desktop and cloud. Hundreds of us have been energetically working on building this for the past two years---and in fact I've personally put several thousand hours into it. I'm very excited about what's in it; it's a major step forward, with a lot of both breadth and depth---and with remarkably central relevance to many of today's most prominent technology areas. It's been more than 28 years since Version 1 came out---and nearly 30 years since I started its development. And all that time I've been continuing to pursue a bold vision---and to build a taller and taller stack of technology. With most software, after a few years and a few versions, not a lot of important new stuff ever gets added. But with Mathematica and the Wolfram Language it's been a completely different story: for three decades we've been taking major steps forward at every version, progressively conquering vast numbers of new areas.

Stephen Wolfram

Announcements & Events

Launching Mathematica 10—
with 700+ New Functions and a Crazy Amount of R&D

We've got an incredible amount of new technology coming out this summer. Two weeks ago we launched Wolfram Programming Cloud. Today I'm pleased to announce the release of a major new version of Mathematica: Mathematica 10. We released Mathematica 1 just over 26 years ago---on June 23, 1988. And ever since we've been systematically making Mathematica ever bigger, stronger, broader and deeper. But Mathematica 10---released today---represents the single biggest jump in new functionality in the entire history of Mathematica.

Stephen Wolfram

Announcements & Events

Mathematica 9 Is Released Today!

I'm excited to be able to announce that today we're releasing Mathematica 9---and it's big! A whole array of new ideas and new application areas... and major advances along a great many algorithmic frontiers. Next year Mathematica will be 25 years old (and all sorts of festivities are planned!). And in that quarter century we've just been building and building. The core principles that we began with have been validated over and over again. And with them we've created a larger and larger stack of technology, that allows us to do more and more, and reach further and further. From the beginning, our goal has been an ambitious one: to cover and automate every area of computational and algorithmic work. Having built the foundations of the Mathematica language, we started a quarter century ago attacking core areas of mathematics. And over the years since then, we have been expanding outward at an ever-increasing pace, conquering one area after another. As with Wolfram|Alpha, we'll never be finished. But as the years go by, the scope of what we've done becomes more and more immense. And with Mathematica 9 today we are taking yet another huge step. So what's new in Mathematica 9? Lots and lots of important things. An amazing range---something for almost everyone. And actually just the very size of it already represents an important challenge. Because as Mathematica grows bigger and bigger, it becomes more and more difficult for one to grasp everything that's in it.

Stephen Wolfram

Announcements & Events

Mathematica 8!

Mathematica 8 is released today! It's a huge and important release. With dramatic breakthroughs—and major broadening of the whole scope of Mathematica. After 8 versions and 22 years most software systems have decayed to slow and lumbering development. But not Mathematica. In fact, with Mathematica it's quite the opposite. As the years go by, Mathematica development is actually speeding up. What has made that happen? Partly it's our tenacious and broadening pursuit of ambitious long-term goals. But partly, it's a remarkable reflection—and validation—of the core principles on which Mathematica has always been built.

Stephen Wolfram

Announcements & Events

Surprise! Mathematica 7.0 Released Today!

In the middle of last year, we finished our decade-long project to reinvent Mathematica, and we released Mathematica 6.

We introduced a great many highly visible innovations in Mathematica 6—like dynamic interactivity and computable data. But we were also building a quite unprecedented platform for developing software.

And even long before Mathematica 6 was released, we were already working on versions of Mathematica well beyond 6.

And something remarkable was happening. There’d been all sorts of areas we’d talked about someday being in Mathematica. But they’d always seemed far off.

Well, now, suddenly, lots of them seemed like they were within reach. It seemed as if everything we’d built into Mathematica was coming together to make a huge number of new things possible.

All over our company, efforts were starting up to build remarkable things.

It was crucial that over the years, we’d invested a huge amount in creating long-term systems for organizing our software development efforts. So we were able to take those remarkable things that were being built, and flow them into Mathematica.

And at some point, we realized we just couldn’t wait any longer. Even though Mathematica 6 had come out only last year, we had assembled so much new functionality that we just had to release Mathematica 7.

So 18 months after the release of Mathematica 6, I’m happy to be able to announce that today Mathematica 7 is released!

Stephen Wolfram

Mathematica Essentials: Intro \u0026 Overview (Wolfram Language)

Wolfram Mathematica

For the 1967-founded company, see Mathematica (company)

For the programming language used in this program, see Wolfram Language and Mathematica (disambiguation).

Computational software program

Mathematica Logo.svg
Developer(s)Wolfram Research
Initial releaseJune 23, 1988; 33 years ago (1988-06-23)[1]
Stable release12.3.1 (June 20, 2021; 3 months ago (2021-06-20)) [±][2]
Written inWolfram Language,[3]C/C++, Java[4]
PlatformWindows (10),[5]macOS, Linux, Raspbian, online service.[6] All platforms support 64-bit implementations.[7](list)
Available inEnglish, Chinese, Japanese
TypeComputer algebra, numerical computations, information visualization, statistics, user interface creation
LicenseProprietary this at Wikidata

Wolfram Mathematica is a software system with built-in libraries for several areas of technical computing that allow machine learning, statistics, symbolic computation, manipulating matrices, plotting functions and various types of data, implementation of algorithms, creation of user interfaces, and interfacing with programs written in other programming languages. It was conceived by Stephen Wolfram, and is developed by Wolfram Research of Champaign, Illinois.[8][9] The Wolfram Language is the programming language used in Mathematica.[10]

Notebook interface[edit]

Wolfram Mathematica (called Mathematica by some of its users) is split into two parts: the kernel and the front end. The kernel interprets expressions (Wolfram Language code) and returns result expressions, which can then be displayed by the front end.

The original front end, designed by Theodore Gray[11] in 1988, consists of a notebook interface and allows the creation and editing of notebook documents that can contain code, plaintext, images, and graphics.[12]

Alternatives to the Mathematica front end include Wolfram Workbench—an Eclipse-based integrated development environment (IDE) that was introduced in 2006. It provides project-based code development tools for Mathematica, including revision management, debugging, profiling, and testing.[13]

There is also a plugin for IntelliJ IDEA-based IDEs to work with Wolfram Language code that in addition to syntax highlighting can analyze and auto-complete local variables and defined functions.[14] The Mathematica Kernel also includes a command line front end.[15]

Other interfaces include JMath,[16] based on GNU Readline and WolframScript[17] which runs self-contained Mathematica programs (with arguments) from the UNIX command line.

High-performance computing[edit]

Capabilities for high-performance computing were extended with the introduction of packed arrays in version 4 (1999)[18] and sparse matrices (version 5, 2003),[19] and by adopting the GNU Multi-Precision Library to evaluate high-precision arithmetic.

Version 5.2 (2005) added automatic multi-threading when computations are performed on multi-core computers.[20] This release included CPU-specific optimized libraries.[21] In addition Mathematica is supported by third party specialist acceleration hardware such as ClearSpeed.[22]

In 2002, gridMathematica was introduced to allow user level parallel programming on heterogeneous clusters and multiprocessor systems[23] and in 2008 parallel computing technology was included in all Mathematica licenses including support for grid technology such as Windows HPC Server 2008, Microsoft Compute Cluster Server and Sun Grid.

Support for CUDA and OpenCLGPU hardware was added in 2010.[24]

In 2019, support was added for compiling Wolfram Language code to LLVM.[25]

Connections to other applications, programming languages, and services[edit]

Communication with other applications occurs through a protocol called Wolfram Symbolic Transfer Protocol (WSTP). It allows communication between the Wolfram Mathematica kernel and front end and provides a general interface between the kernel and other applications.[26]

Wolfram Research freely distributes a developer kit for linking applications written in the programming language C to the Mathematica kernel through WSTP using J/Link.,[27] a Java program that can ask Mathematica to perform computations. Similar functionality is achieved with .NET /Link,[28] but with .NET programs instead of Java programs.

Other languages that connect to Mathematica include Haskell,[29]AppleScript,[30]Racket,[31]Visual Basic,[32]Python,[33][34] and Clojure.[35]

Mathematica supports the generation and execution of Modelica models for systems modeling and connects with Wolfram System Modeler.

Links are also available to many third-party software packages and APIs.[36]

Mathematica can also capture real-time data from a variety of sources[37] and can read and write to public blockchains (Bitcoin, Ethereum, and ARK).[38]

It supports import and export of over 220 data, image, video, sound, computer-aided design (CAD), geographic information systems (GIS),[39] document, and biomedical formats

Computable data[edit]

A stream plot of live weather data

Mathematica is also integrated with Wolfram Alpha, an online computational knowledge answer engine that provides additional data, some of which is kept updated in real time, for users who use Mathematica with an internet connection. Some of the data sets include astronomical, chemical, geopolitical, language, biomedical, and weather data, in addition to mathematical data (such as knots and polyhedra).[40]


BYTE in 1989 listed Mathematica as among the "Distinction" winners of the BYTE Awards, stating that it "is another breakthrough Macintosh application ... it could enable you to absorb the algebra and calculus that seemed impossible to comprehend from a textbook".[41] Mathematica has been criticized for being closed source.[42] Wolfram Research claims keeping Mathematica closed source is central to its business model and the continuity of the software.[43]

See also[edit]


  1. ^Wolfram, Stephen (23 Jun 2008), Mathematica Turns 20 Today, Wolfram, retrieved 16 May 2012
  2. ^"Mathematica Quick Revision History". Retrieved 2020-05-20.
  3. ^"Celebrating Mathematica's First Quarter Century". Retrieved 11 August 2015.
  4. ^The Software Engineering of Mathematica—Wolfram Mathematica 9 Documentation. Retrieved on 2015-03-23.
  5. ^"Mathematica 12 System Requirements and Platform Availability". Retrieved 16 December 2020.
  6. ^Raspberry Pi Includes Mathematica for Free The Verge
  7. ^"Wolfram Mathematica". Retrieved 11 August 2015.
  8. ^"Stephen Wolfram: Simple Solutions; The iconoclastic physicist's Mathematica software nails complex puzzles". BusinessWeek. October 3, 2005. Retrieved August 4, 2021.
  9. ^"Contact Wolfram Research". Retrieved 11 August 2015.
  10. ^"Stephen Wolfram's new programming language: Can he make the world computable?". Slate Magazine. Retrieved 11 August 2015.
  11. ^Patent US8407580 Google Patent Search
  12. ^Hayes, Brian (1990-01-01). "Thoughts on Mathematica"(PDF). Pixel.
  13. ^"Wolfram intros Workbench IDE for Mathematica". Macworld. 21 June 2006. Retrieved 11 August 2015.
  14. ^Mathematica plugin for IntelliJ IDEA
  15. ^Using a Text-Based Interface documentation at
  16. ^"JMath: A GNU Readline based frontend for Mathematica". Retrieved 11 August 2015.
  17. ^"Directory listing". Retrieved 18 April 2019.
  18. ^Math software packs new power; new programs automate such tedious processes as solving nonlinear differential equations and converting units by Agnes Shanley, Chemical Engineering, March 1, 2002.
  19. ^Mathematica 5.1: additional features make software well-suited for operations research professionals by ManMohan S. Sodhi, OR/MS Today, December 1, 2004.
  20. ^The 21st annual Editors' Choice Awards, Macworld, February 1, 2006.
  21. ^"Mathematica is tuned to take advantage of CPU features when available". Retrieved 13 April 2020.
  22. ^"ClearSpeed Advance Accelerator Boards Certified by Wolfram Research; Math Coprocessors Enable Mathematica Users to Quadruple Performance". Retrieved 11 August 2015.
  23. ^gridMathematica offers parallel computing solution by Dennis Sellers, MacWorld, November 20, 2002.
  24. ^"CUDA and OpenCL support added in Mathematica 8". Retrieved 13 April 2020.
  25. ^"Create LLVM code". Retrieved 13 April 2020.
  26. ^Wolfram Symbolic Transfer Protocol (WSTP)
  27. ^Mathematica 4.2Archived 2007-11-21 at the Wayback Machine by Charles Seiter, Macworld, November 1, 2002.
  28. ^.NET/Link: .NET/Link is a toolkit that integrates Mathematica and the Microsoft .NET Framework.
  29. ^"mathlink: Write Mathematica packages in Haskell - Hackage". Retrieved 11 August 2015.
  30. ^S.Kratky. "MathLink for AppleScript". Retrieved 11 August 2015.
  31. ^"MrMathematica: Calling Mathematica from Scheme". Retrieved 11 August 2015.
  32. ^"Mathematica for ActiveX - from Wolfram Library Archive". Retrieved 11 August 2015.
  33. ^"erocarrera/pythonika". GitHub. Retrieved 11 August 2015.
  34. ^"PYML (Python Mathematica interface) - from Wolfram Library Archive". Retrieved 11 August 2015.
  35. ^"Clojuratica - Home". Retrieved 2013-08-16.
  36. ^"Wolfram Documentation: ServiceConnect". Retrieved 4 August 2021.
  37. ^Vernier and Mathematica
  38. ^"Working with blockchains". Retrieved 15 April 2020.
  39. ^Mathematica 6 Labs ReviewCadalyst Feb 1, 2008
  40. ^"Scientific and Technical Data", Mathematic Guide, Wolfram Research, archived from the original on 10 May 2012, retrieved 16 May 2012
  41. ^"The BYTE Awards". BYTE. January 1989. p. 327.
  42. ^"Paul Romer". Retrieved 2021-08-05.
  43. ^"Why Wolfram Tech Isn't Open Source—A Dozen Reasons—Wolfram Blog". Retrieved 2021-08-05.

External links[edit]


Similar news:


523 524 525 526 527