HiLog - HiLog
HiLog é uma lógica de programação com sintaxe de ordem superior, que permite que termos arbitrários apareçam em posições de predicado e função. No entanto, a teoria do modelo de HiLog é de primeira ordem. Embora sintaticamente o HiLog estenda estritamente a lógica de primeira ordem , o HiLog pode ser integrado a essa lógica.
HiLog foi descrito pela primeira vez em 1989. Posteriormente, foi estendido na direção da lógica de classificação múltipla .
O sistema XSB analisa a sintaxe HiLog, mas a integração do HiLog no XSB é apenas parcial. Em particular, HiLog não é integrado ao sistema de módulo XSB. Uma implementação completa do HiLog está disponível no sistema Flora-2 .
Foi demonstrado que o HiLog pode ser incorporado à lógica de primeira ordem por meio de uma transformação bastante simples. Por exemplo, p(X)(Y,Z(V)(W))
fica embutido como o seguinte termo de primeira ordem: apply(p(X),Y,apply(apply(Z,V),W))
.
O Framework for Logic-Based Dialects (RIF-FLD) do Rule Interchange Format (RIF) é amplamente baseado nas ideias subjacentes ao HiLog e ao F-logic .
Exemplos
Em todos os exemplos abaixo, os símbolos em maiúsculas denotam variáveis e a vírgula denota conjunção lógica , como na maioria das linguagens de programação lógica . O primeiro e o segundo exemplos mostram que as variáveis podem aparecer em posições de predicado. Predicados podem até ser termos complexos, como closure(P)
ou maplist(F)
abaixo. O terceiro exemplo mostra que as variáveis também podem aparecer no lugar de fórmulas atômicas, enquanto o quarto exemplo ilustra o uso de variáveis no lugar de símbolos de função. O primeiro exemplo define um operador de fechamento transitivo genérico , que pode ser aplicado a um predicado binário arbitrário. O segundo exemplo é semelhante. Ele define um operador de mapeamento semelhante ao LISP , que se aplica a um predicado binário arbitrário. O terceiro exemplo mostra que o meta-predicado Prologcall/1
pode ser expresso em HiLog de forma natural e sem o uso de recursos extralógicos. O último exemplo define um predicado que atravessa árvores binárias arbitrárias representadas como termos de primeira ordem .
closure(P)(X,Y) <- P(X,Y).
closure(P)(X,Y) <- P(X,Z), closure(P)(Z,Y).
maplist(F)([],[]).
maplist(F)([X|R],[Y|Z]) <- F(X,Y), maplist(F)(R,Z).
call(X) <- X.
traverse(X(L,R)) <- traverse(L), traverse(R).
Referências
Leitura adicional
- Ross, Kenneth A. (janeiro de 1994). "On negation in HiLog" . Journal of Logic Programming . 18 (1): 27–53. doi : 10.1016 / 0743-1066 (94) 90040-X . CiteSeer x : 10.1.1.55.2148
- Bruijn, Jos; Heymans, Stijn (janeiro de 2008). "Sobre a relação entre ontologias baseadas em lógica descritiva e ontologias baseadas em lógica F" . Fundamenta Informaticae . 82 (3): 213–236. CiteSeer x : 10.1.1.602.2421