我是伊莎贝尔的初学者,学习基础知识.令我惊讶的是,我刚才证明了
lemma "? ( ? x. P ) ? ( ? x. Q ) ? ? ? x. (P ? Q)"
apply ( auto )
done
Run Code Online (Sandbox Code Playgroud)
在伊莎贝尔/ HOL.现在假设P和Q的范围超过任意谓词,这是错误的,只是将P实例化为x = 1,Q实例化为x = 2.
当然,错误必须在我身边,但我的误解在哪里?
正如在注释中已经指出的那样,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"
Run Code Online (Sandbox Code Playgroud)
这是错误的,只需写下引理,quickcheck就会自动为您提供一个反例.
另请注意,单个假设(如您的情况)不需要括号⟦.....此外,使用HOL连接算子∧来组合假设是不常见的.你会更常地将这个引理说成是
lemma "??x. P x; ?x. Q x? ? ?x. P x ? Q x"
Run Code Online (Sandbox Code Playgroud)
要么
lemma "?x. P x ? ?x. Q x ? ?x. P x ? Q x"
Run Code Online (Sandbox Code Playgroud)
这种形式比具有HOL∧的形式更容易处理,因为您可以实例化特定的假设.