Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        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 );
          }
        }