[m-dev.] Assocative predicates

Peter Schachte pets at students.cs.mu.OZ.AU
Thu Apr 23 11:36:24 AEST 1998

On Thu, 16 Apr 1998, Fergus Henderson wrote:

> How about just `pragma assert(Goal)'?
> 	:- pragma assert(all [A,B,C] (A+B)+C=A+(B+C)).
> 	:- pragma assert(all [A,B,C,D,E,F,G,H] (
> 		foo(A, B, C, D, E), foo(D, E, F, G, H) <=> 
> 		foo(A, B, F, D, E), foo(D, E, C, G, H))).
> This syntax seems to be nice, at least from the user's perspective.

The generality and straight-forwardness of your proposal is certainly
appealing.  I'd like to see implicit quantifiers, but your recent mail
cleans that up rather nicely.

However, I still think there is something to be said for using words people
recognize like "associative," "commutative," etc.  I suppose that can be
done in comments, but how about allowing users (and the standard library) to
define properties.  Maybe something like

:- pragma assertion(associative_function(F) = (F(A,F(B,C)) = F(F(A,B),C))).
:- pragma assertion(associative_predicate(P) = (
	P(A,B,C), P(C,D,E) <=> P(B,C,F), P(A,F,E)

and then

:- pragma assert(associative_function(+)).
:- pragma assert(associative_predicate(append)).

Better still, perhaps the overloading resolution mechanism could be used to
avoid the need for the `_function' and `_predicate' suffixes. 

-Peter Schachte               | The secret of being miserable is to have the
mailto:pets at cs.mu.OZ.AU       | leisure to bother about whether you are
http://www.cs.mu.oz.au/~pets/ | happy or not. The cure is occupation.
PGP: finger pets at |     -- George Bernard Shaw 

More information about the developers mailing list