[mercury-users] Constraints and conditionals in Mercury

Mark Brown mark at csse.unimelb.edu.au
Mon Apr 14 12:10:31 AEST 2008


On 11-Apr-2008, Richard A. O'Keefe <ok at cs.otago.ac.nz> wrote:
> I should clarify that the concern was specifically with if-then-else
> tests where the solver variables are entirely local to the test and
> do not appear in the call, so would not be visible in the type or
> mode of the predicate itself.  It seems possible from Ralph Beckett's
> reply (saying that "inst 'any' in the condition is noticed) that
> Mercury might *not* notice this.
>
> Here's an example.
>
> knights_tour/1 has one argument, an integer.  It is known to be ground.
> There is a conditional
>
> 	if knights_tour(N) then ... else ...
>
> The implementation of knights_tour/1 uses constraints *internally* to
> determine whether there exists at least one knight's tour on an NxN
> board or not.  Suppose that knights_tour(N) leaves some constraints
> pending when it exits, and that for some value of N those constraints
> are not satisfiable.  (Perhaps the programmer got it wrong.)
>
> What happens?

As Ralph says, the problem is with variables going out of scope.  Here's
another example:

	some [A, B, C] (
		new_bool_var(A),
		new_bool_var(B),
		new_bool_var(C),
		all_different([A, B, C])
	)

This is likely to succeed even though there does not exist any A, B, C
satisfying the conjunction.  As the constraint programmers would say, the
goal is not "solver complete".

Cheers,
Mark.

--------------------------------------------------------------------------
mercury-users mailing list
Post messages to:       mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions:          mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the users mailing list