Skip to content

Commit d934c64

Browse files
committed
berardi paradox
1 parent 254c2c6 commit d934c64

File tree

1 file changed

+41
-13
lines changed

1 file changed

+41
-13
lines changed

impredicative.typ

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,13 @@ $)
187187
#eq($ "hProp"_cal(U) = (A : cal(U)) times (forall x, y : "El"(A) bind x = y) $)
188188
表示其中的命题,我们临时记作 $"hProp"$ 以示区分。另一方面,在构造演算的集合模型中,$"Prop"$ 宇宙下的类型的确至多有一个元素,但这并不能在构造演算或者 $"CC"_omega$ 中得证.(事实上, #[@sec:realizability-model]给出的模型就是反模型.)因此,二者有许多相似之处,但不完全相同。
189189

190-
我们自然可以向 $"Prop"$ 添加公理,要求该宇宙中的所有类型都至多有一个元素。也可以向 $"hProp"_cal(U)$ 添加公理增加非直谓性,例如要求 $"hProp"_cal(U) tilde.eq "hProp"_(cal(U)')$ 对任何两个宇宙 $cal(U)$$cal(U)'$ 都成立。这样取直谓 $Pi$ 类型抬升了宇宙层级之后总可以通过此等价降回来。有若干定理给出 $"Prop"$$"hProp"$ 分别添加对应的公理之后是等价的。
190+
我们自然可以向 $"Prop"$ 添加公理,要求该宇宙中的所有类型都至多有一个元素。这称作#define[证明无关性][proof irrelevance]。也可以向 $"hProp"_cal(U)$ 添加公理增加非直谓性,例如要求 $"hProp"_cal(U) tilde.eq "hProp"_(cal(U)')$ 对任何两个宇宙 $cal(U)$$cal(U)'$ 都成立。这样取直谓 $Pi$ 类型抬升了宇宙层级之后总可以通过此等价降回来。有若干定理给出 $"Prop"$$"hProp"$ 分别添加对应的公理之后是等价的。
191191

192192
=== 归纳类型
193193

194-
Examples of inductive types, (predicative restriction pushed to the story)
194+
Examples of inductive types
195+
196+
squash types and their impredicative encodings (compare with HoTT squashes)
195197

196198
== 寓言一则
197199

@@ -258,7 +260,9 @@ Girard 在 U 系统中将 Burali-Forti 悖论的简化版本 (即利用无挠序
258260

259261
=== Berardi 悖论 <sec:berardi-paradox>
260262

261-
在构造演算中,如果将 $"Prop"$ 中的类型视作命题,那么形式化经典逻辑时不免需要假定排中律与选择公理。回忆我们可以用非直谓宇宙编码逻辑连词,如
263+
在构造演算中,如果将 $"Prop"$ 中的类型视作命题,那么形式化经典逻辑时不免需要假定排中律与选择公理。Berardi 悖论说的是这些假设可以推出证明无关性,即 $p : "Prop"$ 总是满足 $(x, y : p) -> x = y$。这意味着不能将最底层宇宙的类型同时视作命题和集合,因为集合应当可以有多个不同的元素。
264+
265+
回忆我们可以用非直谓宇宙编码逻辑连词,如
262266
#eq($
263267
top &= (X : "Prop") -> X -> X \
264268
bot &= (X : "Prop") -> X \
@@ -267,24 +271,48 @@ Girard 在 U 系统中将 Burali-Forti 悖论的简化版本 (即利用无挠序
267271
p or q &= (X : "Prop") -> (p -> X) -> (q -> X) -> X \
268272
(forall x : A bind p(x)) &= (x : A) -> p(x) \
269273
(exists x : A bind p(x)) &= (X : "Prop") -> ((x : A) -> p(x) -> X) -> X \
270-
"Id"(A, x, y) &= (P : A -> "Prop") -> P(x) -> P(y)
274+
"Id"(A, x, y) &= (P : A -> "Prop") -> P(x) -> P(y) \
275+
// norm(A) &= (X : "Prop") -> (A -> X) -> X
271276
$)
272277
这里 $A$ 可以是任意类型,而 $p$$q$ 需要在 $"Prop"$ 宇宙中。这样,排中律就是
273-
#eq($ "EM" : (p : "Prop") -> (p or not p) $)
274-
而关于类型 $A$ 的选择公理是 #author-note[(...) 全局]
275-
#eq($
276-
epsilon_A &: (p : A -> "Prop") -> (exists a bind p(a)) -> A \
277-
rho_A &: (p : A -> "Prop") (h : exists a bind p(a)) -> p(epsilon_A p h)
278-
$)
279-
其中 $epsilon_A$ 给定 $A$ 的一个元素,而 $rho_A$ 证明这个元素满足所需的性质。
278+
#eq($ "EM" : (p : "Prop") -> (p or not p). $)
279+
选择公理则有多种说法。
280+
281+
一般的选择公理说的是,给定类型族 $B(x) istype$ 与谓词 $P : (x : A) -> B(x) -> "Prop"$,如果命题 $forall (x : A) bind exists (y : B(x)) bind P(x, y)$ 成立,那么就存在函数在每个 $B(x)$ 中选出一个元素,即
282+
#eq($ exists (f : (x : A) -> B(x)) bind forall (x : A) bind P(x, f(x)). $)
283+
如果类型论中有 $Sigma$ 类型,可以将 $B$$P$ 合并成类型族 $C(x) = sum_(y : B(x)) P(x, y)$。这样选择公理化为非常对称的形式
284+
#eq($ ((x : A) -> norm(C(x))) -> norm((x : A) -> C(x)). $)
285+
在同伦类型论中,这个形式更为常见。不过 $"CC"_omega$ 没有 $Sigma$ 类型,因此需要用上面的复杂形式。
280286

281-
#author-note[(...)]
287+
(...) 全局选择,无 $Sigma$ 类型的情况
282288

283289
#theorem-appendix[Barbanera–Berardi][
284-
在构造演算中假定排中律与全局选择公理,则任何命题 $p : "Prop"$ 的所有元素都相等
290+
在构造演算中假定排中律与全局选择公理,则任何命题 $p : "Prop"$ 的所有元素相等,即 $"Id"(p, x, y)$ 有元素
285291
]
286292
#proof[
293+
可以用非直谓宇宙编码 $Bool$ 类型为 $(X : "Prop") -> X -> X -> X$。其中 $"true"$$"false"$ 分别返回第一个与第二个参数。分类讨论算符 $ite(b, x, y)$ 在非直谓编码下就是 $b p x y$。注意这里 $x$$y$ 的类型必须一致。
294+
295+
要找到两个元素不相等的类型,最显然的办法就是考虑 $Bool$。事实上,假如 $"true"$$"false"$ 相等,那么任何 $p : "Prop"$ 的元素 $x, y : p$ 都两两相等,这意味着只需要考虑 $Bool$ 即可。具体证明是注意到 $ite("true", x, y) = x$$ite("false", x, y) = y$,因此如果有 $omega : "Id"(Bool, "true", "false")$,则 $omega(lambda b bind "Id"(p, x, ite(b, x, y)))("refl"(x))$ 就证明了 $"Id"(p, x, y)$.#footnote[这个证明无法说明更高宇宙中的类型元素都相等,例如对 $X : "Type"_2$ 的元素就不适用。这是因为 $Bool$ 的非直谓编码中 $X$ 只能取值于 $"Prop"$ 宇宙,因此 $ite(b, x, y)$ 只能是命题宇宙中的类型的元素。]
296+
297+
将函数类型 $X -> Bool$ 也记作 $Bool^X$,类比(经典逻辑)集合论中的幂集。设 $UU = (X : "Prop") -> Bool^X$。那么显然有映射 $pi : UU -> Bool^UU$,定义是 $pi = lambda u bind u UU$。反过来,可以利用排中律定义映射 $iota : Bool^UU -> UU$,即
298+
#eq($
299+
iota alpha X = cases(
300+
alpha & (X = UU),
301+
(...) quad & (X != UU)
302+
)
303+
$)
304+
其中对命题 $X = UU$ 是否成立利用排中律分类讨论,而省略号可以任填 $Bool^X$ 的元素,例如输出 $"false"$ 的常函数即可。这样,函数复合 $pi compose iota$ 就是恒等函数。
305+
306+
不过,这个分类讨论其实不能成立,因为两个分支中的表达式类型不相同。换句话说,单纯的分类讨论 $ite(b, x, y)$ 不能满足要求,而需要_依值分类讨论_。用非直谓编码的 $Bool$ 是无法定义依值分类讨论的,这与上文提到的强 $Sigma$ 类型情况类似。利用选择公理,我们可以绕开依值分类讨论。
307+
308+
#let retract = sym.lt.tri
309+
$A retract B$ 为命题 $exists f : A -> B bind exists g : B -> A bind g compose f = id_A$ 的缩写。那么显然有
310+
#eq($ (cal(P)(X) retract cal(P)(UU)) -> exists f : cal(P)(X) -> cal(P)(UU) bind exists g : cal(P)(UU) -> cal(P)(X) bind g compose f = id, $)
311+
再由排中律,可以将两个存在量词移到前面来。换句话说,由 $p -> exists x bind q(x)$ 可以对 $p$ 分类讨论推出 $exists x bind p -> q(x)$。这样,就可以用全局选择取出具体的 $f_X$$g_X$,使得当 $cal(P)(X) retract cal(P)(UU)$ 成立时,$g_X compose f_X = id$。注意 $X = UU$$cal(P)(X) retract cal(P)(UU)$ 显然成立,因此定义
312+
#eq($ iota alpha X = g_X (f_X (alpha)) $)
313+
即可。
287314

315+
以上我们构造了 $pi : UU -> Bool^UU$$iota : Bool^UU -> UU$,满足 $pi compose iota = id_(Bool^UU)$。这其实足够导出 Russell 悖论,不过由于我们使用的是 $Bool$ 而不是 $"Prop"$,其最终结论是 $Bool$ 中的 $"true"$$"false"$ 相等,而非 $top <-> bot$。后者会使得一切命题都有证明,而前者仅仅使一切命题的证明都相等。
288316
]
289317

290318
(mention Diaconescu's theorem)

0 commit comments

Comments
 (0)