I've recently been working on a new version of prolog.
A couple of semesters ago I wrote a version of prolog which had a much more relaxed form of accepted logic statements and allowed for first class resolution of true and false. What does that mean?
You could do something like this
>>a^b:c >>a? True
You also could go
>>!a: >>a? False >>!a? True >>b? Unknown
This is on my github account as prolog+.
But it had some nasty penalties. Mostly resolution was much worse because you had to do two possible searches for every query.
For this new research project I rewrote it again, using probabilities to indicate possible truthiness. This has lots of nice properties including the fact that if you use 1.0 and 0.0 as probabilities you can do the same sort of searches as prolog+ with a much nicer resolution.
However you must fully investigate all possibilities to get the highest probability result.
I'll write a little more about this when I have time as well as how it can be easily parallelized.