跳转到内容

Lean直觉主义逻辑

来自代码酷


Lean直觉主义逻辑Lean定理证明器中实现的一种构造性逻辑体系,与经典逻辑不同,它强调数学对象的构造性证明而非纯粹的真值判定。本条目将系统介绍其在Lean中的表现形式、语法规则及实际应用。

核心概念[编辑 | 编辑源代码]

直觉主义逻辑(又称构造性逻辑)拒绝使用排中律P,P¬P),其核心原则包括:

  • 证明即构造:命题为真当且仅当能提供具体证明
  • 否定即构造性反驳¬A表示"若假设A成立则可导出矛盾"
  • 存在量词承诺构造x,P(x)要求必须给出具体实例

在Lean中,直觉主义逻辑是默认逻辑框架,经典逻辑需通过显式引入classical库启用。

与经典逻辑的关键差异[编辑 | 编辑源代码]

特性 直觉主义逻辑 经典逻辑
排中律 不成立 成立
双重否定律 ¬¬AA ¬¬AA
存在量词解释 构造性存在 潜在存在

Lean语法实现[编辑 | 编辑源代码]

基本命题构造[编辑 | 编辑源代码]

-- 直觉主义命题示例
variables (P Q : Prop)

-- 直接证明:构造合取
example : P  Q  P  Q :=
λ hp hq, hp, hq

-- 不可构造的例子(无法通过编译)
example : P  ¬P := sorry  -- 需要经典逻辑

否定与矛盾处理[编辑 | 编辑源代码]

-- 否定通过矛盾定义
def not_intro {P : Prop} (h : P  false) : ¬P := h

-- 直觉主义反证法
example (P Q : Prop) (h1 : ¬Q  ¬P) (h2 : P) : Q :=
begin
  intro hnq,
  exact absurd h2 (h1 hnq)  -- 使用absurd规则
end

存在量词构造[编辑 | 编辑源代码]

-- 构造性存在证明
example :  n : , n > 0 :=
1, nat.zero_lt_one  -- 必须提供具体实例

-- 非构造性存在无法证明
example : ( x, P x)  ¬∃ x, P x := sorry  -- 需要经典逻辑

类型论视角[编辑 | 编辑源代码]

Curry-Howard同构下,Lean的直觉主义逻辑对应类型系统:

graph LR A[命题] --> B[类型] C[证明] --> D[项构造] E[推理规则] --> F[类型操作]

具体对应关系:

  • 蕴含 PQ → 函数类型
  • 合取 PQ → 积类型
  • 析取 PQ → 和类型
  • 真命题 → 单例类型

实际应用案例[编辑 | 编辑源代码]

算法正确性验证[编辑 | 编辑源代码]

构造性证明天然适合验证算法:

def binary_search (arr : array ) (target : ) : option  :=
-- 实现省略

lemma binary_search_correct :
   arr target, is_sorted arr  
  ( i, binary_search arr target = some i  arr[i] = target) :=
begin
  -- 构造性证明必须给出定位算法
  apply array.binary_search_eq_some_iff  -- 实际会调用构造性存在证明
end

程序提取[编辑 | 编辑源代码]

Lean允许从构造性证明中提取可执行代码:

-- 构造性存在证明产生可计算项
theorem sqrt_exists :  x  0,  y, y² = x :=
begin
  -- 证明过程隐含牛顿迭代算法
end

-- 可提取为实际计算函数
#eval extract sqrt_exists 2  -- 输出1.4142...

与经典逻辑交互[编辑 | 编辑源代码]

在需要时可通过以下方式引入经典推理:

open classical

-- 现在可以使用排中律
example (P : Prop) : P  ¬P :=
em P

-- 双重否定消除
example (P : Prop) (h : ¬¬P) : P :=
by_contradiction (λ hn, h hn)

学习建议[编辑 | 编辑源代码]

对于习惯经典逻辑的学习者,建议: 1. 练习将非构造性证明改写为构造性版本 2. 通过Curry-Howard同构理解命题的类型含义 3. 使用#print axioms命令检查证明的非构造性部分

模板:警告

进阶主题[编辑 | 编辑源代码]

  • Brouwer-Heyting-Kolmogorov解释:三值语义模型
  • Kripke模型:直觉主义逻辑的可能世界语义
  • 拓扑语义:将命题解释为开集
  • 线性逻辑:进一步限制逻辑结构