seq <int>和array <int>之间的Dafny区别

奥伦·伊什·沙洛姆
  • 我似乎无法分辨dafnyseq<int>的区别array<int>
  • 它们对应于他们的SMT实体吗?(不确定,因为dafny中的数组具有.Length
詹姆斯·威尔科克斯

序列是一个(n个不变的)数学列表。数组是分配给堆的(可变的,可能是别名的)数据结构。

考虑以下两种愚蠢的方法

method Seq()
{
  var x := [1, 2, 3];
  assert x[1] == 2;
  var y := x;
  assert y[1] == 2;
  y := y[1 := 7];
  assert y[1] == 7;
  assert x[1] == 2;
}

method Array()
{
  var x := new int[3](i => i + 1);
  assert x[1] == 2;
  var y := x;
  assert y[1] == 2;
  y[1] := 7;
  assert y[1] == 7;
  assert x[1] == 7;
}

第一种方法使用序列。由于序列是不可变的,因此y将更新为序列,索引1更新为具有值7。正如预期的那样,x在操作时保持不变y

第二种方法使用数组。由于数组是堆分配的并且可以别名,因此当我们分配时y := x,我们输入一个世界,其中xy是堆中同一数组的两个不同名称。这意味着,如果我们修改via数组y,我们将在read through中看到反映的结果x

为了回答您的第二个问题,Dafny级序列和数组不直接对应于同名的SMT级事物。Dafny的编码根本不使用SMT级别的序列或数组。相反,所有内容都通过未解释的函数进行编码。我认为这主要是出于历史原因,我不知道是否有人在戴夫尼语境下认真研究过SMT序列理论。我可以说,当前的编码已经针对求解器性能进行了精心调整。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Seq [Int]和List [Int]之间的区别和转换

来自分类Dev

Int ...和Int []之间的区别

来自分类Dev

int * a和int * a = new int之间的区别

来自分类Dev

array <int,5> b之间的区别;和int b [5];

来自分类Dev

void(int)和void(*)(int)之间的区别

来自分类Dev

const int和int文字之间的区别

来自分类Dev

int和new int()之间的区别

来自分类Dev

int * a和char * a之间的区别?

来自分类Dev

char []和int []之间的区别

来自分类Dev

int(* function)(int,int)和int * function(int,int)之间的区别

来自分类Dev

int * array [60]和int * array之间的区别= new int(60);

来自分类Dev

int * array [60]和int * array之间的区别= new int(60);

来自分类Dev

size_type和int之间的区别

来自分类Dev

Int()和toInt()之间的快速区别

来自分类Dev

MySQL中INT和UUID之间的区别

来自分类Dev

Int()和toInt()之间的快速区别

来自分类Dev

“ void main”和“ int main”之间的区别

来自分类Dev

int a [9]和a [3] [3]之间的区别

来自分类Dev

0,int()和int {}之间有什么区别?

来自分类Dev

OS XC中的int(*)(...)和int(^)(...)之间的区别?

来自分类Dev

类型之间的区别-C中的int *和int * [100]?

来自分类Dev

“ List <int> [,]”和“ List <List <int >>”之间的区别

来自分类Dev

((int)a)和(int(a))之间有什么区别?

来自分类Dev

类型之间的区别-C中的int *和int * [100]?

来自分类Dev

OS XC中int(*)(...)和int(^)(...)之间的区别?

来自分类Dev

如何在Scala中轻松将IndexedSeq [Array [Int]]转换为Seq [Seq [Int]]?

来自分类Dev

cython中的np.int,np.int_,int和np.int_t之间的区别?

来自分类Dev

“ int * a = new int”和“ int * a = new int()”之间有什么区别?

来自分类Dev

“ int * a = new int”和“ int * a = new int [5]”之间有什么区别?

Related 相关文章

  1. 1

    Seq [Int]和List [Int]之间的区别和转换

  2. 2

    Int ...和Int []之间的区别

  3. 3

    int * a和int * a = new int之间的区别

  4. 4

    array <int,5> b之间的区别;和int b [5];

  5. 5

    void(int)和void(*)(int)之间的区别

  6. 6

    const int和int文字之间的区别

  7. 7

    int和new int()之间的区别

  8. 8

    int * a和char * a之间的区别?

  9. 9

    char []和int []之间的区别

  10. 10

    int(* function)(int,int)和int * function(int,int)之间的区别

  11. 11

    int * array [60]和int * array之间的区别= new int(60);

  12. 12

    int * array [60]和int * array之间的区别= new int(60);

  13. 13

    size_type和int之间的区别

  14. 14

    Int()和toInt()之间的快速区别

  15. 15

    MySQL中INT和UUID之间的区别

  16. 16

    Int()和toInt()之间的快速区别

  17. 17

    “ void main”和“ int main”之间的区别

  18. 18

    int a [9]和a [3] [3]之间的区别

  19. 19

    0,int()和int {}之间有什么区别?

  20. 20

    OS XC中的int(*)(...)和int(^)(...)之间的区别?

  21. 21

    类型之间的区别-C中的int *和int * [100]?

  22. 22

    “ List <int> [,]”和“ List <List <int >>”之间的区别

  23. 23

    ((int)a)和(int(a))之间有什么区别?

  24. 24

    类型之间的区别-C中的int *和int * [100]?

  25. 25

    OS XC中int(*)(...)和int(^)(...)之间的区别?

  26. 26

    如何在Scala中轻松将IndexedSeq [Array [Int]]转换为Seq [Seq [Int]]?

  27. 27

    cython中的np.int,np.int_,int和np.int_t之间的区别?

  28. 28

    “ int * a = new int”和“ int * a = new int()”之间有什么区别?

  29. 29

    “ int * a = new int”和“ int * a = new int [5]”之间有什么区别?

热门标签

归档