It is unlikely that Bernhard is yellow. Chances are slight that Gertrude is a mouse. It is almost certain that Greg is a swan. Chances are slight that if 'Greg is a swan' or 'Gertrude is a mouse' or both then Winona is a sheep. It is certain that if 'Gertrude is a mouse' or 'Greg is a swan' or both then John moved to the garden. We believe that if either 'Greg is a swan' or 'Gertrude is a mouse' but not both then Lily is a frog.
We believe that either 'John moved to the garden' or 'Bernhard is yellow' but not both.
We believe that either 'John moved to the garden' or 'Bernhard is yellow' but not both.
There is little chance that either 'John moved to the garden' or 'Bernhard is yellow' 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.2::factA.
  0.1::factB.
  0.95::factC.
  %hop1
  0.1::factX:-or(factC,factB).
  1.0::factY:-or(factB,factC).
  0.75::factZ:-xor(factC,factB).

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

  query(conclusion).
  
Either 'John moved to the garden' or 'Bernhard is yellow' but not both.