z3 - 什么是地图[f]
问题描述
假设我有一个排序 T 并且我声明了一个由 T 索引的数组,它的映射类型是什么?
例如
(declare-datatypes ()
((T ....))) ; some index, may be finite or infinite (as in Int)
(declare-const a (Array T Int))
(declare-const b (Array Int Int))
(define-fun foo ((x Int)) Int)
(define-fun bar ((y Int)) Bool)
foo 上的映射是什么?和 b 上的那种映射 foo?有没有办法弄乱索引类型并从由 T 索引的数组中获取由另一种排序索引的数组,例如 Int?
解决方案
通常的排序匹配规则适用。也就是说,对于数组上map
的函数f : A -> B
,数组必须有它的范围类型A
,并且它将把它变成 a B
,保留其域的类型。
关于您的示例:无论您T
是什么,如果您 map ,您将只是Array T Int
作为最终排序,如果您 map foo
,Array T Bool
则作为结果bar
。以下脚本类型检查没有任何问题:
(declare-datatypes ((T 0)) ((i Int)))
(declare-const a (Array T Int))
(declare-const b (Array Int Int))
(declare-fun foo (Int) Int)
(declare-fun bar (Int) Bool)
(define-fun e1 () (Array T Int) ((_ map foo) a))
(define-fun e2 () (Array T Bool) ((_ map bar) a))
(define-fun e3 () (Array Int Int) ((_ map foo) b))
(define-fun e4 () (Array Int Bool) ((_ map bar) b))
请注意,您不能通过index
将函数映射到数组来更改域的类型(我认为这是您的意思)。它只会更改范围类型。
推荐阅读
- git - 无法将图片加载到个人 github 页面
- javascript - react-native-tabs-section-list 上面的组件
- r - 使用 dplyr 在 R 中有效地聚合及时数据
- api - 当我重新加载 url 时,此 API 项目无权使用此 API
- r - 时尚漂亮的R代码截图
- python - QMediaPlayer.setPosition 如何适用于 mp3?
- ios - NavigationBarTitle 不会使用 minimumScaleFactor() 或 allowTightening() 缩小文本
- r - 如何将列表列表中的值导出到数据框中?
- c# - 毫不夸张的 Azure 功能
- c++ - 如何在JNI中将java异常作为jobobject抛出