我一直在努力学习如何使用Isabelle而且我遇到了一个问题。以下引理有效:
lemma sum_square: "(a+b)^2=a^2+(2::real)*a*b+b^2"
apply (simp add: power2_eq_square)
output: (a + b) * (a + b) = a * a + 2 * a * b + b * b
然而,下面的引理却没有:
lemma sum_sq: "(a+b)^2 = (a+b) * (a+b)"
apply (simp add: power2_eq_square)
output: Failed to apply proof method
有人可以告诉我我做错了吗?
此外,任何人都可以指导我使用Isabelle教程或简单的证据来增加我对Isabelle的知识吗?
答案 0 :(得分:2)
在Isabelle中,像乘法,加法,取幂等几个运算符都是多态的,纯粹是语法的。即,在您的陈述(a+b)^2 = (a+b) * (a+b)
中,a
和b
的类型可以是任何类型,并且不一定是数字类型。
您可以通过 Ctrl -click或 Ctrl -hover对相应的引理和变量检测此类情况。例如,power2_eq_square
在上下文monoid_mult
中定义,即,仅当a
和b
属于monoid_mult
的类型时,才会引发a
适用。但是,'a :: {numeral,power}
的类型为Documentation
。
关于教程,只需点击Isabelle / jEdit窗口右侧的prog-prove
,
然后两个教程tutorial
和{{1}}变得可见。