It is highly unlikely that Greg is a rhino. It is certain that Jeff discarded the milk. There is almost no chance that Julius is gray. It is likely that if 'Julius is gray' or 'Greg is a rhino' or both then Lily is green. It is impossible that if either 'Julius is gray' or 'Jeff discarded the milk' but not both then John grabbed the apple. Chances are about even that if 'Jeff discarded the milk' or 'Julius is gray' or both then Bernhard is a frog.
It is almost certain that 'Lily is green and Bernhard is a frog'.
There is almost no chance that 'Lily is green and Bernhard is a frog'.
It is almost certain that 'Lily is green and Bernhard is a frog'.

  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.
  1.0::factB.
  0.02::factC.
  %hop1
  0.7::factX:-or(factC,factA).
  0.0::factY:-xor(factC,factB).
  0.5::factZ:-or(factB,factC).

  %hop2
  conclusion:-and(factX,factZ).

  query(conclusion).
  
'Lily is green and Bernhard is a frog'.