From f28fa68497352ffb57ab2846da4cc1c1aeaf1968 Mon Sep 17 00:00:00 2001 From: leino Date: Wed, 12 Aug 2015 22:44:50 -0700 Subject: Change the induction heuristic for lemmas to also look in precondition for clues about which parameters to include. As a result, improved many test cases (see, e.g., dafny4/NipkowKlein-chapter7.dfy!) and beautified some others. --- Test/dafny3/Filter.dfy | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'Test/dafny3/Filter.dfy') diff --git a/Test/dafny3/Filter.dfy b/Test/dafny3/Filter.dfy index 24c8e94e..6e67de26 100644 --- a/Test/dafny3/Filter.dfy +++ b/Test/dafny3/Filter.dfy @@ -35,7 +35,7 @@ lemma Lemma_TailSubStreamK(s: Stream, u: Stream, k: nat) // this lemma could ha { if k != 0 { Lemma_InTail(s.head, u); - Lemma_TailSubStreamK(s.tail, u, k-1); + //Lemma_TailSubStreamK(s.tail, u, k-1); } } lemma Lemma_InSubStream(x: T, s: Stream, u: Stream) @@ -193,10 +193,10 @@ lemma FS_Ping(s: Stream, h: PredicateHandle, x: T) } lemma FS_Pong(s: Stream, h: PredicateHandle, x: T, k: nat) - requires AlwaysAnother(s, h) && In(x, s) && P(x, h); - requires Tail(s, k).head == x; - ensures In(x, Filter(s, h)); - decreases k; + requires AlwaysAnother(s, h) && In(x, s) && P(x, h) + requires Tail(s, k).head == x + ensures In(x, Filter(s, h)) + decreases k { var fs := Filter(s, h); if s.head == x { @@ -205,14 +205,14 @@ lemma FS_Pong(s: Stream, h: PredicateHandle, x: T, k: nat) assert fs == Cons(s.head, Filter(s.tail, h)); // reminder of where we are calc { true; - == { FS_Pong(s.tail, h, x, k-1); } + //== { FS_Pong(s.tail, h, x, k-1); } In(x, Filter(s.tail, h)); ==> { assert fs.head != x; Lemma_InTail(x, fs); } In(x, fs); } } else { - assert fs == Filter(s.tail, h); // reminder of where we are - FS_Pong(s.tail, h, x, k-1); + //assert fs == Filter(s.tail, h); // reminder of where we are + //FS_Pong(s.tail, h, x, k-1); } } -- cgit v1.2.3 From 3c6bbc3ee8a0452bcca193217957e6ea5e6e23f4 Mon Sep 17 00:00:00 2001 From: leino Date: Wed, 12 Aug 2015 23:05:44 -0700 Subject: Changed dafny3/Filter.dfy to use higher-order functions instead of the previous function handles --- Test/dafny3/Filter.dfy | 226 +++++++++++++++++++++++------------------- Test/dafny3/Filter.dfy.expect | 2 +- 2 files changed, 126 insertions(+), 102 deletions(-) (limited to 'Test/dafny3/Filter.dfy') diff --git a/Test/dafny3/Filter.dfy b/Test/dafny3/Filter.dfy index 6e67de26..6f541396 100644 --- a/Test/dafny3/Filter.dfy +++ b/Test/dafny3/Filter.dfy @@ -53,104 +53,119 @@ lemma Lemma_InSubStream(x: T, s: Stream, u: Stream) } } -type PredicateHandle -predicate P(x: T, h: PredicateHandle) +type Predicate = T -> bool -copredicate AllP(s: Stream, h: PredicateHandle) +predicate Total(f: T -> U) + reads f.reads { - P(s.head, h) && AllP(s.tail, h) + forall t :: f.reads(t) == {} && f.requires(t) } -lemma Lemma_InAllP(x: T, s: Stream, h: PredicateHandle) - requires In(x, s) && AllP(s, h); - ensures P(x, h); + +copredicate AllP(s: Stream, P: Predicate) + requires Total(P) +{ + P(s.head) && AllP(s.tail, P) +} +lemma Lemma_InAllP(x: T, s: Stream, P: Predicate) + requires Total(P) + requires In(x, s) && AllP(s, P) + ensures P(x) { var n :| 0 <= n && Tail(s, n).head == x; var t := s; while n != 0 - invariant 0 <= n; - invariant Tail(t, n).head == x; - invariant AllP(t, h); + invariant 0 <= n + invariant Tail(t, n).head == x + invariant AllP(t, P) { t, n := t.tail, n - 1; } } -predicate IsAnother(s: Stream, h: PredicateHandle) +predicate IsAnother(s: Stream, P: Predicate) + requires Total(P) { - exists n :: 0 <= n && P(Tail(s, n).head, h) + exists n :: 0 <= n && P(Tail(s, n).head) } -copredicate AlwaysAnother(s: Stream, h: PredicateHandle) +copredicate AlwaysAnother(s: Stream, P: Predicate) + requires Total(P) { - IsAnother(s, h) && AlwaysAnother(s.tail, h) + IsAnother(s, P) && AlwaysAnother(s.tail, P) } -colemma Lemma_AllImpliesAlwaysAnother(s: Stream, h: PredicateHandle) - requires AllP(s, h); - ensures AlwaysAnother(s, h); +colemma Lemma_AllImpliesAlwaysAnother(s: Stream, P: Predicate) + requires Total(P) + requires AllP(s, P) + ensures AlwaysAnother(s, P) { assert Tail(s, 0) == s; } -function Next(s: Stream, h: PredicateHandle): nat - requires AlwaysAnother(s, h); - ensures P(Tail(s, Next(s, h)).head, h); - ensures forall i :: 0 <= i < Next(s, h) ==> !P(Tail(s, i).head, h); +function Next(s: Stream, P: Predicate): nat + requires Total(P) + requires AlwaysAnother(s, P) + ensures P(Tail(s, Next(s, P)).head) + ensures forall i :: 0 <= i < Next(s, P) ==> !P(Tail(s, i).head) { - var n :| 0 <= n && P(Tail(s, n).head, h); - NextMinimizer(s, h, n) + var n :| 0 <= n && P(Tail(s, n).head); + NextMinimizer(s, P, n) } // the following is an auxiliary function of the definition of Next -function NextMinimizer(s: Stream, h: PredicateHandle, n: nat): nat - requires P(Tail(s, n).head, h); - ensures P(Tail(s, NextMinimizer(s, h, n)).head, h); - ensures forall i :: 0 <= i < NextMinimizer(s, h, n) ==> !P(Tail(s, i).head, h); +function NextMinimizer(s: Stream, P: Predicate, n: nat): nat + requires Total(P) + requires P(Tail(s, n).head) + ensures P(Tail(s, NextMinimizer(s, P, n)).head) + ensures forall i :: 0 <= i < NextMinimizer(s, P, n) ==> !P(Tail(s, i).head) { - if forall i :: 0 <= i < n ==> !P(Tail(s, i).head, h) then + if forall i :: 0 <= i < n ==> !P(Tail(s, i).head) then n else - var k :| 0 <= k < n && P(Tail(s, k).head, h); - NextMinimizer(s, h, k) + var k :| 0 <= k < n && P(Tail(s, k).head); + NextMinimizer(s, P, k) } -function Filter(s: Stream, h: PredicateHandle): Stream - requires AlwaysAnother(s, h); - decreases Next(s, h); +function Filter(s: Stream, P: Predicate): Stream + requires Total(P) + requires AlwaysAnother(s, P) + decreases Next(s, P) { - if P(s.head, h) then - Cons(s.head, Filter(s.tail, h)) + if P(s.head) then + Cons(s.head, Filter(s.tail, P)) else - Filter(s.tail, h) + Filter(s.tail, P) } // properties about Filter -colemma Filter_AlwaysAnother(s: Stream, h: PredicateHandle) - requires AlwaysAnother(s, h); - ensures AllP(Filter(s, h), h); - decreases Next(s, h); +colemma Filter_AlwaysAnother(s: Stream, P: Predicate) + requires Total(P) + requires AlwaysAnother(s, P) + ensures AllP(Filter(s, P), P) + decreases Next(s, P) { - if P(s.head, h) { - Filter_AlwaysAnother(s.tail, h); + if P(s.head) { + Filter_AlwaysAnother(s.tail, P); } else { - Filter_AlwaysAnother#[_k](s.tail, h); + Filter_AlwaysAnother#[_k](s.tail, P); } } -colemma Filter_IsSubStream(s: Stream, h: PredicateHandle) - requires AlwaysAnother(s, h); - ensures IsSubStream(Filter(s, h), s); - decreases Next(s, h); +colemma Filter_IsSubStream(s: Stream, P: Predicate) + requires Total(P) + requires AlwaysAnother(s, P) + ensures IsSubStream(Filter(s, P), s) + decreases Next(s, P) { - if P(s.head, h) { + if P(s.head) { // To prove IsSubStream#[_k](Filter(s, h), s), we prove the two conjuncts from the definition calc { true; - == { Filter_IsSubStream(s.tail, h); } // induction hypothesis - IsSubStream#[_k-1](Filter(s.tail, h), s.tail); + == { Filter_IsSubStream(s.tail, P); } // induction hypothesis + IsSubStream#[_k-1](Filter(s.tail, P), s.tail); == // { assert Filter(s.tail, h) == Filter(s, h).tail; } - IsSubStream#[_k-1](Filter(s, h).tail, s.tail); - ==> { Lemma_TailSubStreamK(Filter(s, h).tail, s, _k-1); } - IsSubStream#[_k-1](Filter(s, h).tail, s); + IsSubStream#[_k-1](Filter(s, P).tail, s.tail); + ==> { Lemma_TailSubStreamK(Filter(s, P).tail, s, _k-1); } + IsSubStream#[_k-1](Filter(s, P).tail, s); } calc { - In(Filter(s, h).head, s); - == { assert Filter(s, h) == Cons(s.head, Filter(s.tail, h)); } + In(Filter(s, P).head, s); + == { assert Filter(s, P) == Cons(s.head, Filter(s.tail, P)); } In(s.head, s); == { assert Tail(s, 0) == s; assert exists n :: 0 <= n && Tail(s, n).head == s.head; @@ -158,55 +173,58 @@ colemma Filter_IsSubStream(s: Stream, h: PredicateHandle) true; } } else { - Lemma_TailSubStreamK(Filter(s.tail, h), s, _k); + Lemma_TailSubStreamK(Filter(s.tail, P), s, _k); } } // The following says nothing about the order of the elements in the stream -lemma Theorem_Filter(s: Stream, h: PredicateHandle) - requires AlwaysAnother(s, h); - ensures forall x :: In(x, Filter(s, h)) <==> In(x, s) && P(x, h); +lemma Theorem_Filter(s: Stream, P: Predicate) + requires Total(P) + requires AlwaysAnother(s, P) + ensures forall x :: In(x, Filter(s, P)) <==> In(x, s) && P(x) { forall x - ensures In(x, Filter(s, h)) <==> In(x, s) && P(x, h); + ensures In(x, Filter(s, P)) <==> In(x, s) && P(x) { - if In(x, Filter(s, h)) { - FS_Ping(s, h, x); + if In(x, Filter(s, P)) { + FS_Ping(s, P, x); } - if In(x, s) && P(x, h) { + if In(x, s) && P(x) { var k :| 0 <= k && Tail(s, k).head == x; - FS_Pong(s, h, x, k); + FS_Pong(s, P, x, k); } } } -lemma FS_Ping(s: Stream, h: PredicateHandle, x: T) - requires AlwaysAnother(s, h) && In(x, Filter(s, h)); - ensures In(x, s) && P(x, h); +lemma FS_Ping(s: Stream, P: Predicate, x: T) + requires Total(P) + requires AlwaysAnother(s, P) && In(x, Filter(s, P)); + ensures In(x, s) && P(x); { - Filter_IsSubStream(s, h); - Lemma_InSubStream(x, Filter(s, h), s); + Filter_IsSubStream(s, P); + Lemma_InSubStream(x, Filter(s, P), s); - Filter_AlwaysAnother(s, h); - assert AllP(Filter(s, h), h); - Lemma_InAllP(x, Filter(s, h), h); + Filter_AlwaysAnother(s, P); + assert AllP(Filter(s, P), P); + Lemma_InAllP(x, Filter(s, P), P); } -lemma FS_Pong(s: Stream, h: PredicateHandle, x: T, k: nat) - requires AlwaysAnother(s, h) && In(x, s) && P(x, h) +lemma FS_Pong(s: Stream, P: Predicate, x: T, k: nat) + requires Total(P) + requires AlwaysAnother(s, P) && In(x, s) && P(x) requires Tail(s, k).head == x - ensures In(x, Filter(s, h)) + ensures In(x, Filter(s, P)) decreases k { - var fs := Filter(s, h); + var fs := Filter(s, P); if s.head == x { assert Tail(fs, 0) == fs; - } else if P(s.head, h) { - assert fs == Cons(s.head, Filter(s.tail, h)); // reminder of where we are + } else if P(s.head) { + assert fs == Cons(s.head, Filter(s.tail, P)); // reminder of where we are calc { true; //== { FS_Pong(s.tail, h, x, k-1); } - In(x, Filter(s.tail, h)); + In(x, Filter(s.tail, P)); ==> { assert fs.head != x; Lemma_InTail(x, fs); } In(x, fs); } @@ -218,45 +236,51 @@ lemma FS_Pong(s: Stream, h: PredicateHandle, x: T, k: nat) // ----- orderings ------ -function Ord(x: T, ord: PredicateHandle): int +type Ord = T -> int -copredicate Increasing(s: Stream, ord: PredicateHandle) +copredicate Increasing(s: Stream, ord: Ord) + requires Total(ord) { - Ord(s.head, ord) < Ord(s.tail.head, ord) && Increasing(s.tail, ord) + ord(s.head) < ord(s.tail.head) && Increasing(s.tail, ord) } -copredicate IncrFrom(s: Stream, low: int, ord: PredicateHandle) +copredicate IncrFrom(s: Stream, low: int, ord: Ord) + requires Total(ord) { - low <= Ord(s.head, ord) && IncrFrom(s.tail, Ord(s.head, ord) + 1, ord) + low <= ord(s.head) && IncrFrom(s.tail, ord(s.head) + 1, ord) } -colemma Lemma_Incr0(s: Stream, low: int, ord: PredicateHandle) - requires IncrFrom(s, low, ord); - ensures Increasing(s, ord); +colemma Lemma_Incr0(s: Stream, low: int, ord: Ord) + requires Total(ord) + requires IncrFrom(s, low, ord) + ensures Increasing(s, ord) { } -colemma Lemma_Incr1(s: Stream, ord: PredicateHandle) +colemma Lemma_Incr1(s: Stream, ord: Ord) + requires Total(ord) requires Increasing(s, ord); - ensures IncrFrom(s, Ord(s.head, ord), ord); + ensures IncrFrom(s, ord(s.head), ord); { Lemma_Incr1(s.tail, ord); } -lemma Theorem_FilterPreservesOrdering(s: Stream, h: PredicateHandle, ord: PredicateHandle) - requires Increasing(s, ord) && AlwaysAnother(s, h); - ensures Increasing(Filter(s, h), ord); +lemma Theorem_FilterPreservesOrdering(s: Stream, P: Predicate, ord: Ord) + requires Total(P) && Total(ord) + requires Increasing(s, ord) && AlwaysAnother(s, P) + ensures Increasing(Filter(s, P), ord) { Lemma_Incr1(s, ord); - Lemma_FilterPreservesIncrFrom(s, h, Ord(s.head, ord), ord); - Lemma_Incr0(Filter(s, h), Ord(s.head, ord), ord); + Lemma_FilterPreservesIncrFrom(s, P, ord(s.head), ord); + Lemma_Incr0(Filter(s, P), ord(s.head), ord); } -colemma Lemma_FilterPreservesIncrFrom(s: Stream, h: PredicateHandle, low: int, ord: PredicateHandle) - requires IncrFrom(s, low, ord) && AlwaysAnother(s, h) && low <= Ord(s.head, ord); - ensures IncrFrom(Filter(s, h), low, ord); - decreases Next(s, h); +colemma Lemma_FilterPreservesIncrFrom(s: Stream, P: Predicate, low: int, ord: Ord) + requires Total(P) && Total(ord) + requires IncrFrom(s, low, ord) && AlwaysAnother(s, P) && low <= ord(s.head) + ensures IncrFrom(Filter(s, P), low, ord) + decreases Next(s, P) { - if P(s.head, h) { - Lemma_FilterPreservesIncrFrom(s.tail, h, Ord(s.head, ord)+1, ord); + if P(s.head) { + Lemma_FilterPreservesIncrFrom(s.tail, P, ord(s.head)+1, ord); } else { - Lemma_FilterPreservesIncrFrom#[_k](s.tail, h, low, ord); + Lemma_FilterPreservesIncrFrom#[_k](s.tail, P, low, ord); } } diff --git a/Test/dafny3/Filter.dfy.expect b/Test/dafny3/Filter.dfy.expect index 91aa9b47..6ba9b9bc 100644 --- a/Test/dafny3/Filter.dfy.expect +++ b/Test/dafny3/Filter.dfy.expect @@ -1,2 +1,2 @@ -Dafny program verifier finished with 43 verified, 0 errors +Dafny program verifier finished with 42 verified, 0 errors -- cgit v1.2.3 From cfe05df94a5ccb6025c94bd21b09bfc1240de756 Mon Sep 17 00:00:00 2001 From: Rustan Leino Date: Fri, 2 Oct 2015 18:56:13 -0700 Subject: Made /rewriteFocalPredicates:1 the default --- Source/Dafny/DafnyOptions.cs | 8 ++++---- Test/dafny0/CoinductiveProofs.dfy | 2 +- Test/dafny0/InductivePredicates.dfy | 6 +++--- Test/dafny3/Filter.dfy | 6 +++--- Test/dafny4/NipkowKlein-chapter7.dfy | 12 ++++++------ 5 files changed, 17 insertions(+), 17 deletions(-) (limited to 'Test/dafny3/Filter.dfy') diff --git a/Source/Dafny/DafnyOptions.cs b/Source/Dafny/DafnyOptions.cs index 2d8756d2..b61ba555 100644 --- a/Source/Dafny/DafnyOptions.cs +++ b/Source/Dafny/DafnyOptions.cs @@ -66,7 +66,7 @@ namespace Microsoft.Dafny public bool CountVerificationErrors = true; public bool Optimize = false; public bool AutoTriggers = false; - public bool RewriteFocalPredicates = false; + public bool RewriteFocalPredicates = true; public bool PrintTooltips = false; public bool PrintStats = false; public bool PrintFunctionCallGraph = false; @@ -379,9 +379,9 @@ namespace Microsoft.Dafny 1 - Add a {:trigger} to each user-level quantifier. Existing annotations are preserved. /rewriteFocalPredicates: - 0 (default) - Don't rewrite predicates in the body of prefix lemmas. - 1 - In the body of prefix lemmas, rewrite any use of a focal predicate - P to P#[_k-1]. + 0 - Don't rewrite predicates in the body of prefix lemmas. + 1 (default) - In the body of prefix lemmas, rewrite any use of a focal predicate + P to P#[_k-1]. /optimize Produce optimized C# code, meaning: - selects optimized C# prelude by passing /define:DAFNY_USE_SYSTEM_COLLECTIONS_IMMUTABLE to csc.exe (requires diff --git a/Test/dafny0/CoinductiveProofs.dfy b/Test/dafny0/CoinductiveProofs.dfy index 0dce8af9..c8bb45c7 100644 --- a/Test/dafny0/CoinductiveProofs.dfy +++ b/Test/dafny0/CoinductiveProofs.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" /rewriteFocalPredicates:1 "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" // RUN: %diff "%s.expect" "%t" codatatype Stream = Cons(head: T, tail: Stream) diff --git a/Test/dafny0/InductivePredicates.dfy b/Test/dafny0/InductivePredicates.dfy index 8d05af11..e9aa7604 100644 --- a/Test/dafny0/InductivePredicates.dfy +++ b/Test/dafny0/InductivePredicates.dfy @@ -58,7 +58,7 @@ inductive lemma {:induction false} IL_EvenBetter(x: natinf) if { case x.N? && x.n == 0 => // trivial - case x.N? && 2 <= x.n && Even(N(x.n - 2)) => + case x.N? && 2 <= x.n && Even(N(x.n - 2)) => // syntactic rewrite makes this like in IL IL_EvenBetter(N(x.n - 2)); } } @@ -142,7 +142,7 @@ module Alt { } } - inductive lemma {:induction false} MyLemma_NiceButNotFast(x: natinf) + inductive lemma {:induction false} MyLemma_Nicer(x: natinf) // same as MyLemma_NotSoNice but relying on syntactic rewrites requires Even(x) ensures x.N? && x.n % 2 == 0 { @@ -151,7 +151,7 @@ module Alt { // trivial case exists y :: x == S(S(y)) && Even(y) => var y :| x == S(S(y)) && Even(y); - MyLemma_NiceButNotFast(y); + MyLemma_Nicer(y); assert x.n == y.n + 2; } } diff --git a/Test/dafny3/Filter.dfy b/Test/dafny3/Filter.dfy index 6f541396..4f8b35ec 100644 --- a/Test/dafny3/Filter.dfy +++ b/Test/dafny3/Filter.dfy @@ -157,11 +157,11 @@ colemma Filter_IsSubStream(s: Stream, P: Predicate) calc { true; == { Filter_IsSubStream(s.tail, P); } // induction hypothesis - IsSubStream#[_k-1](Filter(s.tail, P), s.tail); + IsSubStream(Filter(s.tail, P), s.tail); == // { assert Filter(s.tail, h) == Filter(s, h).tail; } - IsSubStream#[_k-1](Filter(s, P).tail, s.tail); + IsSubStream(Filter(s, P).tail, s.tail); ==> { Lemma_TailSubStreamK(Filter(s, P).tail, s, _k-1); } - IsSubStream#[_k-1](Filter(s, P).tail, s); + IsSubStream(Filter(s, P).tail, s); } calc { In(Filter(s, P).head, s); diff --git a/Test/dafny4/NipkowKlein-chapter7.dfy b/Test/dafny4/NipkowKlein-chapter7.dfy index aae94550..0c089895 100644 --- a/Test/dafny4/NipkowKlein-chapter7.dfy +++ b/Test/dafny4/NipkowKlein-chapter7.dfy @@ -162,8 +162,8 @@ inductive lemma SmallStep_is_deterministic(cs: (com, state), cs': (com, state), case Seq(c0, c1) => if c0 == SKIP { } else { - var c0' :| cs'.0 == Seq(c0', c1) && small_step#[_k-1](c0, cs.1, c0', cs'.1); - var c0'' :| cs''.0 == Seq(c0'', c1) && small_step#[_k-1](c0, cs.1, c0'', cs''.1); + var c0' :| cs'.0 == Seq(c0', c1) && small_step(c0, cs.1, c0', cs'.1); + var c0'' :| cs''.0 == Seq(c0'', c1) && small_step(c0, cs.1, c0'', cs''.1); SmallStep_is_deterministic((c0, cs.1), (c0', cs'.1), (c0'', cs''.1)); } case If(b, thn, els) => @@ -200,7 +200,7 @@ inductive lemma BigStep_implies_SmallStepStar(c: com, s: state, t: state) case Assign(x, a) => assert small_step_star(SKIP, t, SKIP, t); case Seq(c0, c1) => - var s' :| big_step#[_k-1](c0, s, s') && big_step#[_k-1](c1, s', t); + var s' :| big_step(c0, s, s') && big_step(c1, s', t); calc <== { small_step_star(c, s, SKIP, t); { star_transitive(Seq(c0, c1), s, Seq(SKIP, c1), s', SKIP, t); } @@ -226,7 +226,7 @@ inductive lemma BigStep_implies_SmallStepStar(c: com, s: state, t: state) true; } } else { - var s' :| big_step#[_k-1](body, s, s') && big_step#[_k-1](While(b, body), s', t); + var s' :| big_step(body, s, s') && big_step(While(b, body), s', t); calc <== { small_step_star(c, s, SKIP, t); { assert small_step(c, s, If(b, Seq(body, While(b, body)), SKIP), s); } @@ -253,7 +253,7 @@ inductive lemma lemma_7_13(c0: com, s0: state, c: com, t: state, c1: com) { if c0 == c && s0 == t { } else { - var c', s' :| small_step(c0, s0, c', s') && small_step_star#[_k-1](c', s', c, t); + var c', s' :| small_step(c0, s0, c', s') && small_step_star(c', s', c, t); lemma_7_13(c', s', c, t, c1); } } @@ -264,7 +264,7 @@ inductive lemma SmallStepStar_implies_BigStep(c: com, s: state, t: state) { if c == SKIP && s == t { } else { - var c', s' :| small_step(c, s, c', s') && small_step_star#[_k-1](c', s', SKIP, t); + var c', s' :| small_step(c, s, c', s') && small_step_star(c', s', SKIP, t); SmallStep_plus_BigStep(c, s, c', s', t); } } -- cgit v1.2.3 From 91cee1c2028f9ad995df863f2a4568d95f4ea1a8 Mon Sep 17 00:00:00 2001 From: qunyanm Date: Mon, 28 Mar 2016 12:02:37 -0700 Subject: Make /autoTriggers:1 to be default. Add /autoTriggers:0 to tests that requires it. Don't use pretty warning signs since we can't diff them correctly in the test output from the test run. --- Source/Dafny/DafnyOptions.cs | 6 ++-- Source/DafnyServer/Utilities.cs | 2 +- Test/VSI-Benchmarks/b8.dfy | 2 +- Test/VerifyThis2015/Problem3.dfy | 2 +- Test/cloudmake/CloudMake-CachedBuilds.dfy | 2 +- Test/cloudmake/CloudMake-ConsistentBuilds.dfy | 2 +- Test/cloudmake/CloudMake-ParallelBuilds.dfy | 2 +- Test/dafny0/Basics.dfy | 2 +- Test/dafny0/Calculations.dfy | 2 +- Test/dafny0/Compilation.dfy | 2 +- Test/dafny0/ForallCompilation.dfy | 2 +- Test/dafny0/Fuel.dfy | 2 +- Test/dafny0/LetExpr.dfy | 2 +- Test/dafny0/LetExpr.dfy.expect | 1 + Test/dafny0/LhsDuplicates.dfy | 2 +- Test/dafny0/Parallel.dfy | 2 +- Test/dafny0/SmallTests.dfy.expect | 1 + Test/dafny1/MoreInduction.dfy | 2 +- Test/dafny1/SchorrWaite-stages.dfy | 2 +- Test/dafny1/SchorrWaite.dfy | 2 +- Test/dafny1/Substitution.dfy | 2 +- Test/dafny1/UltraFilter.dfy | 2 +- Test/dafny2/SnapshotableTrees.dfy | 2 +- Test/dafny3/Filter.dfy | 2 +- Test/dafny4/GHC-MergeSort.dfy | 2 +- Test/dafny4/NumberRepresentations.dfy | 2 +- Test/dafny4/Primes.dfy | 2 +- Test/server/simple-session.transcript.expect | 41 +++++++++++++++++++++++++++ Test/vstte2012/BreadthFirstSearch.dfy | 2 +- 29 files changed, 71 insertions(+), 28 deletions(-) (limited to 'Test/dafny3/Filter.dfy') diff --git a/Source/Dafny/DafnyOptions.cs b/Source/Dafny/DafnyOptions.cs index f3b38a84..607090eb 100644 --- a/Source/Dafny/DafnyOptions.cs +++ b/Source/Dafny/DafnyOptions.cs @@ -66,7 +66,7 @@ namespace Microsoft.Dafny public bool AllowGlobals = false; public bool CountVerificationErrors = true; public bool Optimize = false; - public bool AutoTriggers = false; + public bool AutoTriggers = true; public bool RewriteFocalPredicates = true; public bool PrintTooltips = false; public bool PrintStats = false; @@ -386,8 +386,8 @@ namespace Microsoft.Dafny 1 (default) - If preprocessing succeeds, set exit code to the number of verification errors. /autoTriggers: - 0 (default) - Do not generate {:trigger} annotations for user-level quantifiers. - 1 - Add a {:trigger} to each user-level quantifier. Existing + 0 - Do not generate {:trigger} annotations for user-level quantifiers. + 1 (default) - Add a {:trigger} to each user-level quantifier. Existing annotations are preserved. /rewriteFocalPredicates: 0 - Don't rewrite predicates in the body of prefix lemmas. diff --git a/Source/DafnyServer/Utilities.cs b/Source/DafnyServer/Utilities.cs index 30d779e7..48bea01a 100644 --- a/Source/DafnyServer/Utilities.cs +++ b/Source/DafnyServer/Utilities.cs @@ -51,7 +51,7 @@ namespace Microsoft.Dafny { DafnyOptions.O.VerifySnapshots = 2; // Use caching DafnyOptions.O.VcsCores = Math.Max(1, System.Environment.ProcessorCount / 2); // Don't use too many cores DafnyOptions.O.PrintTooltips = true; // Dump tooptips (ErrorLevel.Info) to stdout - DafnyOptions.O.UnicodeOutput = true; // Use pretty warning signs + //DafnyOptions.O.UnicodeOutput = true; // Use pretty warning signs DafnyOptions.O.TraceProofObligations = true; // Show which method is being verified, but don't show duration of verification } else { throw new ServerException("Invalid command line options"); diff --git a/Test/VSI-Benchmarks/b8.dfy b/Test/VSI-Benchmarks/b8.dfy index ea1911fe..a44ff5c3 100644 --- a/Test/VSI-Benchmarks/b8.dfy +++ b/Test/VSI-Benchmarks/b8.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 "%s" > "%t" +// RUN: %dafny /compile:0 /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // Benchmark 8 diff --git a/Test/VerifyThis2015/Problem3.dfy b/Test/VerifyThis2015/Problem3.dfy index 21bdd4ed..60506a33 100644 --- a/Test/VerifyThis2015/Problem3.dfy +++ b/Test/VerifyThis2015/Problem3.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:3 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:3 /print:"%t.print" /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // Rustan Leino diff --git a/Test/cloudmake/CloudMake-CachedBuilds.dfy b/Test/cloudmake/CloudMake-CachedBuilds.dfy index 9e1b511e..5f16da90 100644 --- a/Test/cloudmake/CloudMake-CachedBuilds.dfy +++ b/Test/cloudmake/CloudMake-CachedBuilds.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // This module proves the correctness of the algorithms. It leaves a number of things undefined. diff --git a/Test/cloudmake/CloudMake-ConsistentBuilds.dfy b/Test/cloudmake/CloudMake-ConsistentBuilds.dfy index 6d86607b..c2fa4205 100644 --- a/Test/cloudmake/CloudMake-ConsistentBuilds.dfy +++ b/Test/cloudmake/CloudMake-ConsistentBuilds.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" /******* State *******/ diff --git a/Test/cloudmake/CloudMake-ParallelBuilds.dfy b/Test/cloudmake/CloudMake-ParallelBuilds.dfy index 07cae317..5cc70994 100644 --- a/Test/cloudmake/CloudMake-ParallelBuilds.dfy +++ b/Test/cloudmake/CloudMake-ParallelBuilds.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // This module proves the correctness of the algorithms. It leaves a number of things undefined. diff --git a/Test/dafny0/Basics.dfy b/Test/dafny0/Basics.dfy index 89b0f02a..7b8b632b 100644 --- a/Test/dafny0/Basics.dfy +++ b/Test/dafny0/Basics.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" class Global { diff --git a/Test/dafny0/Calculations.dfy b/Test/dafny0/Calculations.dfy index a7c8e06c..eb4ff1b9 100644 --- a/Test/dafny0/Calculations.dfy +++ b/Test/dafny0/Calculations.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint.dfy" "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint.dfy" /autoTriggers:0 "%s" > "%t" // RUN: %dafny /noVerify /compile:0 "%t.dprint.dfy" >> "%t" // RUN: %diff "%s.expect" "%t" diff --git a/Test/dafny0/Compilation.dfy b/Test/dafny0/Compilation.dfy index 7a443e47..213ace54 100644 --- a/Test/dafny0/Compilation.dfy +++ b/Test/dafny0/Compilation.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:3 "%s" > "%t" +// RUN: %dafny /compile:3 /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // The tests in this file are designed to run through the compiler. They contain diff --git a/Test/dafny0/ForallCompilation.dfy b/Test/dafny0/ForallCompilation.dfy index c812983a..4d89f70d 100644 --- a/Test/dafny0/ForallCompilation.dfy +++ b/Test/dafny0/ForallCompilation.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:3 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:3 /print:"%t.print" /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" method Main() { diff --git a/Test/dafny0/Fuel.dfy b/Test/dafny0/Fuel.dfy index 6347e134..a768db02 100644 --- a/Test/dafny0/Fuel.dfy +++ b/Test/dafny0/Fuel.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" module TestModule1 { diff --git a/Test/dafny0/LetExpr.dfy b/Test/dafny0/LetExpr.dfy index 000fce53..6a0ca66b 100644 --- a/Test/dafny0/LetExpr.dfy +++ b/Test/dafny0/LetExpr.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint.dfy" "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint.dfy" /autoTriggers:0 "%s" > "%t" // RUN: %dafny /noVerify /compile:0 "%t.dprint.dfy" >> "%t" // RUN: %diff "%s.expect" "%t" diff --git a/Test/dafny0/LetExpr.dfy.expect b/Test/dafny0/LetExpr.dfy.expect index f0f51274..8f365da3 100644 --- a/Test/dafny0/LetExpr.dfy.expect +++ b/Test/dafny0/LetExpr.dfy.expect @@ -35,5 +35,6 @@ Execution trace: (0,0): anon10_Then Dafny program verifier finished with 39 verified, 9 errors +LetExpr.dfy.tmp.dprint.dfy(162,2): Warning: /!\ No terms found to trigger on. Dafny program verifier finished with 0 verified, 0 errors diff --git a/Test/dafny0/LhsDuplicates.dfy b/Test/dafny0/LhsDuplicates.dfy index 6a84c5a5..8a57f6ce 100644 --- a/Test/dafny0/LhsDuplicates.dfy +++ b/Test/dafny0/LhsDuplicates.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" class MyClass { diff --git a/Test/dafny0/Parallel.dfy b/Test/dafny0/Parallel.dfy index 93a16475..00a1514c 100644 --- a/Test/dafny0/Parallel.dfy +++ b/Test/dafny0/Parallel.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" class C { diff --git a/Test/dafny0/SmallTests.dfy.expect b/Test/dafny0/SmallTests.dfy.expect index 6161c3dd..746e978a 100644 --- a/Test/dafny0/SmallTests.dfy.expect +++ b/Test/dafny0/SmallTests.dfy.expect @@ -197,5 +197,6 @@ Execution trace: (0,0): anon0 Dafny program verifier finished with 104 verified, 35 errors +SmallTests.dfy.tmp.dprint.dfy(369,4): Warning: /!\ No trigger covering all quantified variables found. Dafny program verifier finished with 0 verified, 0 errors diff --git a/Test/dafny1/MoreInduction.dfy b/Test/dafny1/MoreInduction.dfy index bd654db5..2b5187a4 100644 --- a/Test/dafny1/MoreInduction.dfy +++ b/Test/dafny1/MoreInduction.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" datatype List = Nil | Cons(Node, List) diff --git a/Test/dafny1/SchorrWaite-stages.dfy b/Test/dafny1/SchorrWaite-stages.dfy index 0eaed68c..a6e5e3aa 100644 --- a/Test/dafny1/SchorrWaite-stages.dfy +++ b/Test/dafny1/SchorrWaite-stages.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // Schorr-Waite algorithms, written and verified in Dafny. diff --git a/Test/dafny1/SchorrWaite.dfy b/Test/dafny1/SchorrWaite.dfy index 50210eb1..b0877f9f 100644 --- a/Test/dafny1/SchorrWaite.dfy +++ b/Test/dafny1/SchorrWaite.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // Rustan Leino diff --git a/Test/dafny1/Substitution.dfy b/Test/dafny1/Substitution.dfy index da64d004..b9c83aff 100644 --- a/Test/dafny1/Substitution.dfy +++ b/Test/dafny1/Substitution.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" datatype List = Nil | Cons(Expr, List) diff --git a/Test/dafny1/UltraFilter.dfy b/Test/dafny1/UltraFilter.dfy index a32e6e0b..7ac4e749 100644 --- a/Test/dafny1/UltraFilter.dfy +++ b/Test/dafny1/UltraFilter.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // ultra filter diff --git a/Test/dafny2/SnapshotableTrees.dfy b/Test/dafny2/SnapshotableTrees.dfy index 2bdfb83b..033c5db0 100644 --- a/Test/dafny2/SnapshotableTrees.dfy +++ b/Test/dafny2/SnapshotableTrees.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:2 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:2 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // Rustan Leino, September 2011. diff --git a/Test/dafny3/Filter.dfy b/Test/dafny3/Filter.dfy index 4f8b35ec..7473a580 100644 --- a/Test/dafny3/Filter.dfy +++ b/Test/dafny3/Filter.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" codatatype Stream = Cons(head: T, tail: Stream) diff --git a/Test/dafny4/GHC-MergeSort.dfy b/Test/dafny4/GHC-MergeSort.dfy index 976b8a27..24903d87 100644 --- a/Test/dafny4/GHC-MergeSort.dfy +++ b/Test/dafny4/GHC-MergeSort.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // Rustan Leino diff --git a/Test/dafny4/NumberRepresentations.dfy b/Test/dafny4/NumberRepresentations.dfy index 0d6cffa1..c15f4987 100644 --- a/Test/dafny4/NumberRepresentations.dfy +++ b/Test/dafny4/NumberRepresentations.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" // We consider a number representation that consists of a sequence of digits. The least diff --git a/Test/dafny4/Primes.dfy b/Test/dafny4/Primes.dfy index fd64b45e..0c2a64dd 100644 --- a/Test/dafny4/Primes.dfy +++ b/Test/dafny4/Primes.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" predicate IsPrime(n: int) diff --git a/Test/server/simple-session.transcript.expect b/Test/server/simple-session.transcript.expect index 1aadca7f..a5f841bc 100644 --- a/Test/server/simple-session.transcript.expect +++ b/Test/server/simple-session.transcript.expect @@ -346,6 +346,7 @@ transcript(10,27): Error: invalid UnaryExpression Verification completed successfully! [SUCCESS] [[DAFNY-SERVER: EOM]] transcript(5,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -366,6 +367,7 @@ Execution trace: Verification completed successfully! [SUCCESS] [[DAFNY-SERVER: EOM]] transcript(5,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -383,6 +385,7 @@ Verifying Impl$$_module.__default.M_k ... Verification completed successfully! [SUCCESS] [[DAFNY-SERVER: EOM]] transcript(5,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -406,6 +409,7 @@ transcript(12,0): Error: invalid UpdateStmt Verification completed successfully! [SUCCESS] [[DAFNY-SERVER: EOM]] transcript(5,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -423,6 +427,7 @@ Verifying Impl$$_module.__default.M_k ... Verification completed successfully! [SUCCESS] [[DAFNY-SERVER: EOM]] transcript(5,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -498,6 +503,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -538,6 +547,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -584,6 +597,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -638,6 +655,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -685,6 +706,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -729,6 +754,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -796,6 +825,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -861,6 +894,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... @@ -905,6 +942,10 @@ transcript(5,0): Warning: module-level methods are always non-instance, so the ' transcript(15,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(24,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here transcript(33,0): Warning: module-level methods are always non-instance, so the 'static' keyword is not allowed here +transcript(10,9): Warning: /!\ No terms found to trigger on. +transcript(20,9): Warning: /!\ No terms found to trigger on. +transcript(29,9): Warning: /!\ No terms found to trigger on. +transcript(38,9): Warning: /!\ No terms found to trigger on. Verifying CheckWellformed$$_module.__default.A ... Retrieving cached verification result for implementation CheckWellformed$$_module.__default.A... diff --git a/Test/vstte2012/BreadthFirstSearch.dfy b/Test/vstte2012/BreadthFirstSearch.dfy index b111a438..375f4a09 100644 --- a/Test/vstte2012/BreadthFirstSearch.dfy +++ b/Test/vstte2012/BreadthFirstSearch.dfy @@ -1,4 +1,4 @@ -// RUN: %dafny /compile:0 /dprint:"%t.dprint" /vcsMaxKeepGoingSplits:10 "%s" > "%t" +// RUN: %dafny /compile:0 /dprint:"%t.dprint" /vcsMaxKeepGoingSplits:10 /autoTriggers:0 "%s" > "%t" // RUN: %diff "%s.expect" "%t" class BreadthFirstSearch -- cgit v1.2.3