It is highly unlikely that John got the apple. There is almost no chance that Greg is a swan. It is almost certain that Bill went to the kitchen. There is almost no chance that if 'Bill went to the kitchen' or 'John got the apple' or both then Daniel took the milk. Chances are slight that if 'Bill went to the kitchen' or 'Greg is a swan' or both then Bernhard is a rhino. It is probably the case that if either 'John got the apple' or 'Greg is a swan' but not both then Brian is a frog.
It is certain that either 'Greg is a swan' or 'Bernhard is a rhino' but not both.
There is little chance that either 'Greg is a swan' or 'Bernhard is a rhino' but not both.
It is certain that either 'Greg is a swan' or 'Bernhard is a rhino' 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.02::factB.
  0.95::factC.
  %hop1
  0.02::factX:-or(factC,factA).
  0.1::factY:-or(factC,factB).
  0.7::factZ:-xor(factA,factB).

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

  query(conclusion).
  
Either 'Greg is a swan' or 'Bernhard is a rhino' but not both.