Hi all!

Inspired by Matt Mahoney's example, I made a little program. This is his
original example:

I ate pizza with a fork.
I ate pizza with pepperoni.
I ate pizza with Bob.


I use these as training examples then made some new examples for testing.

My program is a logic engine that takes the following rules:

// Some reasonings that everybody will understand.
// Sorry for the curly braces, we have to help out the parser a tiny bit.
// First, the 3 different cases of what "pizza with..." can mean.

  I ate pizza with pepperoni.
  => {I ate pizza} and {the pizza had pepperoni on it}.

  I ate pizza with Bob.
  => {I ate pizza} and {Bob was with me}.

  I ate pizza with a fork.
  => I used a fork to eat pizza.

// Now some more easy rules.

  I used a fork to eat pizza.
  => I used a fork.

  I used a fork.
  => A fork is a tool.

  The pizza had pepperoni on it.
  => Pepperoni is edible.

  Bob was with me.
  => Bob is a person.

// Some VERY basic mathematical logic

  $A and $B.
  => $A.

  $A and $B.
  => $B.

// Tell the machine what is not plausible

  Mom is edible. => fail
  Mom is a tool. => fail
  anchovis are a tool. => fail
  anchovis are a person. => fail
  ducks are a tool. => fail
  ducks are a person. => fail
  my hands are edible. => fail
  my hands are a person. => fail


The logic engine performs some analogy reasoning using the rules stated
above. Note that most of the rules don't distinguish between variable and
non-variable parts, this is usually inferred automatically.

That's it! Now we give the program the following ambiguous inputs:


  I ate pizza with mom.
  I ate pizza with anchovis.
  I ate pizza with ducks.
  I ate pizza with my hands.


...and it comes up with these clarifications:

I ate pizza with anchovis. => I ate pizza and the pizza had anchovis on it.
I ate pizza with ducks.    => I ate pizza and the pizza had ducks on it.
I ate pizza with mom.      => I ate pizza and mom was with me.
I ate pizza with my hands. => I used my hands to eat pizza.


So nice! It's all correct. Sure, nobody would say "pizza with ducks", but
that is the one option that remained after the program eliminated the other
two (ducks as a tool or ducks as a person), so it's a very reasonable
interpretation.

If you remove the lines that says ducks are not persons, the program will
correctly add the interpretation "I ate pizza and ducks were with me".

Full program in my fancy language. <http://tinybrain.de/1021251>

In addition to the results, the program also shows some lines of reasoning,
e.g. failed lines:

  Interpretation: I ate pizza and the pizza had mom on it.
     => I ate pizza.
     => the pizza had mom on it.
       => mom is edible.
         => fail


and successful lines:

  Interpretation: I used my hands to eat pizza.
     => I used my hands.
       => my hands are a tool.


Why do I make a specific program for this puzzle? Well, it's not a
special-purpose program really. It's a general-purpose logic engine that
supports problems of a certain complexity. Like a child understands
eveyything as long as it's not too complicated. The plan is to make
increasingly more capable logic engines until we can solve everything.

The program itself is <100 lines <http://tinybrain.de/1021251> as you can
see, but of course it uses some powerful library functions.

Any questions ?:)

Stefan

-- 
Stefan Reich
BotCompany.de // Java-based operating systems

------------------------------------------
Artificial General Intelligence List: AGI
Permalink: 
https://agi.topicbox.com/groups/agi/T9ccd0aac7d42f57b-M0d3ed34d762bfe69d1d2c7e1
Delivery options: https://agi.topicbox.com/groups/agi/subscription

Reply via email to