# RubyConf, Day 2: Essential Incompleteness in Program Modeling

*Ahhhh … sleep makes all better. I came late today, caught the Rubinius part of the plenary and so didn’t have any comfortable way to live blog it … so I didn’t.*

Walking our way to Godel’s incompleteness, in a hand-wavy sort of way.

This statement is false.

This statement is true (but not provable as English has no axioms)

Godel theorem requires completeness and consistency

Completeness: all statements are true and provable

Consistency: all statements relate/are built on other statements.

Godel says: Any sufficiently complex system cannot be complete or consistent. No sane person sacrifices consistency, so all (useful) modeled systems will be incomplete.

Godel’s quine: This statement is not provable.

Godel’s theorem is general, not specific to mathematics.

Barrow’s first law: Any Universe simple enough to be understood is too simple to produce a mind able to understand it.

As folks were investigating set theory and real numbers, hoping these were a system which modeled reality completely and consistently. Bertrand Russell theorized “the set of all sets which do not contain themselves” which is paradoxical. This was disturbing, so they worked to define the system (Principia Mathematica) to eliminate the self-referential nature. Three volumes into this, Godel busted them with his theorem.

**Applying this to Your Code**

Don’t make inifinite stacks.

Three parts: reality, your model of it, and your implementation of your model. You know your model will be incomplete *and you control in what ways it’s incomplete*. Exercise your power consciously.

Applying Ramachandran energy modeling theory: Think of it as potential vs. kinetic energy. Predecision is potential: high energy state, etc.; post-decision starts you in motion, low energy and low tension, high movement. [me: he should have given a one sentence summation or Ramachandran theory at the top of this section; not doing so bogged him down].

He made some observations re: high vs. low energy states, largely urging that you stay in high energy state as long as you can/need. [me: His observations seem to relate to some interpretations of Wilfred Bion’s work re: group psychology re: groups in working state being high tension]

Decisions == energy deltas. Unmade decisions are high energy; made, low. Many unmade is expensive but flexible, most made is cheap but less flexible.

Make decisions as late as possible – you’ll know more. And now we’ve derived agile programming as a good idea.

Asymptotes: lines or curves which approach a line or curve arbitrarily closely without touching.

“You can’t perfectly match reality but you can asymptotically approach it”

Spending time on your model progressively increases the resolution of the model. Move the asymptote closer; don’t take “iteration” to mean “new approach” unless you can’t get closer with your current approach.

Math hurts your brain in new and interesting ways, provides new ways to think about our problems, and is wicked fun. =]

*In 1979, Doug Hofstadter blew our minds with “ Godel Escher Bach” … over a quarter century later, the underlying ideas are still engaging a roomful of people. Excellent. Meanwhile, in 2__001, JP Lewis gave a similar talk at SIGGRAPH which was poorly received (and horribly, boringly delivered, despite him being a fundamentally interesting person and having a pile of humorous anecdotes from production). Luke’s presented it in a better context and with richer, more interesting sources.*

blog comments powered by Disqus