¿La negación como fracaso en Prolog es un comportamiento procesal?

Tengo una pequeña pregunta sobre elnegación como fracaso en lenguaje prologo

Esta es una pregunta más teórica que práctica porque tengo claro cómo funciona este ejemplo.

Así que tengo el siguiente programa de Prolog:

/* Fatti che specificano quali esseri sono degli animali: */
animal(cat).
animal(dog).
animal(frog).
animal(horse).
animal(viper).
animal(boa).
animal(python).

/* Fatti che specificano quali esseri sono dei serpenti: */
snake(viper).
snake(boa).
snake(python).

/* X è un serpente, fallisce ed impedisce il backtracking quindi
   il predicato likes(mary,X) risulta essere falso: */
likes(mary,X) :- snake(X),
                 !,
                 fail.

/* Se X è un animale allora a mary piace: */
likes(mary, X) :- animal(X).

En Prolog no puedo simplemente decir algo como:"María ama a todos los animales, pero no a las serpientes" Y tengo que formularlo de esta manera:"Si X es una serpiente, entonces Mary no la ama. De lo contrario, si X es un animal, mary la ama"

El programa precedente hace exactamente esto, por la regla:

likes(mary,X) :- snake(X),
                 !,
                 fail.

Verifique el prólogo si es cierto que X es una serpiente, impone el corte para evitar retroceder y forzar una falla del predicado.

De esta manera siserpiente (x) esCIERTO El programa obliga al fallo también de la cabeza prediate.me gusta (mary, x) e imponer el retroceso evita la posibilidad de ejecutar la otra regla en el programa (esa respuesta es verdadera porque una serpiente también es un animal)

Mi pregunta es:Me parece que este uso de Prolog cae fuera del paradigma lógico y declarativo y de alguna manera cae en algún tipo de paradigma de procedimiento.

Porque:

Tengo que imponer un orden del predicado 2 (así que de alguna manera estoy diciendo: si el primero falla, pruebe el segundo).Pero aún más, estoy diciendo que: si la primera regla coincide (X es una serpiente), ejecute un fallo forzado y no imponga un retroceso.

Esto me parece más cercano a un significado de procedimiento que un significado lógico clásico ...

¿Es eso? ¿Es que en estos casos, Prolog utiliza un comportamiento de procedimiento para superar una limitación de la lógica?

Respuestas a la pregunta(2)

Su respuesta a la pregunta