[mercury-users] Solver types and \=

Peter Moulder Peter.Moulder at infotech.monash.edu.au
Sun Aug 14 17:18:19 AEST 2005

On Fri, Aug 12, 2005 at 02:09:01PM +1000, Peter Stuckey wrote:

> \= should be considered a separate predicate from = and have a default
> implemetation for ground times of not(=). This would mean that code 
> would always be correct.

One thing to keep in mind if any change does come out of this
conversation (whether \= should be a shortcut for not(... = ...) is the
behaviour of `@' and semidet functions (and perhaps other language

In the below, `f' represents a call to a semidet function or an `@'

`f \= 5' is short for `not(f = 5)', which in turn is short for
`not(New_var = f, New_var = 5)'.  If f results in failure, then

  f = 5  is false,
  f < 5  is false,
  f > 5  is false,
  f = f  is false (!), and
  p(f)  is false for all pred p (including `:- mode p(in) is det.  p(_).')
  f \= 5  is true.

[The above is just from memory, sorry I haven't checked that my memory
 is correct.]

I don't claim that the above is desirable behaviour, I merely note that
there may exist Mercury code that assumes this behaviour; so if any of
that behaviour does change as a result of changes to `\=' then at the
least the release notes should mention the issue, and ideally the
compiler might generate a warning for code whose behaviour depends on
this treatment.  (Such a warning would be useful even before such a

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