[b] 2014 Jul 31
[m] 2014 Aug 02

Automating Creativity

What is creativity? One way to put it is: usage of some object in an unexpected way. As is sometimes said "He used X in a creative way."

All objects are understood by their properties and interfaces. Say for instance a pencil can be thought of having these:

Pencil:
    Properties:
        yellow
        2 inches long
        1 end that is sharp
        1 end that is made of graphite
        1 end that is dull
        1 end that is made of rubber

    Interface:
        write : Pencil -> Paper -> Words

Interface is just something people infer from properties (or facts about an object), so people generally expect to Pencil.write, but then some creative soul can look at these properties and say:

Hey, if I ignore that the sharp end is made of graphite and only care about the fact that it is sharp - I can also: Pencil.stab : Pencil -> Surface -> PastaStrainer except that I do need to make sure that hardness property of Surface is lower than that of Graphite.

Then people would say:

Wow! He is so creative! We never thought to use a pencil this way!

So, what is creativity other than enumerating the properties of objects at hand and then matching them to fit an interface you care about? What if you enumerate all interfaces possible?

I'd love to experiment with something like: create an online, global database of objects and offer searches constrained by properties and interfaces.

I'm thinking of something like a hybrid of Prolog and Hoogle, but for abstract definitions of any (physical of thought) objects.

Is it awesome or "Simpsons did it"?

Paths

Another way to think about it is as finding paths through all available properties of given objects, without any interfaces. Say if we have three objects, with each having 2 properties:

ABC
a1b1c1
a2b2c2

We can't test if any of the individual properties are good-enough to solve our given problem, we can only test the complete path: A -> B -> C, so we have to enumerate possible paths and test them:

a1 -> b1 -> c1
a1 -> b1 -> c2
a1 -> b2 -> c1
a1 -> b2 -> c2
a2 -> b1 -> c1
a2 -> b1 -> c2
a2 -> b2 -> c1
a2 -> b2 -> c2

This can get very expensive, because we have to test every possibility.

But, what if we could test some of the properties individually? In the above example, knowing the individual effect of even a single property would reduce the search space dramatically!

If we know that a2 will never work, then we eliminate 1/2 of possibilities that we need to test:

a1 -> b1 -> c1
a1 -> b1 -> c2
a1 -> b2 -> c1
a1 -> b2 -> c2

This is essentially how human decision making works:

  1. imagine all possibilities
  2. prune-out possibilities which contain "bad" components
  3. test the remaining possibilities