为什么我可以证明⟦(∃x.P)∧(∃x.Q)⟧⟧⟹x.(P∧Q)?

Mar*_*ger 4 isabelle

我是伊莎贝尔的初学者,学习基础知识.令我惊讶的是,我刚才证明了

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.

当然,错误必须在我身边,但我的误解在哪里?

Man*_*erl 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"
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∧的形式更容易处理,因为您可以实例化特定的假设.