```    1/*
2Existence uncertainty/unknown objects.
3This programs models a domain where the number of objects is uncertain.
4In particular, the number of objects follows a geometric distribution
5with parameter 0.7.
6We can ask what is the probability that the object number n exists.
7This program uses directly the geometric distribution primitive.
8From
9Poole, David. "The independent choice logic and beyond." Probabilistic
10inductive logic programming. Springer Berlin Heidelberg, 2008. 222-243.
11*/
12
13
14:- use_module(library(mcintyre)).   15
16:- if(current_predicate(use_rendering/1)).   17:- use_rendering(c3).   18:- endif.   19
20:- mc.   21
24
25numObj(N):-
26  numObj_1(N0),
27  N is N0-1.
28
29obj(I):-
30 numObj(N),
31 between(1, N, I).
32
?- `mc_prob(obj(2),P)`. % what is the probability that object 2 exists? % expected result ~ 0.08992307692307693 ?- `mc_prob(obj(2),P)`,`bar(P,C)`. % what is the probability that object 2 exists? % expected result ~ 0.08992307692307693 ?- `mc_prob(obj(5),P)`. % what is the probability that object 5 exists? % expected result ~ 0.002666 ?- `mc_prob(obj(5),P)`,`bar(P,C)`. % what is the probability that object 5 exists? % expected result ~ 0.002666 ?- `mc_prob(numObj(2),P)`. % what is the probability that there are 2 objects? % expected result ~ 0.0656 ?- `mc_prob(numObj(5),P)`. % what is the probability that there are 5 objects? % expected result ~ 0.0014 ?- `mc_sample(obj(5),1000,P,[successes(T),failures(F)])`. % take 1000 samples of `obj(5)` ?- `mc_sample(obj(5),1000,P)`,`bar(P,C)`. % take 1000 samples of `obj(5)` ?- `mc_sample_arg(numObj(N),100,N,O)`,`argbar(O,C)`. % take 100 samples of L in % `findall(N,numObj(N),L)` ?- `mc_sample_arg(obj(I),100,I,O)`,`argbar(O,C)`. % take 100 samples of L in % `findall(I,obj(I),L)` ?- `mc_sample_arg(obj(I),100,I,Values)`. % take 100 samples of L in % `findall(I,obj(I),L)`