Questions tagged [boogie]

Boogie is an intermediate verification language created at Microsoft Research, intended as a layer on which to build program verifiers for other languages.

8 questions
3
votes
1 answer

What are triggers in Dafny/Boogie?

I have been limping along in Dafny without understanding triggers. Perhaps as a result, the programs I write seem to give the verifier a hard time. Sometimes I spend tons of time fiddling with my proof, trying to convince Dafny/Boogie that it's…
Jason Orendorff
  • 42,793
  • 6
  • 62
  • 96
2
votes
1 answer

What are the sources of non-robustness in Dafny proofs?

I occasionally (not frequently, but often enough) see it happen that a proof will be working in Dafny, and then something that appears irrelevant will change (e.g., variable names, function definition that aren't relevant to the proof, and so on)…
tjhance
  • 961
  • 1
  • 7
  • 14
2
votes
1 answer

How to read dafny counterexamples

I'd like to understand counterexamples produced by Dafny. I'm using the following code as an example: function update_map(m1: map, m2: map): map ensures (forall k :: k in m1 || k in m2 ==> k in update_map(m1, m2)) && …
Samuel Gruetter
  • 1,713
  • 12
  • 11
1
vote
1 answer

Can I find non-spurious counter example if I use different Boogie backend to check translated bpl files by Dafny?

As mentioned in the Wiki on Dafny GitHub, when Dafny cannot prove an assertion in a program, it might be due to either my program is incorrect OR the incompleteness of Dafny. But I figured the counter example from Dafny is spurious after I tried…
1
vote
0 answers

Logic error or Boogie bug? Quantifiers: exists of a forall

I'm working with the Boogie verification language, where I have the following example that gives a result that is counterintuitive to me. // Defining a function and giving it a meaning through axiomatization. function EqualsInt(x: int, y: int) :…
tyr.bentsen
  • 143
  • 1
  • 6
0
votes
1 answer

Vectors vs Sequences in Boogie

Looking through the tests that come with Boogie, I noticed there are two collection types: Seq T and Vec T. Examples are: type {:builtin "Seq"} Seq _; function {:builtin "seq.empty"} empty(): Seq int; function {:builtin "seq.len"} len(a: Seq int):…
redjamjar
  • 535
  • 2
  • 11
0
votes
0 answers

Does random_seed affect the initial state of parameters in an implementation?

I'm interested in leveraging the random_seed attribute in order to have variety in the values returned by z3's counterexample. For instance, this implementation has 3 parameters of different types. implementation {:random_seed N}…
twhatm9
  • 27
  • 4
0
votes
1 answer

Invariants and old() in Boogie

I'm verifying the following piece of code with boogie: var v: int; procedure main() modifies v; { v := 0; while(true) invariant v > old(v) || v == 0; { v := v+1; } } And the output is: main2.bpl(10,9): Error:…