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

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

4 ответа

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

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

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

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

Да, Пролог умеет заниматься алгеброй.

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

Например, используя Пролог в качестве CAS

Если вы понимаете, что Пролог = Синтаксическое объединение + обратная цепочка + REPL,

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

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

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

В Прологе есть несколько реализаций систем компьютерной алгебры, в том числе упрощающий уравнение и решатель уравнений ПРЕСС.

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

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

Как насчет этого? Обратите внимание, что это будет работать только для 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
Другие вопросы по тегам