示例#1
0
            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();
            }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        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);
        }