Monday, 26 July 2010

I've started putting together a very simple FAQ about SP (see the What is SP? (FAQ) link on the right). I've given up trying to format the text of the FAQ nicely as the blogger editor for such pages is unbelievably useless.

One key thing that is still missing from the FAQ is a basic description of the nodedge model. I will add this next as there have been some changes since the 2008 PDF 'paper' that is linked to from my first post.


  1. Good to see this go up. A couple of questions which I'm going to keep asking until they count as "frequent". :-)

    1) What is the relation to Prolog?

    Once you generalize edges to "atomically connect 4 or more references", they sound awfully like "relations" in the "relational programming" sense. (BTW, these look interesting : or$FILE/rel2.pdf Not that I claim to understand them.)

    2) Is a semantic program a passive data-structure which an active "inference engine" processes? Or are the inference engines actually the "agents" which are, themselves, semantic programs (and therefore semantic programming has to specify *how* the agents process the graph.) Third possibility, are agents "reactive", ie. pattern-matching, event handlers which "fire" when certain patterns appear in the graph?

    3) When can we see the "hello world" or "John loves Mary" of semantic programming? Pseudocode will do :-)

  2. Hey Phil,

    I've got to keep these answers 'brief' as it's already 2:50am!

    1) and 2): The SP Graph is an active graph. Each nodedge defines its own behaviour and can send messages (defined themselves as nodedges) to other nodedges. The SP agents (that hold a portion of the graph on a given computer) animate their part of the graph (as in run the relevant behaviour of a given nodedge when it has to respond to a message).

    What actually happens in any region of this distributed graph depends on the behaviours assigned to the nodedges. So, for example, you could program one nodedge to hold a set of logic relations in its subgraph, and each of these logic relations would themselves also be encoded as nodedges. Then, in that region of the graph you would be doing logic programming similar to Prolog.

    So, in general it's maybe best to view SP as about setting up a distributed runtime environment whose atomic units are nodedges. The SP agents each run a virtual machine that animates their nodedges appropriately.

    A key point here is that the norm is to treat all references within this runtime environment as remote references to other parts of the graph. Furthermore many of these references will be indirect references to things like 'Phil's email address' (although probably not in text!) and so the semantics issue is more about how do reference like this come to have the correct and useful meaning in a given context when a program is trying to use them.

    3) Soon (ish) ... although it will be in 'Textual Semprola' which is (currently) a fairly 'low level' (as in procedural / object oriented-ish / event driven-ish) language that I'm developing to be able to write code that compiles down onto the virtual machine.

  3. Or, to answer 1) less directly: while logic programming arguably has two feet in analytic philosophy, SP also has one foot in the concerns of continental philosophy.