Quindi sto cercando di capire come funziona Datalog e una delle differenze tra esso e Prolog è che ha limitazioni di stratificazione poste sulla negazione e sulla ricorsione. Per citare Wikipedia:Datalog Stratification
Se un predicato P è derivato positivamente da un Q predicato (cioè, P è la testa di una regola, e Q si verifica positiva nel corpo della stessa regola), allora la numero stratificazione di P deve essere maggiore o uguale al numero stratificazione di Q
Se un predicato P è derivato da un negato predicato Q (cioè, P è la testa di una regola, e Q avviene negativamente nel corpo della stessa regola), quindi il numero di stratificazione di P deve essere maggiore della stratificazione numero di Q,
Quindi, passando da questo, i due seguenti predicati non risultano in un errore di stratificazione poiché possono semplicemente essere assegnati lo stesso numero di stratificazione. Quindi questi predicati vanno bene, nonostante la definizione circolare.
- A (x): - B (x)
- B (x): - A (x)
Ma contrasto che con ciò che accade se abbiamo una definizione che ha una certa negazione coinvolti (Dove ~ è la negazione)
- A (x): - ~ B (x)
- B (x): - ~ A (x)
Qui una stratificazione è impossibile. A (x, y) deve avere un numero di stratificazione maggiore di B (x, y), e B (x, y) deve avere un numero di stratificazione maggiore di A (x, y). Il mio primo pensiero fu che non andava bene perché questa è una definizione circolare, ma la stratificazione va bene con circolarità finché i predicati non sono negati. Ma perché? I valori di verità sono semplicemente binari. Sembra estremamente arbitrario trattare formule che hanno un simbolo di negazione diversamente in questo modo. Qual è questa stratificazione che tenta di prevenire nel secondo caso che non è nel primo?