t(_)::stress(X) :- person(X).
t(_)::influences(X,Y) :- person(X), person(Y).
smokes(X) :- stress(X).
smokes(X) :- friend(X,Y), influences(Y,X), smokes(Y).
person(1).
person(2).
person(3).
person(4).
friend(1,2).
friend(2,1).
friend(2,4).
friend(3,2).
friend(4,2).
evidence(smokes(2),false).
evidence(smokes(4),true).
evidence(influences(1,2),false).
evidence(influences(4,2),false).
evidence(influences(2,3),true).
evidence(stress(1),true).
Social networks (Friends & Smokers)¶
The previous example is propositional. Learning can be used for all valid ProbLog programs, also first-order or relational ones, like for instance the Friends & Smokers program. For such relational programs, even a dataset consisting of a single (partial) interpretation can suffice for learning, as such an example can contain multiple groundings of the intensional probabilistic facts whose probabilities we are trying to learn.