There is almost no chance that Winona is a cat. It is probably not the case that Bill moved to the office. It is almost certain that Mary left the football. There is little chance that if 'Bill moved to the office' or 'Mary left the football' or both then Bernhard is a frog. It is highly likely that if 'Winona is a cat and Bill moved to the office' then Brian is a lion. It is impossible that if either 'Mary left the football' or 'Winona is a cat' but not both then John put down the apple.
It is probably not the case that either 'Bill moved to the office' or 'Bernhard is a frog' but not both.
It is probably not the case that either 'Bill moved to the office' or 'Bernhard is a frog' but not both.
It is certain that either 'Bill moved to the office' or 'Bernhard is a frog' 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.02::factA.
  0.25::factB.
  0.95::factC.
  %hop1
  0.1::factX:-or(factB,factC).
  0.9::factY:-and(factA,factB).
  0.0::factZ:-xor(factC,factA).

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

  query(conclusion).
  
Either 'Bill moved to the office' or 'Bernhard is a frog' but not both.