There is little chance that Brian is a swan. It is highly unlikely that Greg is green. It is unlikely that Winona is a mouse. It is highly unlikely that if 'Brian is a swan and Winona is a mouse' then Jeff discarded the milk. Chances are about even that if 'Brian is a swan' or 'Winona is a mouse' or both then John went to the office. It is almost certain that if 'Brian is a swan' or 'Greg is green' or both then Bernhard is gray.
There is little chance that either 'Bernhard is gray' or 'Greg is green' but not both.
There is little chance that either 'Bernhard is gray' or 'Greg is green' but not both.
We believe that either 'Bernhard is gray' or 'Greg is green' 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.
  0.05::factB.
  0.2::factC.
  %hop1
  0.05::factX:-and(factA,factC).
  0.5::factY:-or(factA,factC).
  0.95::factZ:-or(factA,factB).

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

  query(conclusion).
  
Either 'Bernhard is gray' or 'Greg is green' but not both.