- computability pl.programming-languages machine-models ar.hardware-architecture
- Updated Mon, 20 Jun 2022 08:00:57 GMT

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.

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.

- Dan R. Ghica. Geometry of Synthesis: A structured approach to VLSI design
- Dan R. Ghica, Alex Smith. Geometry of Synthesis II: From Games to Delay-Insensitive Circuits
- Dan R. Ghica, Alex Smith. Geometry of Synthesis III: Resource management through type inference.
- 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
linkage
Hydraulics volume flow pressure pressure
momentum
```

- http://math.ucr.edu/home/baez/week288.html
- http://math.ucr.edu/home/baez/week289.html
- http://math.ucr.edu/home/baez/week290.html
- http://math.ucr.edu/home/baez/week291.html
- http://math.ucr.edu/home/baez/week294.html
- http://math.ucr.edu/home/baez/week296.html

External links referenced by this document:

- http://math.ucr.edu/home/baez/week288.html
- http://math.ucr.edu/home/baez/week289.html
- http://math.ucr.edu/home/baez/week290.html
- http://math.ucr.edu/home/baez/week291.html
- http://math.ucr.edu/home/baez/week294.html
- http://math.ucr.edu/home/baez/week296.html
- http://www.cs.bham.ac.uk/~drg/papers/icfp11.pdf
- http://www.cs.bham.ac.uk/~drg/papers/mfps10.pdf
- http://www.cs.bham.ac.uk/~drg/papers/popl07x.pdf
- http://www.cs.bham.ac.uk/~drg/papers/popl11.pdf