Negation and don't-care

Outside not, the don’t-care _ behaves like a fresh, use-once variable: divisor(_, 6) is just divisor(X, 6) for a throwaway X.

Under not, that shortcut breaks: not p(_) and not p(X) are not the same.

  • not p(X) reads ∃X. ¬p(X) — “some X is not in p”. The sits outside the negation, so X must be bound elsewhere; on its own not p(X) is unsafe.
  • not p(_) reads ¬∃X. p(X) — “p holds of nothing”. The sits inside the negation.

So not p(_) is safe on its own: _ needs no binding. It succeeds exactly when p is empty.

The difference is quantifier scope: under not, the don't-care's stays inside the negation, turning not p(_) into the test "is p empty?".