This is normal text. This is one size smaller. This is two sizes smaller. The 'brainfuck' programming language was designed by Urban Müller around 1993. Maybe we should begin with an outline. The key idea is to put notes and inessentials in small type. One or two sizes smaller than normal are legible. The core, as always, is a description of the eight commands. But first we need a description of the memory model etc. as usual. We'll include sizable digressions about the [] commands and about the i/o model that's half-assumed. Black-on-white and white-on-black versions. Link from each to the other. Okay. Thinking! If we have an array like 0 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 0 we can get to the next 0 with [>] or to the next 1 with -[+>-]+ right? That's a reasonable tactic for a 2-d cellular automaton, in fact? Turing-completeness. In the documentation to version 2, Urban Müller said "Now while this seems to be a pretty useless language, it can be proven that it can compute every solvable mathematical problem (if we ignore the array size limit and the executable size limit)." Frans Faase gives several proofs _here_, which make subtly different assumptions. The first assumes an unlimited array of unlimited-range variables; the second assumes an unlimited array of variables with range at least 0-100; and the third assumes an array of five or so unlimited-range variables. The second proof's assumptions are closest to the original implementation and most subsequent ones; that proof