There is almost no chance that Bernhard is gray. It is highly unlikely that John went to the garden. Chances are about even that Julius is a swan. It is certain that if either 'Bernhard is gray' or 'John went to the garden' but not both then Brian is white. Chances are about even that if 'John went to the garden' or 'Julius is a swan' or both then Greg is a frog. It is probably not the case that if 'Julius is a swan' or 'Bernhard is gray' or both then Gertrude is a sheep.
It is impossible that 'Bernhard is gray' or 'Julius is a swan' or both.
Chances are about even that 'Bernhard is gray' or 'Julius is a swan' or both.
It is impossible that 'Bernhard is gray' or 'Julius is a swan' or 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.02::factA.
  0.05::factB.
  0.5::factC.
  %hop1
  1.0::factX:-xor(factA,factB).
  0.5::factY:-or(factB,factC).
  0.25::factZ:-or(factC,factA).

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

  query(conclusion).
  
'Bernhard is gray' or 'Julius is a swan' or both.