示例#1
0
            private void ComputeTransitionRelationExpr()
            {
                CalculatePathExpression();
                AddBoundVariablesForRemainingVars();
                ReplacePreOrPostStateVars();
                TransitionRelationExpr = Expr.And(pathExprs);
                if (trc.IsJoint)
                {
                    ComputeWitnessedTransitionRelationExprs();
                    if (witnessedTransitionRelations.Count > 0)
                    {
                        TransitionRelationExpr = Expr.Or(witnessedTransitionRelations);
                    }
                }

                if (existsVarMap.Any())
                {
                    Trigger trigger = null;
                    if (trc.IsJoint)
                    {
                        var exprs = new List <Expr>();
                        foreach (var v in existsVarMap.Keys)
                        {
                            var orig = copyToOriginalVar[v];
                            if (v == varCopies[orig].First() && trc.triggers.ContainsKey(orig))
                            {
                                var f = trc.triggers[orig];
                                exprs.Add(ExprHelper.FunctionCall(f, Expr.Ident(existsVarMap[v])));
                            }
                        }

                        if (exprs.Count == existsVarMap.Count)
                        {
                            trigger = new Trigger(Token.NoToken, true, exprs);
                        }
                    }

                    TransitionRelationExpr = ExprHelper.ExistsExpr(
                        existsVarMap.Values.ToList <Variable>(), trigger, TransitionRelationExpr);
                }
            }