It is unlikely that Bernhard is gray. It is probably not the case that Lily is a frog. It is highly unlikely that Julius is white. Chances are about even that if either 'Lily is a frog' or 'Julius is white' but not both then Bill went to the kitchen. Chances are slight that if either 'Julius is white' or 'Lily is a frog' but not both then Brian is a rhino. It is unlikely that if either 'Bernhard is gray' or 'Lily is a frog' but not both then John left the apple.
There is a very good chance that either 'Bernhard is gray' or 'Julius is white' but not both.
It is probably not the case that either 'Bernhard is gray' or 'Julius is white' but not both.
There is a very good chance that either 'Bernhard is gray' or 'Julius is white' 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.25::factB.
  0.05::factC.
  %hop1
  0.5::factX:-xor(factB,factC).
  0.1::factY:-xor(factC,factB).
  0.2::factZ:-xor(factA,factB).

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

  query(conclusion).
  
Either 'Bernhard is gray' or 'Julius is white' but not both.