It is highly unlikely that Jessica is a cat. It is probable that Bernhard is gray. There is almost no chance that Jeff went to the garden. There is almost no chance that if either 'Jeff went to the garden' or 'Bernhard is gray' but not both then Brian is a swan. There is almost no chance that if 'Jeff went to the garden' or 'Jessica is a cat' or both then Greg is green. It is impossible that if either 'Jessica is a cat' or 'Jeff went to the garden' but not both then Winona is a mouse.
It is almost certain that either 'Brian is a swan' or 'Greg is green' but not both.
There is almost no chance that either 'Brian is a swan' or 'Greg is green' but not both.
It is almost certain that either 'Brian is a swan' 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.05::factA.
  0.7::factB.
  0.02::factC.
  %hop1
  0.02::factX:-xor(factC,factB).
  0.02::factY:-or(factC,factA).
  0.0::factZ:-xor(factA,factC).

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

  query(conclusion).
  
Either 'Brian is a swan' or 'Greg is green' but not both.