I think it is a quite neat example on what XSB’s tabled negation can do, producing an implementation that stays really close to the specification and performs quite reasonably. Now, I’m not really experienced with this stuff, so please come up with something better (cleaner, faster while remaining nicely declarative).
The slides should give enough to find papers and there is are further reading links near the end of the slide deck. The value of the notebook is more illustration of the new tabling stuff than a contribution to argumentation theory though It shows a fully declarative solution to a problem for which traditional Prolog requires a much more algorithmic approach.
It turns out the implementation misses valid models. In the end, this rule
- an argument is undec ⟺
- not all its attackers are out
- and it does not have an attacker that is in
allows any graph to be completely
undec (undecided). After porting the program to XSB, XSB reaches the same conclusions, so this doesn’t seem a tabling implementation issue but a modelling issue. I’m puzzled why this happens. Anyone with experience in modelling these things with tabling that understands what is wrong?
Working on the argue suit (.swinb and .pl) to port to cytoscape_js plugin.
I have a question related to your concern: are there hookable events (just for display) in the tabling infrastructure ?
Yes and no. Off-line I use stuff from my personal Prolog utility lib (https://github.com/JanWielemaker/my-prolog-lib), which provides tdump/0,1 to dump all or a selection of the tables. That is quite helpful for these small problems were the intermediate tables are small enough to examine and wonder why something is (no) in a table.
Would be great if you can solve it properly!
Thanks Jan, it’s really interesting.
I will try, but before need to read more about Caminada’ work.
(oops still missing the big picture… working on details will surely help.)
Slide 16 of the referenced slide deck summarizes the whole thing. I’d guess the problem is with the negation, but in theory I think not_exists/1 should solve floundering tabled negations.
Curious what you come up with!
AFAIK model_graph/2 is working well.
On graph07 (that is the same as 2 from sliders) it gives all 3 requested labelings.
The first one is all undec, but indeed is required from the exercise (starting at slider 41).
Working on the GUI, obviously, because to build an interactive notebook is still beyond my reach…
Thanks for looking. I first though you fixed it, but it seems you claim it is not buggy. I’ve added the original graph reported by Davide Ceolin as being problematic. The graph is simply [a->c, b->c] and should have two models: a and b in and c out as well as all undec. The latter is missing though. In fact, all undec is a model for any graph, but it is often not produced.
I don’t know whether that is related to it being defined by negations and whether it correctly produces all non-undec models.