static ResultCounter VerifyFiles(List <string> fileNames)
        {
            Contract.Requires(cce.NonNullElements(fileNames));

            Program program = GVUtil.IO.ParseBoogieProgram(fileNames, false);

            if (program == null)
            {
                return(ResultCounter.GetNewCounterWithInputError());
            }

            KernelAnalyser.PipelineOutcome oc = KernelAnalyser.ResolveAndTypecheck(program, fileNames[fileNames.Count - 1]);
            if (oc != KernelAnalyser.PipelineOutcome.ResolvedAndTypeChecked)
            {
                return(ResultCounter.GetNewCounterWithInputError());
            }

            KernelAnalyser.EliminateDeadVariables(program);
            KernelAnalyser.Inline(program);
            KernelAnalyser.CheckForQuantifiersAndSpecifyLogic(program);

            CommandLineOptions.Clo.PrintUnstructured = 2;

            if (CommandLineOptions.Clo.LoopUnrollCount != -1)
            {
                Debug.Assert(!CommandLineOptions.Clo.ContractInfer);
                program.UnrollLoops(CommandLineOptions.Clo.LoopUnrollCount, CommandLineOptions.Clo.SoundLoopUnrolling);
            }

            return(VerifyProgram(program));
        }