Hi,
I read the book on NAL multiple times already and I felt like trying a different approach for the inference control mechanism and I would like to share my approach and challenge it with your opinion. I'm trying an approach where each concept would be a node of an hypergraph and edges would be the inferences. I have not considered time and events yet, please bear with me.
In a nutshell my approach has two objectives:
1. Try to cut down the number of concepts in the KB and inferences to reduce the amount of computations.
2. Try to find inference pathways to a goal as fast as possible.
In this approach, the system would have only one instance of each concept by only keeping the concept with the biggest evidential base and best confidence at any point in time. One advantage of that is that the system can try to exploit the maximum of already existing relations before expanding with new concepts and inferences, which helps in reducing the explosion of nodes and paths.
Forward and backward inferences would be represented by edges in the system. Applying those inferences would propagate the truth-values throughout the graph until a stable state is reached (I have not proven that it exists yet though. It might not be trivial to prove if there are cycles in the graph, but given the evidential base is finite, I'm quite confident we can prove it).
A new piece of evidence coming into the system would merge with the previous one with revision and propagate its truth-value throughout the graph.
Answering questions would then be either queries on the nodes or finding a path between nodes in the hypergraph. I still need to figure out how to efficiently find the paths because the number of edges might be a pb.
Another advantage of this model is that I can also stir the system by defining a "global confidence" of the graph as being the sum of all confidences of all nodes and optimize this measure by rejecting nodes and edges that make the global confidence decrease by too much.
Here is an example of graph with basic forward inferences on syllogisms that I generated with my code. I'm currently working on the propagation of the truth-values.
Have you considered such an approach? Do you see any problem with it?
Clément