Math 如何形式化&x3A3-Coq中的代数?

Math 如何形式化&x3A3-Coq中的代数?,math,coq,dependent-type,Math,Coq,Dependent Type,签名是一组函数符号,其中每个符号f与一个称为f的算术数的整数相关联。直觉上,由符号f表示的函数只能应用于arity(f)参数 示例:∑={f/2,g/3} 设∑为签名。∑-代数由以下部分组成: 一套a ∑的函数符号到函数之间的映射(fA:a^n→ A) 其中n是符号f的算术数 我的问题是,我在形式化这些概念(特别是函数符号的算术性)时遇到了一些困难。我想我必须使用依赖类型,但我还不太熟悉它们 到目前为止,我所尝试的: Definition function_symbol := ascii.

签名是一组函数符号,其中每个符号
f
与一个称为
f
的算术数的整数相关联。直觉上,由符号
f
表示的函数只能应用于
arity(f)
参数

示例:∑={f/2,g/3}

设∑为签名。∑-代数由以下部分组成:

  • 一套
    a
  • ∑的函数符号到函数
    之间的映射(fA:a^n→ A) 
    其中
    n
    是符号
    f
    的算术数
我的问题是,我在形式化这些概念(特别是函数符号的算术性)时遇到了一些困难。我想我必须使用依赖类型,但我还不太熟悉它们

到目前为止,我所尝试的:

Definition function_symbol := ascii.
Definition signature : Type := (list function_symbol) * arity.

Inductive sigma_term (sigma:signature) : Type :=
  | SigmaVar : variable -> sigma_term sigma
  | SigmaFunc f :
    let functions := fst sigma in
    let arity := snd sigma in
    In f functions -> ilist term (arity f) -> sigma_term sigma.

Definition sigma_algebra (sigma:signature) : Type :=
  let arity := snd sigma in
  {A : Type & forall f:function_symbol, nfun A (arity f) A}.
但可能有点太复杂了。。。我愿意接受更好的形式化

参考资料

  • 其中,∑-代数简称为代数

这似乎应该是相关的:@JohnColeman我也看到了,但我觉得我离理解提供的定义太远了。我更愿意寻求理解、直觉,而不是教育目的的实际应用。该链接的第一行是:“这一发展受到K.Meinke和J.V.Tucker在《计算机科学逻辑手册》中的文章中对普遍代数的介绍的启发。”。如果你能阅读这篇文章,那么可能更容易理解这一发展过程中的思想。我真的不知道(虽然你的问题和那个链接让我对它感兴趣),所以我不能说有没有更简单的方法。@JohnColeman也许我会看看。如果你不知道Coq,你也应该试试。我相信作为数学家和计算机科学家,你一定会喜欢它的。一些经典的参考文献是,。有许多方法可以形式化初始代数(即语法)及其相关解释。恕我直言,在不知道您的用例将是什么的情况下,很难推荐一个,因为权衡会有很大的不同。