它seems to be impossible在构造微积分中提取Sigma的第二个元素。而且,似乎没有已知的,简单的方法来扩展构造微积分,具有相关的抵消而不会失去一致性。因此,如何利用简单的但不一致的公理(例如Type : Type
或无限制的递归,例如μ
)来提取Sigma的第二个元素?
即,给出以下Sigma构造函数:
Sigma =
λ A : *
λ B : A -> *
λ a : A
λ b : B
λ Data : *
λ Sigma :
∀ fst : A
∀ snd : B fst
Data
Sigma a b
在一个等同于构造微积分的语言中,除了Type : Type
或其他一些简单的不一致公理之外,是否有可能实现一个函数,给定Sigma Nat (\x -> Nat) 3 6
之类的术语,提取第二个价值,6
?
答案 0 :(得分:4)
在诸如Martin-Löf类型理论或构造微积分的类型理论的背景下,通过“不一致”我们通常意味着逻辑不一致:能够推导出一个术语{{1} } contra
类型。在这种情况下,任何其他类型forall T : Type, T
都会有人居住:只需将T
应用于此。
不幸的是,在大多数类型理论中,有人居住并没有告诉我们关于可兑换性或定义性平等的事情,因为没有类型表示两个术语contra
和x
是可转换的。这意味着
没有办法推导出术语
y
这样fst : Sigma A B -> A
snd : forall s : Sigma A B, B (fst s)
简化为fst (Sigma _ _ x y)
和x
通过诉诸逻辑矛盾简化为snd (Sigma _ _ x y)
。 (我稍微滥用了符号,并对构造函数和类型使用了y
。)但是,您可以使用Sigma
来假设contra
和fst
的存在并断言相应的方程式命题式。
在简单的CoC中,我们说如果存在类型的术语,则snd
和x1
这两个术语在命题上是相等的
x2
(这有时被称为Leibniz相等:如果第一个持有的每个谓词都包含第二个,则两个术语相等。)为forall T, T x1 -> T x2
声明类似更复杂,因为{{1并且snd
没有相同的类型(前者属于snd (Sigma _ _ x y)
类型,而后者类型为y
)。我们可以通过同时声明B (fst (Sigma _ _ x y))
和B x
的简化引理来解决这个问题:
fst
关于你的评论:由于可兑换性通常不能用类型来表达,我们需要在类型理论中修改它的定义,以得到具有第一和第二个投影的真正的sigma类型 - 比简单地假设某些公理更简单的操作保持。有些系统允许这样做,例如Dedukti,这是Inria开发的校对检查器。