首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伊莎贝尔的一组元组

伊莎贝尔的一组元组
EN

Stack Overflow用户
提问于 2015-09-03 15:33:49
回答 2查看 422关注 0票数 1

I试图用一个以术语和一组元组作为参数的定义来编写,但我不知道如何显示这组元组

代码语言:javascript
复制
theory fullbb
imports 
Main

begin 
typedecl NAME
typedecl ADDRESS

locale addresbook
begin

definition address :: "NAME set ⇒ (NAME * ADDRESS) set ⇒ bool"
where 
"address name addresses  = (name = dom (addresses))"
end

我得到的错误信息是

代码语言:javascript
复制
Type unification failed: Clash of types "_set" and "_=>_"    
Type error in application: incompatible operand type
Operator: dom :: (??'a => ??'b option) => ??'a set
Operand: addresses :: (NAME x ADDRESS) set
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-04 07:06:00

函数dom返回映射的域,映射在HOL中建模为函数'a => 'b option。对于一个关系(即一组元组),适当的函数称为Domain。因此,只需在定义中使用Domain而不是dom,它应该按预期键入check。

票数 3
EN

Stack Overflow用户

发布于 2015-09-03 17:51:29

第一步是CNTL-点击相关函数来查看它们所做的事情,并查看它们的类型签名是什么。

对于dom,它带我去Map.thy第40行

代码语言:javascript
复制
definition
  dom :: "('a ~=> 'b) => 'a set" where
  "dom m = {a. m a ~= None}"

看上去你不是在处理元组。在第13行中有这种类型的同义词

代码语言:javascript
复制
type_synonym ('a,'b) "map" = "'a => 'b option" (infixr "~=>" 0)

locale在这里并不重要。我将元组语法更改为:

代码语言:javascript
复制
definition address :: "NAME set => (NAME ~=> ADDRESS) set => bool"
where 
  "address name addresses = (name = dom (addresses))"

我仍然有一个类型错误。这是因为dom需要(NAME ~=> ADDRESS)类型。

代码语言:javascript
复制
definition address :: "NAME set => (NAME ~=> ADDRESS) => bool" 
where 
  "address name addresses = (name = dom (addresses))"

所以,dom不是你想象的那样。

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

https://stackoverflow.com/questions/32379901

复制
相关文章

相似问题

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