HiLog

HiLog — язык программирования на основе логики с синтаксисом высшего порядка, который позволяет размещать произвольные термы в позициях предикатов и функций[1]. При этом модельная теория HiLog остаётся первого порядка. Несмотря на то что по синтаксису HiLog существенно расширяет логику первого порядка, возможно вложение (эмуляция) HiLog в эту логику.

Описание

HiLog был впервые описан в 1989 году[2]. Позднее язык был расширен в сторону многосортной логики[3].

Система XSB может анализировать синтаксис HiLog, однако интеграция HiLog в XSB реализована лишь частично — в частности, HiLog не поддерживает модульную систему XSB. Полная реализация HiLog доступна в системе Flora-2.

Показано, что HiLog допускает вложение в логику первого порядка простым преобразованием[1]. Например, выражение p(X)(Y,Z(V)(W)) преобразуется во вложенный терм первого порядка apply(p(X),Y,apply(apply(Z,V),W))[1].

Каркас логико-ориентированных диалектов (RIF-FLD) в рамках Формата обмена правилами (Rule Interchange Format) в значительной степени базируется на идеях, заложенных в HiLog и F-логике[4].

Примеры

Во всех примерах ниже символы с прописной буквы обозначают переменные, а запятая соответствует логической конъюнкции, как и в большинстве языков логического программирования. Первые два примера показывают, что переменные могут появляться в позиции предиката. Предикаты могут быть даже сложными термами, такими как closure(P) или maplist(F) ниже. Третий пример демонстрирует, что переменные могут использоваться вместо атомарных формул, четвертый — применение переменных на месте функциональных символов. Первый пример определяет оператор универсального транзитивного замыкания, который можно применить к любому бинарному предикату. Второй пример аналогичен — он вводит оператор отображения, подобный LISP, применимый к произвольному бинарному предикату. Третий пример показывает, что метапредикат Prolog call/1 можно выразить в HiLog естественным образом, без использования внелогических средств. Последний пример определяет предикат для обхода произвольных двоичных деревьев, представленных как термы первого порядка.

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).

Примечания

  1. 1 2 3 Chen, Weidong; Kifer, Michael; Warren, David S. (февраль 1993). “HiLog: A foundation for higher-order logic programming”. Journal of Logic Programming [англ.]. 15 (3): 187—230. DOI:10.1016/0743-1066(93)90039-J. Дата обращения 2024-06-30. Проверьте дату в |date= (справка на английском); |access-date= требует |url= (справка)
  2. Chen, Weidong. HiLog: a first order semantics for higher-order logic programming constructs // Logic programming: Proceedings of the North American conference, 1989 : [англ.] / Weidong Chen, Michael Kifer, David S. Warren. — MIT Press, 1989. — ISBN 0262620642.
  3. Chen, Weidong. Sorted HiLog: sorts in higher-order logic data languages // Database theory—ICDT '95: 5th International Conference, Prague, Czech Republic, January 11–13, 1995: proceedings : [англ.] / Weidong Chen, Michael Kifer. — Springer, 1995. — Vol. 893. — P. 252–265. — ISBN 9780387589077. — doi:10.1007/3-540-58907-4_20.
  4. Kifer, Michael. Rule interchange format: the framework // Web reasoning and rule systems: second international conference, RR 2008, Karlsruhe, Germany, October 31–November 1, 2008: proceedings : [англ.]. — Springer, 2008. — Vol. 5341. — P. 1–11. — ISBN 9783540887362. — doi:10.1007/978-3-540-88737-9_1.

Литература