我想学习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 ~~> ZERO
和Paths ZERO ZERO
,但它们在此处不起作用。我在哪里可以找到一个教程开始?
答案 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.v
和contrib/HoTTBookExercises.v
,它们包含HoTT书/练习与HoTT / HoTT库之间的许多链接。研究如何陈述和证明这些定理和练习可能是有用的(可以随时为尚未与任何事物联系在一起的问题/定理提供自己的解决方案/证明!)。