public override void Initialize(SpecificationBase spec) { //initialize the ModelCheckingOptions base.Initialize(spec); Specification Spec = spec as Specification; ReachableStateCondition = Spec.DeclarationDatabase[ReachableStateLabel]; List<string> varList = Process.GetGlobalVariables(); varList.AddRange(ReachableStateCondition.GetVars()); varList.AddRange(ConstraintCondition.GetVars()); PNValuation GlobalEnv = Spec.SpecValuation.GetVariableChannelClone(varList, Process.GetChannels()) as PNValuation; //Initialize InitialStep InitialStep = new PNConfiguration(Process, Constants.INITIAL_EVENT, null, GlobalEnv, false); MustAbstract = Process.MustBeAbstracted(); if (MustAbstract) { throw new ParsingException( "Process " + StartingProcess + " has infinite states and therefore can not be used to assert reachability with MIN/MAX constraints!", AssertToken); } }
public override void Initialize(SpecificationBase spec) { Specification Spec = spec as Specification; List<string> varList = Process.GetGlobalVariables(); BA.Initialize(Spec.DeclarationDatabase); foreach (KeyValuePair<string, Expression> pair in BA.DeclarationDatabase) { varList.AddRange(pair.Value.GetVars()); } // editted by Tinh Valuation GlobalEnv = Spec.SpecValuation.GetClone(); InitialStep = new PNConfiguration(Process, Constants.INITIAL_EVENT, null, GlobalEnv, false, spec); MustAbstract = Process.MustBeAbstracted(); base.Initialize(spec); }
public override IEnumerable<ConfigurationBase> MakeOneMove() { var nextPNConfigurations = new List<PNConfiguration>(); foreach (var t in Process.Transitions) { if (t.GuardCondition != null) { ExpressionValue v = EvaluatorDenotational.Evaluate(t.GuardCondition, GlobalEnv); if (!(v as BoolConstant).Value) continue; //transition can fire --> move one step var newGlobleEnv = GlobalEnv.GetVariableClone(); EvaluatorDenotational.Evaluate(t.ProgramBlock, newGlobleEnv); var name = t.Event.GetEventName(GlobalEnv); var id = t.Event.GetEventID(GlobalEnv); var newConfiguration = new PNConfiguration(Process, id, name, newGlobleEnv, IsDataOperation); nextPNConfigurations.Add(newConfiguration); } else { //SOME THING WRONG HERE: System.Diagnostics.Debug.WriteLine("Transition don't have guardCondition/fired condition."); } } if (nextPNConfigurations.Count == 0) IsDeadLock = true; return nextPNConfigurations; }
public override void Initialize(SpecificationBase spec) { //initialize the ModelCheckingOptions base.Initialize(spec); Specification Spec = spec as Specification; ReachableStateCondition = Spec.DeclarationDatabase[ReachableStateLabel]; List<string> varList = Process.GetGlobalVariables(); varList.AddRange(ReachableStateCondition.GetVars()); // Valuation GlobalEnv = Spec.SpecValuation.GetVariableChannelClone(varList, Process.GetChannels()); // editted by Tinh Valuation GlobalEnv = Spec.SpecValuation.GetClone(); //Initialize InitialStep // editted by Tinh InitialStep = new PNConfiguration(Process, Constants.INITIAL_EVENT, null, GlobalEnv, false, spec); MustAbstract = Process.MustBeAbstracted(); }