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); } }