什么样的地图[f]

What is the sort of map[f]

假设我有一个 Sort 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)

a 上的映射 foo 是什么?以及 b 上的那种映射 foo?有什么方法可以弄乱索引类型并从 T 索引的数组中获取另一种索引的数组,例如整数?

适用通常的排序匹配规则。也就是说,要map一个数组上的函数f : A -> B,数组必须有它的范围类型A,它会把它变成B,保留类型它的域。

关于您的示例:无论您的 T 是什么,如果将 fooArray 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 的意思)。它只更改范围类型。