It is unlikely that Mary got the football. It is unlikely that John went to the hallway. It is unlikely that Bill moved to the office. It is highly likely that if either 'Bill moved to the office' or 'John went to the hallway' but not both then Bernhard is yellow. It is probable that if either 'John went to the hallway' or 'Mary got the football' but not both then Daniel took the milk. It is probable that if 'Bill moved to the office' or 'Mary got the football' or both then Greg is a lion.
It is probably not the case that either 'Bill moved to the office' or 'Daniel took the milk' but not both.
It is probably not the case that either 'Bill moved to the office' or 'Daniel took the milk' but not both.
It is probably the case that either 'Bill moved to the office' or 'Daniel took 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.2::factA.
  0.2::factB.
  0.2::factC.
  %hop1
  0.9::factX:-xor(factC,factB).
  0.7::factY:-xor(factB,factA).
  0.7::factZ:-or(factC,factA).

  %hop2
  conclusion:-xor(factC,factY).

  query(conclusion).
  
Either 'Bill moved to the office' or 'Daniel took the milk' but not both.