It is probably the case that Mary dropped the milk. It is impossible that Brian is green. It is probable that Winona is a sheep. It is likely that if 'Brian is green' or 'Mary dropped the milk' or both then John moved to the office. There is almost no chance that if 'Brian is green' or 'Winona is a sheep' or both then Jessica is a cat. There is a very good chance that if 'Mary dropped the milk' or 'Winona is a sheep' or both then Julius is a swan.
It is almost certain that either 'Mary dropped the milk' or 'John moved to the office' but not both.
We doubt that either 'Mary dropped the milk' or 'John moved to the office' but not both.
It is almost certain that either 'Mary dropped the milk' or 'John moved to the office' 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.7::factA.
  0.0::factB.
  0.7::factC.
  %hop1
  0.7::factX:-or(factB,factA).
  0.02::factY:-or(factB,factC).
  0.8::factZ:-or(factA,factC).

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

  query(conclusion).
  
Either 'Mary dropped the milk' or 'John moved to the office' but not both.