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 StateRelationData( IDictionary <Variable, LemmaDecl> varToLookupLemma, IList <Variable> varsMapped, TermIdent stateRel, TermIdent stateRelList, string allLemmasName ) { VarToLookupLemma = varToLookupLemma; VarsMapped = varsMapped; StateRel = stateRel; StateRelList = stateRelList; AllLemmasName = allLemmasName; }
public static Term NonEmptyTypesAssumption(Term absValTyMap) { Identifier bvType = new SimpleIdentifier("t"); Term bvTypeTerm = new TermIdent(bvType); Identifier bvValue = new SimpleIdentifier("v"); Term bvValueTerm = new TermIdent(bvValue); return(TermQuantifier.MetaAll(new List <Identifier> { bvType }, null, TermBinary.MetaImplies(IsaBoogieTerm.IsClosedType(bvTypeTerm), TermQuantifier.Exists(new List <Identifier> { bvValue }, null, TermBinary.Eq(IsaBoogieTerm.TypeToVal(absValTyMap, bvValueTerm), bvTypeTerm) )))); }
public static IList <Tuple <TermIdent, TypeIsa> > GlobalFixedVariables( BoogieContextIsa boogieContext, IEnumerable <Function> functions, IEnumerable <Variable> variables, TermIdent normalInitState, IDictionary <Function, TermIdent> funToInterpMapping, IsaUniqueNamer uniqueNamer) { var absValType = new VarType("a"); var pureTyIsaTransformer = LemmaHelper.ConretePureTyIsaTransformer(absValType); var result = new List <Tuple <TermIdent, TypeIsa> > { Tuple.Create((TermIdent)boogieContext.absValTyMap, IsaBoogieType.AbstractValueTyFunType(absValType)), Tuple.Create((TermIdent)boogieContext.varContext, IsaBoogieType.VarContextType()), Tuple.Create((TermIdent)boogieContext.funContext, IsaBoogieType.FunInterpType(absValType)), Tuple.Create(normalInitState, IsaBoogieType.NormalStateType(absValType)) }; foreach (var kv in funToInterpMapping) { result.Add(Tuple.Create(kv.Value, IsaBoogieType.BoogieFuncInterpType(absValType))); var boogieFun = kv.Key; //get untyped version, maybe should precompute this somewhere and re-use or get the data from the VC TypeUtil.SplitTypeParams(boogieFun.TypeParameters, boogieFun.InParams.Select(v => v.TypedIdent.Type), out var explicitTypeVars, out _); var typeIsa = pureTyIsaTransformer.Translate(new Function(null, boogieFun.Name, explicitTypeVars, boogieFun.InParams, boogieFun.OutParams[0])); result.Add(Tuple.Create( IsaCommonTerms.TermIdentFromName(uniqueNamer.GetName(boogieFun, boogieFun.Name)), typeIsa)); } foreach (var v in variables) { var typeIsa = pureTyIsaTransformer.Translate(v); result.Add(Tuple.Create(IsaCommonTerms.TermIdentFromName(uniqueNamer.GetName(v, v.Name)), typeIsa)); } return(result); }
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 }); }
public override string VisitTermIdent(TermIdent t) { return(GetStringFromIdentifier(t.Id)); }