如何在prolog中简化涉及代数身份的代数表达式?

时间:2016-11-24 11:07:47

标签: prolog

我已经给出了表达式,我需要将它们简化为正常形式,即不应该有任何代数身份。

代数身份参考如下。

  

X + 0 = X
  X + 0 = X
  X * 1 = X
  X * 0 = 0
  X / 1 = X
  0 / X = 0
  X-X = 0
  X + X = 2X
  X \ X = 1

样本表达式及其预期输出如下,

  

示例1:
  给定表达式:(X *(Y / Y)-X)* X
  简化表达式:0

     

例2:
  给定表达式:((X + X)/ X)*(Y + Y-Y)
  简化表达式:2 * Y

     

例3:
  给定表达式:(A B / 1)(C + 1-C)
  简化表达式:A * B

我怀疑的是我如何表示任何变量,如X或Y,并在prolog中执行此身份以进行此简化。

输入表格或输出表格没有限制。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题,因为您展示的代数身份不足来推导您展示的示例。

例如,让我们考虑第一个示例中出现的子项 Y/Y

您可以使用您展示的任何代数身份来简化此术语吗?

回答:不。 练习:为什么不呢?

您可能想要将“身份”X/X = 1添加到您的身份中,但这会使身份不正确。这意味着您将能够获得明显不包含的身份。

要查看此内容,请考虑您可以减少的术语0/0

  • 通过0/X0
  • 通过X/X1

因此错误地从这些身份中获取0 = 1

有关这个有趣主题的更多信息,请阅读术语重写系统(TRS)。