我是Isabelle初学者,学习基础知识。令我惊讶的是,我刚刚证明了
lemma "⟦ ( ∃ x. P ) ∧ ( ∃ x. Q ) ⟧ ⟹ ∃ x. (P ∧ Q)"
apply ( auto )
done
<\ n>在Isabelle / HOL。现在假设P和Q的范围超过任意谓词,这是错误的,只需将P实例化为x = 1,将Q实例化为x = 2.
当然,错误必须在我身边,但我的误解在哪里?
答案 0 :(得分:8)
正如评论中已经指出的那样,您的示例中的P
和Q
是不是谓词,它们只是布尔变量。如果您输入term P
,则只会bool
。由于HOL类型非空,∃x. P
相当于P
,Q
类似,因此您的假设强制P
和Q
为True
,这显然暗示了你证明的陈述。
你的意思是
lemma "⟦(∃x. P x) ∧ (∃x. Q x)⟧ ⟹ ∃x. P x ∧ Q x"
这是错误的,只需写下引理,quickcheck就会自动为你提供一个反例。
另请注意,单个假设(如您的情况)不需要括号⟦...。。此外,使用HOL连接算子∧来组合假设是不常见的。你会更常说这个引理为
lemma "⟦∃x. P x; ∃x. Q x⟧ ⟹ ∃x. P x ∧ Q x"
或
lemma "∃x. P x ⟹ ∃x. Q x ⟹ ∃x. P x ∧ Q x"
这种形式比具有HOL∧的形式更容易处理,因为你可以实例化特定的假设。