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

Coq datatype - pair of pair with bracket

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

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

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

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

如果你想看到括号,你应该勾选 View -> Display parentheses in CoqIDE.

请注意,如果您想要三元组而不是成对编码,您可以将它们定义为:

Record triple (A B C : Type): Type :=
{
  t_fst : A;
  t_snd : B;
  t_trd : C
}