使用algebra_simps等价的算术表达式

时间:2014-06-13 21:46:33

标签: isabelle theorem-proving

Programming and Proving in Isabelle/HOL中,练习2.4建议在简单的算术表达式上使用'algebra_simps',表示为'datatype exp'。有人可以举例说明如何使用algebra_simps证明这些表达式的一些简单属性吗?例如'Mult a b = Mult b a'?

总的来说,我试图证明以类似形式表示的简单算术表达式的等价性(使用有限的运算符集)。

1 个答案:

答案 0 :(得分:2)

如果您已正确定义了eval功能,则可以在此示例中证明您提供的属性:

lemma Mult_comm: "eval (Mult a b) x = eval (Mult b a) x"
  by simp

algebra_simps只是组和环的基本简化规则的集合(例如整数,在本例中)。它们与这个特定的例子无关。您可以通过键入thm algebra_simps来查看包含的词条。

对于这个特定的证明,你实际上并不需要algebra_simps,因为整数乘法的可交换性无论如何都已经是默认的简化规则。

因此,为了展示如何使用algebra_simps,请考虑一个您确实需要它们的示例:正确的乘法分布:

lemma Mult_distrib_right: "eval (Mult (Add a b) c) x = eval (Add (Mult a c) (Mult b c)) x"

如果你只是尝试apply simp,你就会陷入目标

(eval a x + eval b x) * eval c x =
  eval a x * eval c x + eval b x * eval c x

幸运的是,规则algebra_simps(4)是一条规则:thm algebra_simps(4)会告诉您此规则为(?a + ?b) * ?c = ?a * ?c + ?b * ?c。 Isabelle的简化器将自动应用它,如果您告诉它使用algebra_simps规则,请执行以下操作:

apply (simp add: algebra_simps)

而不是

apply simp