是否有Mathematica包用于提供证明/推导?

Cha*_*ant 7 wolfram-mathematica

当我在纸上写出证明或推导时,我经常会在我从一步到下一步时发出符号错误或删除条款.我想用Mathematica来避免这些愚蠢的错误.我不希望Mathematica解决表达式,我只是想用它来执行并显示一系列代数操作.对于(微不足道的)例子

In[111]:= MultBothSides[Equal[a_, b_], c_] := Equal[c a, c b];

In[112]:= expression = 2 a == a b

Out[112]= 2 a == a b

In[113]:= MultBothSides[expression, 1/a]

Out[113]= 2 == b
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出一个支持这种操作的包吗?

编辑

感谢您的投入,但不是我想要的.符号操作并不是真正的问题.我真的在寻找能够明确推导出每个步骤的代数或数学证明的东西.我的目标是教学.

Pil*_*lsy 3

Mathematica 还提供了许多用于处理代数的高级函数。其中有ExpandApartTogether、 和Cancel,不过还有很多。

另外,对于将相同变换应用于方程两侧(即带有 head 的表达式Equal)的具体示例,您可以使用该Thread函数,它的工作原理与您的函数类似MultBothSides,但具有更多的通用性。

In[1]:=  expression = 2 a == a b
Out[1]:= 2 a == a b

In[2]:=  Thread[expression /a, Equal]
Out[2]:= 2 == b

In[3]:=  Thread[expression - c, Equal]
Out[3]:= 2 a - c == a b - c
Run Code Online (Sandbox Code Playgroud)

在所提出的任一解决方案中,应该相对容易看出该步骤需要做什么。如果您想要更明确的东西,您可以编写自己的函数,如下所示:

In[4]:=  ApplyToBothSides[f_, eq_Equal] := Map[f, eq]

In[5]:=  ApplyToBothSides[4 * #&, expression]
Out[5]:= 8 a == 4 a b
Run Code Online (Sandbox Code Playgroud)

它是您的函数的概括MultBothSides,它利用了适用于Map任何 head 的表达式,而不仅仅是 head 的事实List。如果您尝试与不熟悉 Mathematica 的受众进行交流,使用此类名称可以帮助您更清晰地进行交流。与此相关的是,如果您想使用 Ira Baxter 建议的替换规则,则写出 Replace 或 ReplaceAll 而不是使用/.语法糖可能会有所帮助。

In[6]:=  ReplaceAll[expression, a -> (x + y)]
Out[6]:= 2 (x + y) == b (x + y)
Run Code Online (Sandbox Code Playgroud)

如果您认为在输入中使用实际方程而不是变量名称会更清晰,expression并且您正在使用笔记本界面,请expression用鼠标突出显示该单词,调出上下文菜单,然后选择“评估”地方”。

笔记本界面也是进行“文学编程”的一个非常愉快的环境,因此您还可以解释任何文字上不明显的步骤。我相信在编写数学证明时,无论使用何种媒介,这都是一个很好的做法。