Coq 数据类型 - 一对带括号的对

Posted

技术标签:

【中文标题】Coq 数据类型 - 一对带括号的对【英文标题】:Coq datatype - pair of pair with bracket 【发布时间】:2021-09-10 09:47:04 【问题描述】:

我正在形式化一个支持元组和 nat 对作为函数输入的系统。但是,我对 Coq 中的 pair 类型有一些问题。

根据我对 Coq 的了解,pair 被定义为左关联。即(1, 2, 3)((1, 2), 3)具有相同类型的nat * nat * nat。有时,它可以被视为 nat 的 3 元组。另一方面,(1, (2, 3)) 的类型为 nat * (nat * nat),它是一对 nat 和 pair(或 2 元组)。

理想情况下,我想要一个允许nat 和元组对元组和nat 对 的系统。即(1, (2, 3))((1, 2), 3) 都不同于(1, 2, 3)。对于这种模型,Coq 中是否有任何建议的数据类型?

【问题讨论】:

【参考方案1】:

(1, 2, 3) 只是 ((1, 2), 3) 的一个很好的符号,nat * nat * nat 只是 (nat * nat) * nat 的一个很好的符号。所以这已经是你想要的了。

如果你想看到括号,你应该在CoqIDE中勾选查看->显示括号

请注意,如果您希望三元组不编码为对,您可以将它们定义为:

Record triple (A B C : Type): Type :=

  t_fst : A;
  t_snd : B;
  t_trd : C

【讨论】:

Set Printing Parentheses. 做同样的事情(如果你没有使用 CoqIDE)。

以上是关于Coq 数据类型 - 一对带括号的对的主要内容,如果未能解决你的问题,请参考以下文章

thrift数据类型科普

oracle中直接定义number类型不带括号究竟含不含小数或负数

Python和MATLAB的小括号( )、中括号[ ]和大括号

为返回对的对创建模板类[重复]

如何在 Coq 中使用归纳类型处理案例

Python基本数据类型(元组)