Chances are about even that Greg is a swan. It is certain that Brian is gray. There is almost no chance that Bernhard is green. It is highly likely that if 'Bernhard is green and Brian is gray' then Jessica is a cat. There is a very good chance that if either 'Brian is gray' or 'Bernhard is green' but not both then Sandra left the milk. Chances are slight that if 'Bernhard is green' or 'Brian is gray' or both then John picked up the apple.
There is almost no chance that either 'Jessica is a cat' or 'Greg is a swan' but not both.
Chances are about even that either 'Jessica is a cat' or 'Greg is a swan' but not both.
There is almost no chance that either 'Jessica is a cat' or 'Greg is a swan' 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.5::factA.
  1.0::factB.
  0.02::factC.
  %hop1
  0.9::factX:-and(factC,factB).
  0.8::factY:-xor(factB,factC).
  0.1::factZ:-or(factC,factB).

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

  query(conclusion).
  
Either 'Jessica is a cat' or 'Greg is a swan' but not both.