Under the closed-world assumption,
what is not currently known to be true, is false
Prolog's semantics is often said to follow the closed-world assumption, for example, here:
Prolog is based on closed world assumption (CWA) -- that is, if a proposition is not in the fact database and not derivable from the fact database, then it is not true.
However, it doesn't quite behave this way. Under CWA, I'd expect
?- a.
false.
But instead, in SWI-Prolog, I get:
?- a.
ERROR: Undefined procedure: a/0 (DWIM could not correct goal)
Why is that? Is it wrong to say that Prolog is based on CWA?