It is impossible that Bernhard is a swan. There is a very good chance that Brian is white. We doubt that Jeff went to the hallway. Chances are slight that if either 'Jeff went to the hallway' or 'Brian is white' but not both then John is in the garden. It is probable that if 'Bernhard is a swan' or 'Brian is white' or both then Daniel grabbed the apple. It is likely that if 'Brian is white and Bernhard is a swan' then Mary dropped the milk.
It is impossible that 'John is in the garden and Mary dropped the milk'.
It is impossible that 'John is in the garden and Mary dropped the milk'.
It is certain that 'John is in the garden and Mary dropped 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.0::factA.
  0.8::factB.
  0.2::factC.
  %hop1
  0.1::factX:-xor(factC,factB).
  0.7::factY:-or(factA,factB).
  0.7::factZ:-and(factB,factA).

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

  query(conclusion).
  
'John is in the garden and Mary dropped the milk'.