Hi Ben,
I don't quite see where you are going with this. Let me re-iterate some random unstructured thoughts that I've said before, and see where they might fit in. Like riffing on a melody.
* First, I'd rather not have human being program in atomese -- I kind of wish it really was a knowledge-representation substrate, and some kind of learning algorithms would generate and manipulate atomese.
* I do admit that, when human beings do code in atomese, a nicer syntax, or something would be nice. Earlier today, I explained to David DeMaris that one can create timelines in atomese just fine (using ParallelLink, JoinLink and SleepLink) but if you want it to pause (sleep) for random amounts of time (e.g. using RandomLink) then programming gets awkward. Doable but awkard.
* But what's the point of hand-written snippets of atomese, anyway? The goal was to have automated learning algos manipulating the graphs and the automated algo might have a really hard time understanding some complicated RandomLink with math in it. ... so why are we doing this?
* The nice thing about types and type theory is that type-checking programs are gauranteed to terminate in finite time, always. This is a useful property that we currently do not leverage in atomese.
* Type-checking terminates because, in the theory of term rewriting, type checking is .. I forget... strongly confluent, or something like that.
* Term re-writing is exactly what we want to do, when converting EvaluationLinks into PredicateNodes, or converting between various forms in the EquivalenceLink. We don't have any architected way of doing this. The chainer and threign beaste pln rules seem to do this in some ad-hoc ways. I think you call them "rules" in PLN, but there's no C++ code or API that I can call to answer the question "here's a graph, do we already have an equivalent graph somewhere in the atomspace?" (for example, by tracing through EquivalenceLink)
* I am concerned by the excessive obsession with lambda calculus and the already heavy over-use of LambdaLink. Down that way leads madness. We need to spend a lot more time thinking "term re-writing" and a whole lot less thinking "lambda" -- and this does seem to fit with some sort of AGDA-vision, because proofs are kind-of-ish about term re-writing, and about termination.
* Which brings me back to Kripke Semantics and possible worlds. I have no clue how AGDA does it's stuff, but, in the "real world", with probabilistic reasoning, I just don't see any way at all of avoiding the need for possible worlds during the exploration of a proof.
* And so, creating a system for managing possible worlds during proof exploration seems to be an important, neglected task. (I'm not sure, I sometimes suspect that what you used to call "inference trails" is a similar-but-different idea).
* So, the thing that we really need, is not so much a nice surface syntax for atomese, but a nice surface syntax for inference control. Let me explain: right now, PLN goes off and explores in some random direction, and promptly hits a combinatorial explosion and all is lost, and so you invent ECAN to place some reins on this beast. But ECAN is this opaque automated system, and we can guess at what it might be doing, but its hard to visualize, and maybe its doing the right thing, and maybe its not. So I'm thinking -- lets make inference paths -- the sequence of steps taken during a search for a proof -- lets make that explicitly visible, a first-class object that can be seen and manipulated and explored. Something that can be pruned, or allow to grow, like a good gardener tending a plant: Lets watch the many shoots of inference, and see which seem good and which bad, and then design an automated system to rein in, to control the directions in which inference goes.
* The problem that I see with agda, and with haskell, is that they go off and pursue proofs on their own, with no visibility to the programmer about what they are doing. Trust the system. haskell is infamous for having performance that is hard to predict: you look at haskell code, and you can't tell quite how long it might take. So, I'd like to have "visible inference" (in PLN, using kripke semantics) so that we can have ECAN or its follow-ons can "watch PLN think" -- stay focused, stay on track, not get overwhelmed by combinatoric explosion.
--linas