public VCExpr LetVC(Block startBlock, Dictionary <int, Absy> label2absy, ProverContext proverCtxt, out int assertionCount) { Contract.Requires(startBlock != null); Contract.Requires(label2absy != null); Contract.Requires(proverCtxt != null); Contract.Ensures(Contract.Result <VCExpr>() != null); Hashtable /*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/ (); List <VCExprLetBinding> bindings = new List <VCExprLetBinding>(); VCExpr startCorrect = LetVC(startBlock, label2absy, blockVariables, bindings, proverCtxt, out assertionCount); if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) { return(proverCtxt.ExprGen.Let(bindings, proverCtxt.ExprGen.Not(startCorrect))); } else { return(proverCtxt.ExprGen.Let(bindings, startCorrect)); } }
public VCExpr LetVC(Block startBlock, Dictionary<int, Absy> label2absy, ProverContext proverCtxt, out int assertionCount) { Contract.Requires(startBlock != null); Contract.Requires(label2absy != null); Contract.Requires(proverCtxt != null); Contract.Ensures(Contract.Result<VCExpr>() != null); Hashtable/*<Block, LetVariable!>*/ blockVariables = new Hashtable/*<Block, LetVariable!!>*/(); List<VCExprLetBinding> bindings = new List<VCExprLetBinding>(); VCExpr startCorrect = LetVC(startBlock, label2absy, blockVariables, bindings, proverCtxt, out assertionCount); if (CommandLineOptions.Clo.vcVariety == CommandLineOptions.VCVariety.Doomed) { return proverCtxt.ExprGen.Let(bindings, proverCtxt.ExprGen.Not(startCorrect) ); } else { return proverCtxt.ExprGen.Let(bindings, startCorrect ); } }