首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >type_synonym对伊莎贝尔定义的比较

type_synonym对伊莎贝尔定义的比较
EN

Stack Overflow用户
提问于 2014-11-06 14:22:08
回答 1查看 778关注 0票数 1

“伊莎贝尔”中有以下两种表述:

代码语言:javascript
复制
consts drives ::"(Person × Car) set"

type_synonym drives="(Person × Car) set"

它们在语义上有何不同?

我认为type_synonym只是前面指定的类型的简单名称。对吗?

但是const是干什么用的呢?(伊莎贝尔教程文件--第119页)说:“这是伊莎贝尔在不定义常量的情况下声明常量的方法。”但是,在什么意义上,上面的表达式可以是一个常数呢?!!)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-06 14:49:41

实际上,type_synonym只是指定类型的同义词,它没有引入任何新类型。

consts只是声明您将定义给定类型的新常量,而不实际指定它是如何定义的。(请注意,由于在Isabelle/HOL中,每一种类型都是居住的,因此不需要证明这样的常数甚至可以存在)。之后,您可以定义其他函数、定义等,这些函数和定义可能已经使用了新定义的常量(在示例中使用drives,在下面的示例中使用drives_c )。在某个时候,您可以通过、defs、实际提供常量的定义。

代码语言:javascript
复制
type_synonym drives_t = "(int * nat) set"

consts drives_c :: "(int * nat) set"

(* test_drives already used drives_c *)
definition test_drives :: "int => bool" where 
   "test_drives x == (x, 5) : drives_c"

(* here, you actually define drives_c *)
defs drives_c_def: "drives_c == {(3,2), (7,5)}"

但是,标准定义可以通过定义更直接地执行。

代码语言:javascript
复制
definition drives_c :: drives_t where
  "drives_c == {(3,2), (7,5)}"

希望这能帮上忙,勒内

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26781778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档