[mercury-users] Mutual Exclusivity & Exhaustiveness

Simon Taylor stayl at cs.mu.OZ.AU
Thu Jan 3 14:22:59 AEDT 2002


On 03-Jan-2002, Ralph Becket <rafe at cs.mu.OZ.AU> wrote:
> Simon Taylor, Thursday,  3 January 2002:
> > On 03-Jan-2002, Ralph Becket <rafe at cs.mu.OZ.AU> wrote:
> > > Simon Taylor, Thursday,  3 January 2002:
> > > > 2. All of the variables in the head of the rule must appear in
> > > > each disjunct.
> > > 
> > > Why is that necessary?
> > 
> > We definitely want to disallow examples like:
> > 
> > :- promise_exclusive(X::ground, Y::ground) is det :-
> > 		( foo(X)
> > 		; bar(X, Y)
> > 		; baz(Y)
> > 		).
> 
> Hmm, from the above we can infer
> 
> :- promise_exclusive(X::ground) is det :-
> 	( foo(X)
> 	; baz(X)
> 	).

How? The arguments of foo and baz need not even have the same type.
 
> By the way, I don't think the connective should be ":-". 

Actually, my suggested syntax doesn't parse. Oops.

> The usual reading of "P :- Q" is "P if Q".  What we're trying to say here is
> that the LHS implies the RHS!  So something like `for` would be a better
> choice.

I'd rather not invent another connective just for this.

Maybe this would be better:

:- promise_exclusive(X::ground) is det where
	( foo(X)
	; baz(X)
	).
 
> Going further, the use of disjunction is wrong, too.  Maybe a plain list
> would be better:
>
> :- promise_exclusive(X::ground) `for` [
> 	foo(X)
> 	bar(X, _)
> 	baz(X)
> ].

The disjunction mimics how code using the promise is written.
It also has the correct variable scoping rules.
I don't see how a list is any more correct. The elements of
the "list" don't have the same type.
 
Simon.
--------------------------------------------------------------------------
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the users mailing list