Мне любопытно, если логические программы могут сделать алгебру
Я прочитал небольшую статью о прологе и логическом программировании. Мне любопытно, могут ли логические программы выполнять алгебру. Как вы могли бы спросить, что переменная 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