public PassificationLemmaManager(
            CFGRepr cfg,
            IDictionary <Block, Block> origToPassiveBlock,
            IProgramAccessor programAccessor,
            IProgramAccessor passiveProgramAccessor,
            Tuple <string, string> varContextNonPassivePassive,
            StateRelationData oldStateRelationData,
            PassiveRelationGen relationGen,
            IVariableTranslationFactory varTranslationFactory,
            IVariableTranslationFactory passiveTranslationFactory)
        {
            this.cfg = cfg;
            this.origToPassiveBlock     = origToPassiveBlock;
            this.programAccessor        = programAccessor;
            this.passiveProgramAccessor = passiveProgramAccessor;
            _oldStateRelationData       = oldStateRelationData;
            _relationGen          = relationGen;
            initState             = IsaBoogieTerm.Normal(normalInitState);
            varTranslation        = varTranslationFactory.CreateTranslation().VarTranslation;
            passiveVarTranslation = passiveTranslationFactory.CreateTranslation().VarTranslation;
            //separate unique namer for function interpretations (since they already have a name in uniqueNamer): possible clashes

            boogieContext = new BoogieContextIsa(
                IsaCommonTerms.TermIdentFromName("A"),
                IsaCommonTerms.TermIdentFromName("M"),
                IsaCommonTerms.TermIdentFromName(varContextNonPassivePassive.Item1),
                IsaCommonTerms.TermIdentFromName("\\<Gamma>"),
                IsaCommonTerms.TermIdentFromName("\\<Omega>")
                );
            passiveVarContext = IsaCommonTerms.TermIdentFromName(varContextNonPassivePassive.Item2);
        }
        public IEnumerable <OuterDecl> EndToEndProof(
            string entryCfgLemma,
            string boogieToVcLemma,
            Term vcAssm,
            IProgramAccessor programAccessor,
            IProgramAccessor passiveProgramAccessor,
            Tuple <string, string> varContextNonPassivePassive,
            StateRelationData oldRelationData,
            CFGRepr cfg,
            IEnumerable <Variable> liveEntryVars,
            IVariableTranslation <Variable> varTranslation)
        {
            this.entryCfgLemma          = entryCfgLemma;
            this.boogieToVcLemma        = boogieToVcLemma;
            this.vcAssm                 = vcAssm;
            this.programAccessor        = programAccessor;
            this.passiveProgramAccessor = passiveProgramAccessor;
            boogieContext               = new BoogieContextIsa(
                IsaCommonTerms.TermIdentFromName("A"),
                IsaCommonTerms.TermIdentFromName("M"),
                IsaCommonTerms.TermIdentFromName(varContextNonPassivePassive.Item1),
                IsaCommonTerms.TermIdentFromName("\\<Gamma>"),
                IsaCommonTerms.EmptyList
                );
            passiveVarContext    = IsaCommonTerms.TermIdentFromName(varContextNonPassivePassive.Item2);
            this.oldRelationData = oldRelationData;
            this.cfg             = cfg;
            this.liveEntryVars   = liveEntryVars;
            this.varTranslation  = varTranslation;

            var locale = new LocaleDecl("glue_proof",
                                        Context(),
                                        GenerateLemma()
                                        );

            return(new List <OuterDecl>
            {
                locale
            });
        }