Wittgen is a serious, but as yet esoteric, programming language that has only two instructions: assign and retrieve.
The goal of Wittgen is to aid exploration of how the human brain is capable of sequential symbolic processing. Since the brain is not known to include any computing hardware other than a neural network, the question arises how conscious sequential verbal reasoning is possible. Since neural networks are known to be able to implement associative memory, Wittgen code consists only of the two basic function of associative memory: the ability to associate any string with any string and the ability to retrieve the string value associated with a string key.
Wittgen shows that these two operations are sufficient to implement a Turing machine. However, in a more direct and intuitive manner it is possible to show plausible mechanisms how associative memory alone can produce any of the components of conscious human reasoning; for example, arithmetic, formal logic, planning, hypothesis formation, debate, strategy etc.
The assign operation is indicated in a text string as:
<variable name>:=<assigned text>}
(The symbols < and > are not part of the language, they are used only here to indicate that whatever is between the < and the > can be replaced by any text string.)
My variable:=hello world!}
means assign the text “hello world” to a variable called “My variable”. If “My variable” has never been encountered it is created as a new variable. If it already exists, the contents, or what the variable points to, are replaced by the new text string. The name of the variable extends from the end of the last assign until the “:=” symbol. The text to be assigned extends from the “:=” symbol to the “}” symbol.
The retrieve operation is indicated in a text string as:
For example: @My variable}, found in a text string will be replaced in its entirety (i.e. including the @ and } symbols by the text “hello world!” from the previous example. The following example demonstrates the complete usage:
part 1:=hello} part 2:=world} greeting:=@part 1} @part 2}!}
The example consists of three lines but the line breaks are ignored. The first line assigns the text “hello” to a variable which is now created called “part 1”. The second line assigns the text “world” to the variable called “part 2”. The third line replaces the text @part 1} using a retrieve operation on the variable “part 1” with the text “hello”. @part 2} is replaced by “world” and therefore the text “hello world!” is assigned to the variable greeting.
If a retrieve operation is attempted but the is no variable of that name, the retrieve operation fails. For example, if there had been no previous assign to "part 1", then there is no variable "part 1" and the retrieve fails.
Before actually assigning the text to the variable name, all retrieve operations are performed with one exception. The text to assign may contain encapsulated assign statements. Any retrieve instruction between the “:=” and its corresponding “}” will not be evaluated.
If, in the course of an assign, a retrieve instruction is performed and the retrieve operation fails, the entire assign operation will fail. If the variable being assigned to does not exist, it will not be created. If the variable already exists, it continues to refer to the text it did before the assign operation began and the content it refers to is not changed.
One variable has special significance. The variable called “Doing Now” determines the next assign executed. Wittgen is programmed by creating a source file of text containing a series of assigns (at least one). Executing the source file assigns all the text in the file to the variable Doing Now. Wittgen continues executing as long as Doing Now points to some text. The first assign is removed from the contents of variable Doing Now such that Doing Now points to the remainder. The assign is performed as described above including any text replacements due to retrieve instructions. When the assign is complete the text referred to by Doing Now is again accessed, the (next) first assign removed, executed, again Doing Now is accessed etc. until Doing Now points to no assign.
Note that the assign may change the contents of Doing Now such that when the assign is complete, the next assign is not the one that would have been performed if the assign had not taken place. The next section will give examples of this.
The Wittgen language is entirely defined by the contents of this section. It includes no other capabilities or instructions found in standard programming languages. It does not have an if, for, loop, goto, function, =, list head (car), list tail (cdr) or variable declaration. It contains no inbuilt support for mathematical operators such as +, -, *, ^ or %. It has no predicate operators such as >, <, <>, >= or <=. It contains no integer, floating point, array, struct or class types. The functionality of these operations, however, may be created using the two instructions that Wittgen does have.
A simple implementation of Wittgen can be found on Sourceforge. It includes an interpreter/execution environment and a simple IDE with basic debugging capabilities.
An implementation of a Turing Machine in Wittgen will soon be posted on Wittgen's website on Sourceforge.
As far as we know the only computational hardware that the brain contains is a neural network. At some point, probably after human beings developed the ability to associate sights, sounds, actions and feelings with audible words, humans developed the capability of verbal reasoning. Wittgen is designed to allow implementation of the achievements of verbal reasoning using only the capabilities of neural networks. In fact, it uses only one of the capabilities of neural networks, namely the ability to implement associative memory. Moreover, ideally the steps taken by Wittgen code should resemble the conscious sequence of associations that a human mind could plausibly take in solving a problem.
Wittgen aims to provide philosophically sound models of human reason.
One of the most famous challenges to any such attempt is Wittgenstein's Philosophical Investigations (Wittgenstein, L., 1953, Philosophical Investigations, G.E.M. Anscombe and R. Rhees (eds.), G.E.M. Anscombe (trans.), Oxford: Blackwell.). It is the goal of Wittgen development to be able to provide responses, if not solutions, to some of the problems he poses.