数据类型是否支持常量参数?

Does datatype support constant parameters?

假设我有以下数据类型:

datatype Tree = Genesis | Node(parent:Tree, time: nat)

对于我的应用程序,可以安全地假设 Genesis 是在 time = 0

创建的

是否可以为 Genesis 设置一个名为 time 的参数,它总是某个值,比如 0

目前我是这样规避的:

predicate valid(tree: Tree)
{
  match tree
    case Genesis => true
    case Node(parent, time) =>
      time > (if parent == Genesis then 0 else parent.time) && valid(parent)
}

但是我想完成这样的事情:

predicate valid(tree: Tree)
{
  match tree
    case Genesis => true
    case Node(parent, time) =>
      time > parent.time && valid(parent)
}

任何线索都会有所帮助。谢谢!

无法将常量字段添加到数据类型构造函数。你最好的选择可能是编写一个函数 GetTime(tree: Tree): nat 来包装你的 if 表达式。

如果您提供有关问题的更多背景信息,可能还会有更好的解决方案。