I have read the very helpful (Dafny: What does no terms found to trigger on mean?) but can any one tell me how to prove the two assertions marked with /**/.
Not even sure if they can be proven. The logically equivalent assertions with the defined function inters
are proven and may be that is as far as you can go. Any insight greatly appreciated.
function inters(a:set<int>, b:set<int>): set<int> {a*b}
method pingo(a:set<int>, b:set<int>)
{
assert (forall x:int :: (x !in inters(a , b) ) <==> (x in a ==> x!in b ));
assert (forall x:int :: (x !in a*b) <==> (x in a ==> x!in b ));
assert (forall x:int :: (x !in inters(a , b) )) <==>
(forall x:int :: (x in a ==> x!in b ));
/**/ assert (forall x:int :: (x !in a*b)) <==>
(forall x:int :: (x in a ==> x!in b ));
assert ((a*b) == {}) <==> (forall x:int ::(x in a ==> x!in b )) ;
assert ((a*b) == {}) ==> (forall x:int :: (x !in inters(a , b) ));
/**/ assert ((a*b) == {}) ==> (forall x:int :: (x !in a*b )) ;
}