It is impossible that Daniel got the football. There is little chance that Bernhard is a frog. It is impossible that Lily is a swan. It is likely that if 'Bernhard is a frog' or 'Daniel got the football' or both then Mary moved to the garden. There is a better than even chance that if 'Bernhard is a frog' or 'Daniel got the football' or both then Greg is gray. There is almost no chance that if 'Lily is a swan' or 'Daniel got the football' or both then Jason is tired.
It is certain that either 'Greg is gray' or 'Mary moved to the garden' but not both.
It is highly unlikely that either 'Greg is gray' or 'Mary moved to the garden' but not both.
It is certain that either 'Greg is gray' or 'Mary moved to the garden' 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.0::factA.
  0.1::factB.
  0.0::factC.
  %hop1
  0.7::factX:-or(factB,factA).
  0.6::factY:-or(factB,factA).
  0.02::factZ:-or(factC,factA).

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

  query(conclusion).
  
Either 'Greg is gray' or 'Mary moved to the garden' but not both.