It is likely that Jessica is a cat. It is almost certain that Bernhard is a frog. It is improbable that John got the milk. There is almost no chance that if either 'Jessica is a cat' or 'John got the milk' but not both then Sandra left the milk. It is likely that if 'John got the milk' or 'Jessica is a cat' or both then Greg is a swan. There is almost no chance that if 'Bernhard is a frog and Jessica is a cat' then Brian is gray.
It is probable that 'Brian is gray and Sandra left the milk'.
It is impossible that 'Brian is gray and Sandra left the milk'.
It is probable that 'Brian is gray and Sandra left the milk'.

  and(A,B) :- A,B.
  or(A,B) :- A;B.
  nand(A,B) :- not(and(A,B)).
  nor(A,B) :- not(or(A,B)).
  xor(A,B) :- or(A,B), nand(A,B).

  %hop0
  0.7::factA.
  0.95::factB.
  0.1::factC.
  %hop1
  0.02::factX:-xor(factA,factC).
  0.7::factY:-or(factC,factA).
  0.02::factZ:-and(factB,factA).

  %hop2
  conclusion:-and(factZ,factX).

  query(conclusion).
  
'Brian is gray and Sandra left the milk'.