internal PathTranslation(TransitionRelationComputation transitionRelationComputer, List <Cmd> cmds) { this.cmds = cmds; this.transitionRelationComputer = transitionRelationComputer; this.frame = transitionRelationComputer.frame; this.first = transitionRelationComputer.first; this.second = transitionRelationComputer.second; allInParams = new HashSet <Variable>(first.InParams); allOutParams = new HashSet <Variable>(first.OutParams); allLocVars = new HashSet <Variable>(first.LocVars); frameIntermediateCopy = new Dictionary <Variable, Variable>(); if (IsJoint()) { allInParams.UnionWith(second.InParams); allOutParams.UnionWith(second.OutParams); allLocVars.UnionWith(second.LocVars); } SetupVarCopies(); IntroduceIntermediateVars(); EliminateIntermediateVariables(); if (IsJoint()) { EliminateWithIntermediateState(); } ComputeTransitionRelationExpr(); }
private TransitionRelationComputation( AtomicActionCopyAdapter first, AtomicActionCopyAdapter second, IEnumerable <Variable> frame, List <WitnessFunction> witnesses, bool ignorePostState, string messagePrefix) { this.first = first; this.second = second; this.frame = new HashSet <Variable>(frame); this.ignorePostState = ignorePostState; this.messagePrefix = messagePrefix; this.checkingContext = new CheckingContext(null); this.pathTranslations = new List <Expr>(); this.globalVarToWitnesses = new Dictionary <GlobalVariable, List <WitnessFunction> >(); if (witnesses != null) { foreach (var witness in witnesses) { var gVar = witness.globalVar; if (!globalVarToWitnesses.ContainsKey(gVar)) { globalVarToWitnesses[gVar] = new List <WitnessFunction>(); } globalVarToWitnesses[gVar].Add(witness); } } }
private static Expr ComputeTransitionRelation( AtomicActionCopyAdapter first, AtomicActionCopyAdapter second, IEnumerable <Variable> frame, List <WitnessFunction> witnesses, bool ignorePostState, string messagePrefix) { var trc = new TransitionRelationComputation(first, second, frame, witnesses, ignorePostState, messagePrefix); trc.EnumeratePaths(); var transitionRelation = Expr.Or(trc.pathTranslations); ResolutionContext rc = new ResolutionContext(null) { StateMode = ResolutionContext.State.Two }; transitionRelation.Resolve(rc); transitionRelation.Typecheck(new TypecheckingContext(null)); return(transitionRelation); }