Note: Thanks to @brainwaves for pointing out (in a PM) that the connection between @vclay’s remarks and this response was unclear. I’ve attempted to fix this below…
@vclay says “As I view it, thinking is also a type of movement, but it only happens in mental space.”
I agree with this, but I’d like to get a bit more specific. Although it may not seem intuitively obvious, I think that graph navigation (i.e., movement along edges) and processing (e.g., creation, analysis) could be key to the processing of abstract concepts in Monty.
Although the comments below wander about a bit, they are intended to show how directed graphs could be used to promote Monty’s “movement through mental space”.
Background
As some folks here may recall, I’m a big fan of directed graphs as data structures, primarily because they are so incredibly versatile. I also like databases and LLM interfaces which can use graphs, e.g.:
- graph databases (e.g., Neo4j, Memgraph)
- multi-model databases (e.g., ArangoDB)
- immutable databases (e.g., Datomic)
- semantic web triplestores, Turtle, etc.
- densely linked Web servers (e.g.,Wikipedia)
- …
BTW, anyone who is considering storing and using data values which change over time (e.g., in Monty) really needs to watch Rich Hickey’s Datomic talk. As the author of Clojure, Datomic, and a number of seminal presentations, he is (IMHO) several of the smartest people in the computing field.
Discussion
The current notion of Monty’s data graph seems rather ill-defined to me. Basically, each Learning Module (LM) is charged with retaining some state, based on received (e.g., CMP) messages). However, some niggling questions arise, e.g.:
- What state should each LM retain?
- How long should the state be retained?
- What should happen to the “updated” state?
- How can we assess the state’s “meaning”?
- How can we access and/or process LM states?
- …
Although I don’t have answers to these questions, I do have some ideas I’d like to promote. Framed as a wish list, we should be able to:
- get snapshots of an LM’s retained states
- save time-stamped snapshots in a data store
- add tags (etc) to imbue the data with meaning
- seed LM’s with “instinctual” data and tags
- seed Monty with desired modules and connections
- use data and tags to understand Monty’s behavior
- and a pony…
Here is one possible path to some of this; comments welcome…
- Enable each LM to report on its state (e.g., via GraphQL).
- Set up a multi-model database to store historical snapshots.
- Set up an immutable database to retain time-ordered values.
- Use LLMs (etc) to analyze both DBs and generate “seeds”.
- Rinse, repeat…
Incidentally, Monty’s message-based structure should play nicely with an immutable, time-ordered value store. After all, each message is just a transaction…
(ducks)
P.S. Datomic is closed source, but it has a free (as in beer) license. And, by using Datomex, it could be accessed from Elixir. FWIW, there are also some open source alternatives and a full Elixir version might be possible. Here’s a ChatGPT link for some details…