Мне любопытно, могут ли логические программы делать алгебру

Я прочитал короткую статью о Прологе и логическом программировании. Мне любопытно, могут ли логические программы выполнять алгебру. Как бы вы могли спросить, что такое переменная X в уравнении 5 + X = 7 и получить ответ -2?


person James Scourtos    schedule 03.12.2012    source источник


Ответы (4)


Все серьезные системы Prolog обеспечивают программирование логики ограничений в конечных областях, называемое для краткости CLP(FD), с помощью которого вы можете легко решать многие такие уравнения. Например, с SICStus Prolog, SWI и Yap:

?- use_module(library(clpfd)).
true.

?- 5+X #= 7.
X = 2.

Судя по всему, ответ 2 вместо -2. Также ознакомьтесь с программированием логики ограничений по сравнению с другими областями, такими как рациональные числа с библиотекой (clpq).

person mat    schedule 03.12.2012
comment
См. раздел оптимизация для подхода, который также работает с нелинейными уравнениями (иногда). - person mat; 19.10.2016
comment
Существует реализация упроститель уравнений на Прологе, написанный в 1987 году. Я также нашел более позднюю реализацию алгоритм завершения Кнута-Бендикса на Прологе. - person Anderson Green; 25.06.2017

Да, Пролог может делать алгебру.

Если вы ищете в Google Prolog и CAS (система компьютерной алгебры) вы получите много результатов.

например Использование Пролога в качестве CAS

Если вы понимаете, что Prolog = Синтаксическая унификация + обратная цепочка + REPL,

затем поймите, что именно объединение лежит в основе решения проблем/уравнений, вы можете столкнуться с рассуждениями об уравнениях, которые используются для решения проблем, содержащих равенство (=). Эта же логика также используется с автоматическими средствами доказательства теорем и помощники по проверке.

Если вы посмотрите здесь, вы найдете prolog.ml, который реализует унификацию и обратную цепочку в этом автоматизированном средстве доказательства теорем.

Вы также должны проверить переписывание терминов и поищите в Google переписывание терминов, чтобы узнать больше о науке решения уравнений с использованием термов.

person Guy Coder    schedule 10.12.2012
comment
Очень хорошие указатели! Был бы ваш ответ еще более полезным, если бы вы также могли кратко обобщить эти концепции, прежде чем указывать дополнительные. - person GuSuku; 04.12.2014

На Прологе существует несколько реализаций систем компьютерной алгебры, в том числе упроститель уравнений и Решатель уравнений PRESS. Существует также несколько решателей ограничений для линейных и нелинейных уравнений, в том числе CLP(R,Q) и CLP (BNR), а также несколько других решателей, реализованных с использованием правила обработки ограничений.

Вместо реализации системы компьютерной алгебры в Прологе также можно реализовать интерпретатор Пролога в системе компьютерной алгебры. Например, есть статья, описывающая реализацию система программирования на основе правил в Mathematica. Существует также реализация системы логического программирования в системе Mathematica из архива библиотеки Wolfram.

Также возможно реализовать логические программы в Sympy, используя его унификацию. алгоритм.

person Anderson Green    schedule 31.07.2018

Как насчет этого? Обратите внимание, что это будет работать только для X+Y=Z.

equation(X,Y,Z):- var(X),X is Z-Y.
equation(X,Y,Z):- var(Y),Y is Z-X.
equation(X,Y,Z):- var(Z),Z is X+Y.

Вы можете спросить:

equation(5,X,7).
X = 2 .
?- equation(2,5,X).
X = 7.
?- equation(X,5,7).
X = 2
person ssBarBee    schedule 03.12.2012
comment
equation(1, 1, 2) терпит неудачу, но equation(1,1,Z), Z = 2 удается. - person false; 01.08.2018
comment
Для решения более сложных линейных уравнений можно использовать CLP(R). . - person Anderson Green; 14.11.2018