It is certain that John moved to the garden. It is probable that Mary dropped the milk. There is a better than even chance that Fred left the football. It is probably the case that if either 'Mary dropped the milk' or 'Fred left the football' but not both then Sandra grabbed the apple. There is almost no chance that if 'Mary dropped the milk and Fred left the football' then Jeff went to the hallway. It is probably not the case that if 'Mary dropped the milk' or 'Fred left the football' or both then Jessica is a cat.
It is probably not the case that either 'John moved to the garden' or 'Jeff went to the hallway' but not both.
It is certain that either 'John moved to the garden' or 'Jeff went to the hallway' but not both.
It is probably not the case that either 'John moved to the garden' or 'Jeff went to the hallway' 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
  1.0::factA.
  0.7::factB.
  0.6::factC.
  %hop1
  0.7::factX:-xor(factB,factC).
  0.02::factY:-and(factB,factC).
  0.25::factZ:-or(factB,factC).

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

  query(conclusion).
  
Either 'John moved to the garden' or 'Jeff went to the hallway' but not both.