It is impossible that Brian is a lion. It is likely that Jeff moved to the garden. It is highly unlikely that John got the milk. It is highly likely that if 'Jeff moved to the garden' or 'John got the milk' or both then Bernhard is a rhino. There is little chance that if 'John got the milk' or 'Jeff moved to the garden' or both then Mary went to the hallway. There is almost no chance that if 'Brian is a lion' or 'John got the milk' or both then Antoine is bored.
It is probably not the case that either 'Jeff moved to the garden' or 'Brian is a lion' but not both.
It is probably the case that either 'Jeff moved to the garden' or 'Brian is a lion' but not both.
It is probably not the case that either 'Jeff moved to the garden' or 'Brian is a lion' 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.0::factA.
  0.7::factB.
  0.05::factC.
  %hop1
  0.9::factX:-or(factB,factC).
  0.1::factY:-or(factC,factB).
  0.02::factZ:-or(factA,factC).

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

  query(conclusion).
  
Either 'Jeff moved to the garden' or 'Brian is a lion' but not both.