summaryrefslogtreecommitdiff
path: root/Source/Core/AbsyQuant.cs
diff options
context:
space:
mode:
authorGravatar Unknown <Alex@Mehldau.inf.ethz.ch>2014-03-03 13:56:55 +0100
committerGravatar Unknown <Alex@Mehldau.inf.ethz.ch>2014-03-03 13:56:55 +0100
commit2b2d7c7f4ec6226c54ad664ce390fefdaf8fecaf (patch)
tree76e38254c3e129022d0454ad0042803b946583ef /Source/Core/AbsyQuant.cs
parent7a5fa3b224d6cf8015bd9792f7bff5074f82932d (diff)
disabled quantifier merging, except when no triggers are provided (as discussed with Rustan)
Diffstat (limited to 'Source/Core/AbsyQuant.cs')
-rw-r--r--Source/Core/AbsyQuant.cs8
1 files changed, 5 insertions, 3 deletions
diff --git a/Source/Core/AbsyQuant.cs b/Source/Core/AbsyQuant.cs
index 63474c69..10a13511 100644
--- a/Source/Core/AbsyQuant.cs
+++ b/Source/Core/AbsyQuant.cs
@@ -579,15 +579,17 @@ namespace Microsoft.Boogie {
}
}
- // if the user says ( forall x :: forall y :: { f(x,y) } ... ) we transform it to
- // (forall x, y :: { f(x,y) } ... ) otherwise the prover ignores the trigger
+ // if the user says ( forall x :: forall y :: ... ) and specifies *no* triggers, we transform it to
+ // (forall x, y :: ... ) which may help the prover to pick trigger terms
+ //
+ // (Note: there used to be a different criterion here, which allowed merging when triggers were specified, which could cause prover errors due to resulting unbound variables in the triggers)
private void MergeAdjecentQuantifier() {
QuantifierExpr qbody = Body as QuantifierExpr;
if (!(qbody != null && (qbody is ForallExpr) == (this is ForallExpr) && Triggers == null)) {
return;
}
qbody.MergeAdjecentQuantifier();
- if (qbody.Triggers == null) {
+ if (this.Triggers != null || qbody.Triggers != null) {
return;
}
Body = qbody.Body;