/* Statistical dependence in Picat. From https://mhtess.github.io/bdappl/chapters/05-patterns.html Cf my Gamble model gamble_statistical_dependence.rkt This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import ppl_distributions, ppl_utils. import util. main => go. /* obs = none var : a Probabilities: true: 0.5508999999999999 false: 0.4491000000000000 mean = [true = 0.5509,false = 0.4491] var : b Probabilities: true: 0.5009000000000000 false: 0.4991000000000000 mean = [true = 0.5009,false = 0.4991] var : c Probabilities: false: 0.5024999999999999 true: 0.4975000000000000 mean = [false = 0.5025,true = 0.4975] obs = false var : a Probabilities: false: 0.7971928397070789 true: 0.2028071602929211 mean = [false = 0.797193,true = 0.202807] var : b Probabilities: false: 1.0000000000000000 mean = [false = 1.0] var : c Probabilities: false: 0.5048820179007323 true: 0.4951179820992677 mean = [false = 0.504882,true = 0.495118] obs = true var : a Probabilities: true: 0.8937839468919735 false: 0.1062160531080266 mean = [true = 0.893784,false = 0.106216] var : b Probabilities: true: 1.0000000000000000 mean = [true = 1.0] var : c Probabilities: true: 0.5041239187286261 false: 0.4958760812713739 mean = [true = 0.504124,false = 0.495876] */ go ?=> member(Obs,[none,false,true]), println(obs=Obs), reset_store, run_model(10_000,$model(Obs),[show_probs_trunc,mean]), nl, % show_store_lengths, fail, nl. go => true. model(Obs) => C = flip(0.5), B = flip(0.5), A = condt(B,flip(0.9),flip(0.2)), if Obs != none then observe(B == Obs), if observed_ok then add("a",A), add("b",B), add("c",C), end else add("a",A), add("b",B), add("c",C) end.