Влияет ли random_seed на начальное состояние параметров в реализации?

Я заинтересован в использовании атрибута random_seed для разнообразия значений, возвращаемых контрпримером z3. Например, эта реализация имеет 3 параметра разных типов.

      implementation {:random_seed N} Impl$$_module.__default.isOddLength(i#0: int, j#0: Seq Box, k#0: bool) returns (res#0: bool, $_reverifyPost: bool)
{
  var $_Frame: <beta>[ref,Field beta]bool;

  anon0:
    assume {:print "Impl", " | ", "Impl$$_module.__default.isOddLength", " | ", i#0, " | ", j#0, " | ", k#0} true;
    assume {:print "Types", " | ", "int", " | ", "Seq Box", " | ", "bool"} true;
    
    $_Frame := (lambda<alpha> $o: ref, $f: Field alpha :: $o != null && read($Heap, $o, alloc) ==> false);
    $_reverifyPost := false;

    assert false;  // I injected this so I'll get a counterexample
...

Независимо от того, на что я изменяю число random_seed N, начальное состояние модели контрпримера всегда имеет одни и те же значения для i#0, j#0 и k#0.

      *** STATE <initial>
  $_Frame -> 
  $_reverifyPost -> 
  $Heap -> T@U!val!4
  $Tick -> 
  i#0 -> 
  j#0 -> T@U!val!5
  k#0 -> 
  res#0 -> 
*** END_STATE

Это связано с тем, что параметры реализации неизменны? Я понимаю, что мне не разрешено нарушать эти параметры по той же причине. Мне интересно, является ли это также причиной того, что z3 не возвращает значения в пределах доменов параметров, независимо от того, что указано random_seed.

Я готов публиковать больше по мере необходимости.

0 ответов

Другие вопросы по тегам