// Examples 4, 6, 7 and 8 (I&C) const double epsilon = 1e-6; // Example 4 // Should be this but can't do it (strict bounds) !multi(P<0.98 [ G !"err_G" ], P>=0.8 [ G !("err_A")]) // So do this instead // Result should be true (there is no satisfying adversary) "triple": !multi(P<=(0.98-epsilon) [ G !"err_G" ], P>=0.8 [ G !("err_A")]) // But fails for a higher p_G "triple_fail": !multi(P<=(0.99-epsilon) [ G !"err_G" ], P>=0.8 [ G !("err_A")]) // Example 6 // Numerical version: gives 0.98 "numerical": multi(Pmin=? [ G !"err_G" ], P>=0.8 [ G !("err_A")]) // Or equivalently: 1 - multi(Pmax=? [ F "err_G" ], P<=0.2 [F "err_A"]) // Example 7 // Parameterised version: gives 0.7 "param": multi(Pmax=? [ G !"err_A" ], P<=0.97-epsilon [ G !("err_G")]) // Example 8 // Pareto version "pareto": multi(Pmin=? [ G !"err_G" ], Pmax=? [ G !("err_A")])