There is little chance that Bernhard is a rhino. It is certain that John went to the garden. Chances are slight that Gertrude is a mouse. It is certain that if either 'Gertrude is a mouse' or 'John went to the garden' but not both then Lily is a swan. It is improbable that if 'Bernhard is a rhino' or 'John went to the garden' or both then Sandra dropped the milk. It is unlikely that if 'John went to the garden' or 'Bernhard is a rhino' or both then Brian is gray.
It is probably not the case that either 'Brian is gray' or 'Sandra dropped the milk' but not both.
It is probably not the case that either 'Brian is gray' or 'Sandra dropped the milk' but not both.
We believe that either 'Brian is gray' or 'Sandra dropped 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.1::factA.
  1.0::factB.
  0.1::factC.
  %hop1
  1.0::factX:-xor(factC,factB).
  0.1::factY:-or(factA,factB).
  0.2::factZ:-or(factB,factA).

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

  query(conclusion).
  
Either 'Brian is gray' or 'Sandra dropped the milk' but not both.