We believe that Bernhard is a rhino. It is probable that Jason is tired. It is likely that Brian is green. It is probably not the case that if 'Bernhard is a rhino' or 'Brian is green' or both then Julius is a frog. It is probably not the case that if 'Jason is tired and Brian is green' then John moved to the garden. Chances are about even that if 'Brian is green' or 'Bernhard is a rhino' or both then Mary picked up the milk.
It is impossible that either 'Mary picked up the milk' or 'Bernhard is a rhino' but not both.
Chances are about even that either 'Mary picked up the milk' or 'Bernhard is a rhino' but not both.
It is impossible that either 'Mary picked up the milk' or 'Bernhard is a rhino' 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.75::factA.
  0.7::factB.
  0.7::factC.
  %hop1
  0.25::factX:-or(factA,factC).
  0.25::factY:-and(factB,factC).
  0.5::factZ:-or(factC,factA).

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

  query(conclusion).
  
Either 'Mary picked up the milk' or 'Bernhard is a rhino' but not both.