# Can any program be implemented mechanically?

Is it possible to build a single purpose (non Turing complete) mechanical implementation of say, Microsoft Word? Is it possible to implement such things as iterators, first-order functions, the whole gamut of programming techniques? Could gears and other mechanical parts represent data structures or even program objects? At a certain point does this necessitate building a general purpose Turing-equivalent machine, or can each function, variable, etc, have its own unique mechanical construct in the form of flywheels and/or gears, ratchets, what have you? In summary I wonder if any given piece of software on a standard computer could be compiled to a mechanical blueprint.

• I think, something that runs Microsoft Word doesn't even need to run on a Turing Machine, since all procedures in Word should be known to (provably) terminate (except if there is a bug ofc), aside from the main event loop. – Realz Slaw Nov 4 '12 at 4:07
• – Pratik Deoghare Nov 5 '12 at 7:13
• If this is possible - which seems likely - then it should be possible to create a non-turing-complete machine that acts as a compiler, creating blueprints for other machines from source code. Machines which may or may not themselves be turing complete. – Nick Johnson Nov 8 '12 at 13:35
• @Realz Slaw: not if you include I/O, VBA macros, or extensions.For instance, I doubt Word would complain if you fed it an infinite Word document. It's probably the underlying OS that would reach a limit. – reinierpost Dec 11 '15 at 8:56
• @reinierpost but each routine does not need to be turing complete; they would either provably terminate or provably not. I.e if you fed it an infinite document, it would provably not terminate. My point was that most programs that we make do not have to use a Turing complete language, because we can limit it to programs that we can prove terminates, given non-infinite data, and does not terminate if given infinite data; and if you can do this, there is no issue with the Halting Problem. TLDR; if you can't prove your routines terminate or not, you are a terrible programmer. – Realz Slaw Dec 11 '15 at 14:39

Yes, it is. Here's how you do it:

You can compile basically any program you like to circuits. See for instance the work of Dan Ghica and his collaborators on the Geometry of Synthesis, which shows how to compile programs into circuits.

1. Dan R. Ghica. Geometry of Synthesis: A structured approach to VLSI design
2. Dan R. Ghica, Alex Smith. Geometry of Synthesis II: From Games to Delay-Insensitive Circuits
3. Dan R. Ghica, Alex Smith. Geometry of Synthesis III: Resource management through type inference.
4. Dan R. Ghica, Alex Smith, Satnam Singh. Geometry of synthesis IV: compiling affine recursion into static hardware.

Circuits then turn out to reappear over and over in engineering. John Baez gives a big table of analogies of concepts, and works out a lot of connections, in This Week's Finds 288-296. So the circuit diagrams Dan's compiler generates could be instantiated as mechanical or hydraulic systems, if you really wanted to!

╔══════════════════════════════════════════════════════════════╗
║                 displacement  flow      momentum     effort  ║
╠══════════════════════════════════════════════════════════════╣
║ Mechanics      position      velocity  momentum     force    ║
║ (translation)                                                ║
║                                                              ║
║ Mechanics      angle         angular   angular      torque   ║
║ (rotation)                   velocity  momentum              ║
║                                                              ║
║ Electronics    charge        current   flux         voltage  ║
║                                                              ║
║ Hydraulics     volume        flow      pressure     pressure ║
║                                        momentum              ║
╚══════════════════════════════════════════════════════════════╝

• Corollary: software patents make no sense. – András Salamon Oct 31 '12 at 17:37
• Fantastic answer for a question I barely knew how to ask. Thanks for the added chart! – Alex Nye Oct 31 '12 at 21:08

A practical example of this is the Tic Tac Toe computer made out of Tinker Toys at the Boston Science Museum (originally made by a team of MIT students). Of course, this is much simpler than Microsoft Word.

Here is a 1989 article from Scientific American describing it.

There have also been Turing machines made out of legos (this cheats a bit because it uses electricity---indeed a computer---for movement, but I think the design could be modified to avoid this) scrap metal, and more.

• I enjoyed the article and the lego machine, thanks. – Alex Nye Oct 31 '12 at 21:09

Trying to address specifically your example of creating an editor in hardware, there was an early experimental computer built which implemented both the operating system and the editor entirely in hardware. Later the editor was replaced with software, which substantially reduced the hardware needed. This was described in a book on computer architecture and history. Unfortunately I've forgotten the name and haven't found the keywords to track down the original source.