It is highly unlikely that Daniel got the milk. It is highly likely that Lily is a swan. It is highly unlikely that Greg is a rhino. There is little chance that if either 'Daniel got the milk' or 'Greg is a rhino' but not both then Jessica is a cat. It is improbable that if 'Daniel got the milk' or 'Lily is a swan' or both then Bernhard is green. There is almost no chance that if 'Greg is a rhino' or 'Daniel got the milk' or both then Mary went to the hallway.
We believe that either 'Mary went to the hallway' or 'Daniel got the milk' but not both.
It is highly unlikely that either 'Mary went to the hallway' or 'Daniel got the milk' but not both.
We believe that either 'Mary went to the hallway' or 'Daniel got the milk' but not both.

  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.05::factA.
  0.9::factB.
  0.05::factC.
  %hop1
  0.1::factX:-xor(factA,factC).
  0.1::factY:-or(factA,factB).
  0.02::factZ:-or(factC,factA).

  %hop2
  conclusion:-xor(factZ,factA).

  query(conclusion).
  
Either 'Mary went to the hallway' or 'Daniel got the milk' but not both.