关于Coq

时间:2015-05-13 08:22:34

标签: types coq homotopy-type-theory

我想学习Coq的同伦型理论(HoTT)变体。我正在浏览网站http://homotopytypetheory.org/,我已经安装了Coq的变种,我想用它来玩一点,写下这本书的例子等等......但是我找不到一个pdf / html文件解释了基本语法。当我尝试使用hoqide(coqide的HoTT变体)代码时

Require Import HoTT.
Inductive circle:Type1 := | ZERO : circle | loop : ZERO = ZERO.

我收到错误“错误:在当前环境中找不到引用ZERO。”我想我没有加载足够的库,或者ZERO = ZERO可能不是从ZERO到它自身的路径类型的正确表示法。 在博客中,也使用了符号ZERO ~~> ZEROPaths ZERO ZERO,但它们在此处不起作用。我在哪里可以找到一个教程开始?

3 个答案:

答案 0 :(得分:3)

我不知道您正在寻找的样式中的任何教程,但据我所知,HoTT并没有真正改变Coq中归纳类型的语法。相反,除了公理之外,他们还使用称为私有归纳类型的功能来定义更高的归纳类型,同时保持一致性。例如,看看HoTT库本身是如何the circle is defined的。

答案 1 :(得分:1)

我不熟悉启用HoTT的Coq变体,但是当您定义类似circle的归纳类型时,所有构造函数都必须实际构造该类型的元素。你不能写,例如。

Inductive mytype : Type :=
  | foo1 : mytype        (* ok *)
  | foo2 : nat -> mytype (* ok *)
  | foo3 : nat -> False  (* urk! Not ok. *)
  | foo3 : nat -> 0 = 1  (* urk! Not ok. *)
  .

否则逻辑会很快变得不一致。现在,您可能会认为,因为ZERO = ZERO是一个定理,假设存在的证明是无害的,但Coq无法自动实现这一点。此外,这样的证据肯定不是ZERO的构造函数。可能更好的选择是使用例如。

Variable foo3 : ZERO = ZERO .

或其中一个类似的命令(Axiom,Hypothesis,...)。

答案 2 :(得分:1)

an old branch of Bruno Barras' fork of Coq允许类似的语法。例如,参见the example file hit-hoh.v

Garis-MBP:tmp gsingh$ openssl x509 -noout -text -in verisign.pem 
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            18:da:d1:9e:26:7d:e8:bb:4a:21:58:cd:cc:6b:3b:4a
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
        Validity
            Not Before: Nov  8 00:00:00 2006 GMT
            Not After : Jul 16 23:59:59 2036 GMT
        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:af:24:08:08:29:7a:35:9e:60:0c:aa:e7:4b:3b:
                    4e:dc:7c:bc:3c:45:1c:bb:2b:e0:fe:29:02:f9:57:
                    08:a3:64:85:15:27:f5:f1:ad:c8:31:89:5d:22:e8:
                    2a:aa:a6:42:b3:8f:f8:b9:55:b7:b1:b7:4b:b3:fe:
                    8f:7e:07:57:ec:ef:43:db:66:62:15:61:cf:60:0d:
                    a4:d8:de:f8:e0:c3:62:08:3d:54:13:eb:49:ca:59:
                    54:85:26:e5:2b:8f:1b:9f:eb:f5:a1:91:c2:33:49:
                    d8:43:63:6a:52:4b:d2:8f:e8:70:51:4d:d1:89:69:
                    7b:c7:70:f6:b3:dc:12:74:db:7b:5d:4b:56:d3:96:
                    bf:15:77:a1:b0:f4:a2:25:f2:af:1c:92:67:18:e5:
                    f4:06:04:ef:90:b9:e4:00:e4:dd:3a:b5:19:ff:02:
                    ba:f4:3c:ee:e0:8b:eb:37:8b:ec:f4:d7:ac:f2:f6:
                    f0:3d:af:dd:75:91:33:19:1d:1c:40:cb:74:24:19:
                    21:93:d9:14:fe:ac:2a:52:c7:8f:d5:04:49:e4:8d:
                    63:47:88:3c:69:83:cb:fe:47:bd:2b:7e:4f:c5:95:
                    ae:0e:9d:d4:d1:43:c0:67:73:e3:14:08:7e:e5:3f:
                    9f:73:b8:33:0a:cf:5d:3f:34:87:96:8a:ee:53:e8:
                    25:15
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            1.3.6.1.5.5.7.1.12: 
                0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
            X509v3 Subject Key Identifier: 
                7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
    Signature Algorithm: sha1WithRSAEncryption
         93:24:4a:30:5f:62:cf:d8:1a:98:2f:3d:ea:dc:99:2d:bd:77:
         f6:a5:79:22:38:ec:c4:a7:a0:78:12:ad:62:0e:45:70:64:c5:
         e7:97:66:2d:98:09:7e:5f:af:d6:cc:28:65:f2:01:aa:08:1a:
         47:de:f9:f9:7c:92:5a:08:69:20:0d:d9:3e:6d:6e:3c:0d:6e:
         d8:e6:06:91:40:18:b9:f8:c1:ed:df:db:41:aa:e0:96:20:c9:
         cd:64:15:38:81:c9:94:ee:a2:84:29:0b:13:6f:8e:db:0c:dd:
         25:02:db:a4:8b:19:44:d2:41:7a:05:69:4a:58:4f:60:ca:7e:
         82:6a:0b:02:aa:25:17:39:b5:db:7f:e7:84:65:2a:95:8a:bd:
         86:de:5e:81:16:83:2d:10:cc:de:fd:a8:82:2a:6d:28:1f:0d:
         0b:c4:e5:e7:1a:26:19:e1:f4:11:6f:10:b5:95:fc:e7:42:05:
         32:db:ce:9d:51:5e:28:b6:9e:85:d3:5b:ef:a5:7d:45:40:72:
         8e:b7:0e:6b:0e:06:fb:33:35:48:71:b8:9d:27:8b:c4:65:5f:
         0d:86:76:9c:44:7a:f6:95:5c:f6:5d:32:08:33:a4:54:b6:18:
         3f:68:5c:f2:42:4a:85:38:54:83:5f:d1:e8:2c:f2:ac:11:d6:
         a8:ed:63:6a

A,此版本的Coq自2015年末以来未进行更新,并且当前版本的Coq中没有此类本地支持。

the HoTT library编码高级归纳类型的方式是扩展专用归纳。例如in an older version of the circle file(此后已通过等号替换为定义),我们可以看到:

Inductive circle : U :=
   base
// loop : base=base.

Module Export Circle. Private Inductive S1 : Type1 := | base : S1. Axiom loop : base = base. Definition S1_ind (P : S1 -> Type) (b : P base) (l : loop # b = b) : forall (x:S1), P x := fun x => match x with base => fun _ => b end l. Axiom S1_ind_beta_loop : forall (P : S1 -> Type) (b : P base) (l : loop # b = b), apD (S1_ind P b l) loop = l. End Circle. 关键字告诉Coq在当前模块之外禁用模式匹配;这使我们能够迫使用户仅使用给定模块中定义的消除/归纳原理。然后,我们对路径构造函数进行公理化,对它们的计算规则进行公理化,并定义消除器。请注意,消除器必须在其主体中使用path参数(Private Inductive),否则Coq将假定您通过该参数传递的内容无关紧要。

~~~~~

  

在哪里可以找到开始的教程?

我目前不知道任何此类教程,但我建议您查看contrib/HoTTBook.vcontrib/HoTTBookExercises.v,它们包含HoTT书/练习与HoTT / HoTT库之间的许多链接。研究如何陈述和证明这些定理和练习可能是有用的(可以随时为尚未与任何事物联系在一起的问题/定理提供自己的解决方案/证明!)。