是否有可能在具有简单不一致公理的结构演算中提取Sigma的第二个元素?

时间:2017-12-15 17:44:22

标签: haskell functional-programming coq agda idris

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

1 个答案:

答案 0 :(得分:4)

在诸如Martin-Löf类型理论或构造微积分的类型理论的背景下,通过“不一致”我们通常意味着逻辑不一致:能够推导出一个术语{{1} } contra类型。在这种情况下,任何其他类型forall T : Type, T都会有人居住:只需将T应用于此。

不幸的是,在大多数类型理论中,有人居住并没有告诉我们关于可兑换性或定义性平等的事情,因为没有类型表示两个术语contrax是可转换的。这意味着 没有办法推导出术语

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来假设contrafst的存在并断言相应的方程式命题式

在简单的CoC中,我们说如果存在类型的术语,则sndx1这两个术语在命题上是相等的

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开发的校对检查器。