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

标签 types functional-programming coq coqide

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

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

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

最佳答案

(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
}

关于types - Coq 数据类型 - 带括号的一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68157415/

相关文章:

language-agnostic - 玩无限游戏-惰性算术

coq - 在 Catalina 上通过 nix 安装 mathcomp 8.12/8.13 时出现问题

coq - 在 coq 中,您如何声明/证明枚举元素是不同的?

types - 路径归纳隐含

c# - 类型名称在哪里定义?

haskell - 您如何从 lambda 术语转换为交互网络?

math - 交互式数学证明系统

java - java.lang.String 和 String 之间的类型不匹配错误

Python 类型系统——对象与类型

f# - -> 在 F# 中是什么意思?