签名Σ是一组函数符号,其中每个符号f
与称为f
的arity的整数相关联。直观地,由符号f
表示的函数只能应用于arity(f)
个参数。
示例:Σ= {f / 2,g / 3}
让Σ成为签名。 Σ-algebra 由以下内容组成:
A
(fA : A^n → A)
之间的映射,其中n
是符号f
的arity。我的问题是我遇到了一些形式化这些概念的麻烦(尤其是功能符号的优点)。我想我必须使用依赖类型,但我还不熟悉它们。
到目前为止我尝试过:
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}.
但它可能有点过于复杂......我愿意接受更好的形式化。
参考: