Don't Know / Don't Care nondeterminism

If I say to a class of students `Write all your names on this piece of paper' then I know that I want ALL the names, but I don't KNOW which ORDER they will be written in.

If I say to a class of students `One of you must clean the board before the lesson' then I only want ONE of them to do it, and I don't CARE who.

Or, in an operating system, when I save a file in the editor, I don't care which particular block of the disk the file is written on. But once the OS has started writing the file to one block, I don't want it to change its mind half-way through -- I want it to COMMIT to the CHOICE it has made.

So don't know nondeterminism is what you get from Prolog's search rule whereas don't care nondeterminism (sometimes called indeterminism) is what you would expect from an OS, or from `Committed choice parallel logic languages' such as Parlog or FGHC. Committed choice is linked to the idea of a guard or commit operator which is like the cut in Prolog (but imagine having to have a cut at the begining of every clause, so once you have selected it, you are committed to it and there is no back-tracking).

Committed-choice and don't care --> you lose the link between declarative (model-theoretic) and operational semantics which is one of the nice things about Prolog. [Explanation contributed by ?]

[Welcome to the Constraints Archive]