我很好奇逻辑程序是否可以进行代数

Jam*_*tos 10 declarative algebra prolog clpfd clpq

我读了一篇关于Prolog和Logic Programming的简短文章.我很好奇逻辑程序是否可以进行代数.就像你能问出X的变量在等式5 + X = 7中得到什么并得到-2的答案?

mat*_*mat 12

所有严肃的Prolog系统都在有限域上提供约束逻辑编程,简称为CLP(FD),您可以使用它轻松地解决许多此类方程.例如,使用SICStus Prolog,SWI和Yap:

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

?- 5+X #= 7.
X = 2.
Run Code Online (Sandbox Code Playgroud)

显然,答案是2而不是-2.还要检查其他域上的约束逻辑编程,例如库(clpq)的有理数.


Guy*_*der 5

是的,Prolog可以做代数.

如果您使用Google for PrologCAS(计算机代数系统),您将获得大量结果.

例如,使用Prolog作为CAS

如果您了解Prolog = Syntactic unification + backward-chaining + REPL,

然后意识到解决问题/方程的核心是统一,你可能会遇到用于解决包含等于(=)的问题的等式推理.同样的逻辑也用于自动定理证明器证明助手.

如果你看这里你会发现prolog.ml在这个自动化定理证明器中实现了统一和反向链接.

您还应该检查术语重写并搜索Google以进行术语重写,以了解有关使用术语求解方程式的科学的更多信息.


ssB*_*Bee 2

这个怎么样?请注意,这仅适用于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.
Run Code Online (Sandbox Code Playgroud)

你可以问:

equation(5,X,7).
X = 2 .
?- equation(2,5,X).
X = 7.
?- equation(X,5,7).
X = 2
Run Code Online (Sandbox Code Playgroud)