Lean 矛盾证明
介绍
在命题逻辑中,矛盾证明法(Proof by Contradiction)是一种常用的推理方法。它的核心思想是:假设命题的否定为真,然后通过逻辑推理得出矛盾,从而证明原命题为真。这种方法在Lean中同样适用,并且是形式化验证的重要工具之一。
本文将逐步讲解如何在Lean中使用矛盾证明法,并通过代码示例和实际案例帮助你理解这一概念。
什么是矛盾证明法?
矛盾证明法的基本步骤如下:
- 假设命题
P
的否定¬P
为真。 - 通过逻辑推理,从
¬P
推导出一个矛盾(例如Q ∧ ¬Q
)。 - 由于假设
¬P
导致了矛盾,因此原命题P
必须为真。
在Lean中,我们可以使用 by_contra
策略来实现这一过程。
在Lean中使用矛盾证明法
基本语法
在Lean中,by_contra
是一个用于矛盾证明的策略。它的语法如下:
lean
by_contra h
其中,h
是假设命题的否定。接下来,我们需要在假设 h
的基础上推导出矛盾。
示例1:证明 ¬¬P → P
让我们从一个简单的例子开始:证明双重否定蕴含原命题,即 ¬¬P → P
。
lean
example (P : Prop) : ¬¬P → P :=
begin
intro h, -- 假设 ¬¬P
by_contra hnp, -- 假设 ¬P
apply h, -- 应用 ¬¬P
exact hnp, -- 得出矛盾
end
解释:
intro h
:假设¬¬P
为真。by_contra hnp
:假设¬P
为真。apply h
:将¬¬P
应用于¬P
,得到P
。exact hnp
:由于P
和¬P
同时成立,产生矛盾。
示例2:证明 P ∨ ¬P
接下来,我们证明排中律 P ∨ ¬P
。这是一个经典逻辑中的命题,但在直觉逻辑中并不成立。
lean
example (P : Prop) : P ∨ ¬P :=
begin
by_contra h, -- 假设 ¬(P ∨ ¬P)
apply h, -- 应用假设
right, -- 选择 ¬P
intro hp, -- 假设 P
apply h, -- 应用假设
left, -- 选择 P
exact hp, -- 得出矛盾
end
解释:
by_contra h
:假设¬(P ∨ ¬P)
为真。apply h
:将假设应用于P ∨ ¬P
。right
:选择¬P
。intro hp
:假设P
为真。apply h
:再次应用假设。left
:选择P
。exact hp
:得出矛盾。
实际案例
案例1:证明 ¬(P ∧ ¬P)
这是一个经典命题,表示“命题 P
和其否定 ¬P
不能同时为真”。
lean
example (P : Prop) : ¬(P ∧ ¬P) :=
begin
intro h, -- 假设 P ∧ ¬P
cases h with hp hnp, -- 分解假设
apply hnp, -- 应用 ¬P
exact hp, -- 得出矛盾
end
解释:
intro h
:假设P ∧ ¬P
为真。cases h with hp hnp
:将假设分解为P
和¬P
。apply hnp
:应用¬P
。exact hp
:得出矛盾。
案例2:证明 ¬(P ↔ ¬P)
这个命题表示“命题 P
不能等价于其否定 ¬P
”。
lean
example (P : Prop) : ¬(P ↔ ¬P) :=
begin
intro h, -- 假设 P ↔ ¬P
cases h with h1 h2, -- 分解假设
by_cases p : P, -- 对 P 进行分情况讨论
{ apply h1, -- 应用 P → ¬P
exact p, -- 得出 ¬P
exact p }, -- 得出矛盾
{ apply h2, -- 应用 ¬P → P
exact p, -- 得出 P
exact p } -- 得出矛盾
end
解释:
intro h
:假设P ↔ ¬P
为真。cases h with h1 h2
:将假设分解为P → ¬P
和¬P → P
。by_cases p : P
:对P
进行分情况讨论。- 在每种情况下,通过应用假设得出矛盾。
总结
矛盾证明法是命题逻辑中一种强大的推理工具,尤其在形式化验证中非常有用。通过假设命题的否定并推导出矛盾,我们可以有效地证明原命题为真。
在Lean中,by_contra
策略是实现矛盾证明法的关键。通过本文的示例和案例,你应该能够掌握如何在Lean中使用这一方法。
附加资源与练习
练习
- 证明
¬(P → Q) → P ∧ ¬Q
。 - 证明
¬(P ∨ Q) → ¬P ∧ ¬Q
。 - 尝试用矛盾证明法证明
¬(P ∧ Q) → ¬P ∨ ¬Q
。
进一步学习
- 阅读Lean官方文档中关于命题逻辑的部分。
- 尝试在Lean中实现其他经典逻辑命题的证明。
提示
如果你在练习中遇到困难,可以尝试分解命题并逐步推理。矛盾证明法需要一定的练习才能熟练掌握!