Predicates that impede or prohibit a declarative reading of Prolog programs are extra-logical. Examples of such predicates are:
!/0
(->)/2
and if-then-else(\+)/1
These predicates can only be understood procedurally, by taking into account the actual control flow of the interpreter, and as such are beyond the realm of pure logic.