Hello!
One test nitpick:
+SELECT istrue IMPLIES isnul IS NULL FROM booltbl4;
istrue IMPLIES (isnul IS NULL) and (istrue IMPLIES isnul) IS NULL are
both true. isfalse wouldn't have the same issue.
%left INTERSECT
+%right IMPLIES
%left OR
And +1 for using %nonassoc instead
That way "a IMPLIES b IMPLIES c" would be a syntax error, leaving open
the later possibility of making it right associative. The other way of
going with right, and then restricting it later doesn't seem that
clean, even with documenting it, as right associative use can appear
as text in plpgsql bodies and similar.