Не ответ на ваш вопрос о соответствии, но ...
throw(error(system_error, disallowed(P/N)))
Ошибка разрешения имела бы здесь больше смысла. Но возможные значения для операции и типа разрешения из стандарта не идеальны. Возможно, их расширение и использование чего-то вроде
permission_error(call, predicate, P/N)
A resource_error/1
также не будет здесь надуманным.