如果不可能在 CoC 上进行 O(1) 预测,那么为什么会这样呢?

玛雅维克多

我一直认为已经证明,pred对于任何数据类型编码都不能在构造演算的恒定时间内表达。现在,请注意 nats 的这种编码:

S0 : ∀ (r : *) . (r -> r) -> r -> r
S0 = λ s z . z

S1 : ∀ (r : *) (((∀ (r : *) . (r -> r) -> r -> r) -> a) -> (a -> a)))
S1 = λ s z . (s (λ s z . z))

S2 : (∀ (r : *) . ((∀ (r : *) . ((∀ (r : *) . (r -> r) -> r -> r) -> a) -> a -> a) -> a) -> a -> a)
S1 = λ s z . (s (λ s z . (s (λ s z . z))))

这只是 Scott 编码,除了我实际上是输入整个术语而不是使用递归。我注意到的是,在这种看似愚蠢的编码下,我实际上不仅可以定义 Zero 和 Succ,还可以定义O(1)Pred:

SNat 
    =  λ (n : Nat)
    -> (n * 
           (λ (p:*) -> (∀ (r:*) . (p -> r) -> r -> r))
           (∀ (r:*) -> (r -> r) -> r -> r))

SNat_Zero
    =  λ (r : *)
    -> λ (s : r -> r)
    -> λ (z : r)
    z

SNat_Succ
    =  λ (k : Nat)
    -> λ (n : SNat k)
    -> λ (r : *)
    -> λ (s : (SNat k) -> r)
    -> λ (z : r)
    (s n)

SNat_Pred
    =  λ (k : Nat)
    -> λ (n : SNat (Succ k))
    -> λ (n (Maybe (SNat k))
            (p:(SNat k) (Maybe_Just (SNat k) p))
            (Maybe_Nothing (SNat k)))

注意:我只是从另一种语法中通过眼睛翻译了这个。如果出现问题,是正确的。您可以通过克隆此 repo 并键入以下内容来运行它:

cd calculus-of-constructions
npm i -g
cd lib
coc type SNat_Pred
coc norm SNat_Pred

这是可能的,因为我的实现有某种错误,还是我误解了所述证明的存在?

阿瑟·阿泽维多·德·阿莫林

我不能很好地理解你的编码试图做什么。但是您的存储库似乎具有以下定义(从文件Nat.coc和 中以类似 Coq 的语法翻译SNat.coc):

Definition Nat :=
  forall X : *, (X -> X) -> X -> X.

Definition SNat :=
  fun n : Nat => n * (* Some more stuff *).

如果我理解正确, 的定义SNat是使用自然数n来迭代类型为 的函数* -> *这似乎不是很好的类型,因为n将 type 的东西作为参数*,因此需要* : *,这在 CoC 中是无效的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么不可能在特征中定义此构造函数?

来自分类Dev

为什么不可能在Nullable <T>速记上调用静态方法?

来自分类Dev

是否不可能在使用Box,Rc或Arc等智能指针的递归数据类型上进行嵌套匹配?

来自分类Dev

为什么不可能在 Java 中使用 if 语句构建二进制信号量

来自分类Java

为什么在Java中不可能在内部匿名类中引用非最终变量?

来自分类Dev

为什么我不能在Stream上进行匹配?

来自分类Dev

如果D1> O1,则隐藏行

来自分类Dev

为什么此Rust代码使用结构上的生存期绑定进行编译,但如果绑定仅在impl上进行编译,则给出生命周期错误呢?

来自分类Dev

为什么我不能在类型族上进行模式匹配?

来自分类Dev

为什么我的CSS链接需要?vh =#才能在我的网站上进行更新?

来自分类Dev

为什么不能在 Cloud Firestore 的不同字段上进行 orderBy,我该如何解决?

来自分类Dev

如何“快速”实施协议?如果不可能,为什么呢?

来自分类Dev

如果线程本地映射包含对threadlocal对象的弱引用,那么为什么不进行垃圾回收呢?

来自分类Dev

进行左联接时,Postgresql Null值将填充左表。为什么会这样呢?

来自分类Dev

如果可以在预提交和预推送git钩子上进行测试,为什么还要进行持续集成测试?

来自分类Dev

如果长格式有效,如果此语句返回0,为什么会这样呢?

来自分类Dev

是否有可能在{0,1}上对这些对称表达式进行表示

来自分类Dev

TypeError:“用户”类型的对象不可JSON序列化。为什么会这样呢?

来自分类Dev

在O1或O3上使用Callgrind进行性能分析?

来自分类Dev

它没有在其他if(i == 1)中执行代码,为什么会这样呢?

来自分类Dev

是否可以使用管道“ |”运行输出本身?如果没有,为什么会这样呢?

来自分类Dev

不能在RasPI上进行USB捆绑

来自分类Dev

Nullable <int?>是不可能的,为什么不能呢?

来自分类Dev

对git来说是新手,为什么即使在功能分支上进行更改,我也能在develop分支上看到更改?

来自分类Dev

Haskell AS在不可辩驳的模式上进行绑定

来自分类Dev

为什么不可能对结论中使用的术语进行归纳?

来自分类Dev

是否不可能在订阅中捕获错误?

来自分类Dev

不可能在硒中定位元素

来自分类Dev

使用“ mysite.com”在Chrome多功能工具上进行搜索会跳转到Twitter上进行搜索,为什么?

Related 相关文章

  1. 1

    为什么不可能在特征中定义此构造函数?

  2. 2

    为什么不可能在Nullable <T>速记上调用静态方法?

  3. 3

    是否不可能在使用Box,Rc或Arc等智能指针的递归数据类型上进行嵌套匹配?

  4. 4

    为什么不可能在 Java 中使用 if 语句构建二进制信号量

  5. 5

    为什么在Java中不可能在内部匿名类中引用非最终变量?

  6. 6

    为什么我不能在Stream上进行匹配?

  7. 7

    如果D1> O1,则隐藏行

  8. 8

    为什么此Rust代码使用结构上的生存期绑定进行编译,但如果绑定仅在impl上进行编译,则给出生命周期错误呢?

  9. 9

    为什么我不能在类型族上进行模式匹配?

  10. 10

    为什么我的CSS链接需要?vh =#才能在我的网站上进行更新?

  11. 11

    为什么不能在 Cloud Firestore 的不同字段上进行 orderBy,我该如何解决?

  12. 12

    如何“快速”实施协议?如果不可能,为什么呢?

  13. 13

    如果线程本地映射包含对threadlocal对象的弱引用,那么为什么不进行垃圾回收呢?

  14. 14

    进行左联接时,Postgresql Null值将填充左表。为什么会这样呢?

  15. 15

    如果可以在预提交和预推送git钩子上进行测试,为什么还要进行持续集成测试?

  16. 16

    如果长格式有效,如果此语句返回0,为什么会这样呢?

  17. 17

    是否有可能在{0,1}上对这些对称表达式进行表示

  18. 18

    TypeError:“用户”类型的对象不可JSON序列化。为什么会这样呢?

  19. 19

    在O1或O3上使用Callgrind进行性能分析?

  20. 20

    它没有在其他if(i == 1)中执行代码,为什么会这样呢?

  21. 21

    是否可以使用管道“ |”运行输出本身?如果没有,为什么会这样呢?

  22. 22

    不能在RasPI上进行USB捆绑

  23. 23

    Nullable <int?>是不可能的,为什么不能呢?

  24. 24

    对git来说是新手,为什么即使在功能分支上进行更改,我也能在develop分支上看到更改?

  25. 25

    Haskell AS在不可辩驳的模式上进行绑定

  26. 26

    为什么不可能对结论中使用的术语进行归纳?

  27. 27

    是否不可能在订阅中捕获错误?

  28. 28

    不可能在硒中定位元素

  29. 29

    使用“ mysite.com”在Chrome多功能工具上进行搜索会跳转到Twitter上进行搜索,为什么?

热门标签

归档