coq - 如何在 Coq 中使用多个“0”表示法
问题描述
我在 Coq 中定义了域公理,并使用它们来证明这里描述的简单属性。然后,我添加了向量空间公理并在那里证明了简单的性质。由于0
我的领域已经使用了该符号:
(*******************)
(* Field notations *)
(*******************)
Notation "0" := zero.
Notation "1" := one.
Infix "+" := add.
Infix "*" := mul.
我对向量空间使用了一些更难看的符号:
(**************************)
(* Vector space notations *)
(**************************)
Notation "00" := zerov.
Notation "11" := onev.
Infix "+_v" := addv (at level 50, no associativity).
Infix "*_v" := mulv (at level 60, no associativity).
这可以证明以下简单的引理:
Lemma mul_0_l: forall (v : V), (eqv (mulv 0 v) 00).
当我更改"00"
为"0V"
(更漂亮的)时,一切都停止了工作,并且出现以下错误:
In environment
v : V
The term "0" has type "F" while it is expected to have type "V".
有什么用"0V"
吗?还是我被困住了"00"
?
解决方案
2021 年更新:链接问题已在此期间修复,您应该可以"0V"
毫无问题地使用(或任何带前导数字的符号)。
令我惊讶的是,无法识别以数字开头的标记。我在上面打开了一个 GitHub 问题。同时,我相信您可以使用的最接近的东西是范围符号(尽管它长了一个字符):
Section test.
Variable T : Type.
Variable zero : T.
Notation "0" := zero.
Variable V : Type.
Variable zeroV : V.
Notation "0" := zeroV : V_scope.
Delimit Scope V_scope with V.
Check 0. (* 0 : T *)
Check 0%V. (* 0%V : V *)
编辑
正如@JasonGross 在评论中所建议的那样,您可以Bind Scope
对0
类型T
和V
. 在某些情况下,这可能会影响可读性。
Section test.
Variable T : Type.
Variable zero : T.
Notation "0" := zero.
Variable V : Type.
Variable zeroV : V.
Notation "0" := zeroV : V_scope.
Delimit Scope V_scope with V.
Bind Scope V_scope with V.
Check 0. (* 0 : T *)
Check 0%V. (* 0%V : V *)
Variable mult : T -> V -> V.
Check mult 0 0. (* mult 0 0 : V *)
Check mult 0 0%V. (* mult 0 0 : V *)
推荐阅读
- python - BouncyCastle 的 CMSEnvelopedData 是否有等效的 python 库(信封加密/解密)
- r - data.table 链接不会创建新变量
- php - Wordpress 多站点 - 一个域页脚中的菜单引用多站点上不同站点的菜单
- html - 将 Angular 组件相互传递
- mysql - 从 MySQL 读取 JSON 数据的最快方法
- git - 无法在 pydroid 中安装 git。请帮忙
- spring-boot - 如何在 Spring Boot Camel 项目中测试 Camel - 所有 @EndpointInject 均为空但 @Autowired 工作?
- azure - Azure 关联 ID 和请求 ID
- java - 是否有任何 API 可以使用 WebdataRocks 创建“主 - 子报告”
- angular - 如何在 spartacus 应用程序中知道 gigya 屏幕设置上更新了哪些首选项?