Despite ubiquitous ML/DL/RL/whatever AI algorithms and tooling presence, some domains still continue to use the old school logic programming. Many heard horror stories about Prolog and its forgotten magicians. You would be surprised, that recent developments in mathematics, systems programming, genetics and bioinformatics pushed the boundary of pure AI and offered a hybrid approach. At first, ProbLog was created as a logic programming engine with every rule attached with probability. It looks something like that:
0.7::burglary. 0.2::earthquake. 0.9::p_alarm1. 0.8::p_alarm2. 0.1::p_alarm3. alarm :- burglary, earthquake, p_alarm1. alarm :- burglary, \+earthquake, p_alarm2. alarm :- \+burglary, earthquake, p_alarm3. evidence(alarm,true). query(burglary). query(earthquake).
Then authors decided to go even further, and to integrate ProbLog with Deep Learning - this is when DeepProbLog was created. It effectively allows you to combine probabilistic logic reasoning along with a facts inference by a neural network. For example see the MNIST addition primer:
nn(mnist_net,[X],Y,[0,1,2,3,4,5,6,7,8,9]) :: digit(X,Y). addition(X,Y,Z) :- digit(X,X2), digit(Y,Y2), Z is X2+Y2.
The problem is - it is written in Python and not as fast as might have been. I think it might be beneficial for Julia community to work along these lines too, consider implementing similar system, or somehow be inspired by this work. Hope you enjoy the read and will be interested in exploring more of these depths.