/// <summary> /// Return AutomataBDD of Interleave process /// </summary> /// <param name="processes">List of AutomataBDD of interleaving processes</param> /// <param name="model"></param> /// <returns></returns> public static AutomataBDD Interleave(List <AutomataBDD> processes, Model model) { AutomataBDD result = AutomataBDD.Interleave(processes, model); ParallelEncodeTick(processes, model, result); // return(result); }
/// <summary> /// Return AutomataBDD of Interleave process /// </summary> /// <param name="processes">List of AutomataBDD of interleaving processes</param> /// <param name="model"></param> /// <returns></returns> public static AutomataBDD Interleave(List <AutomataBDD> processes, Model model) { AutomataBDD result = AutomataBDD.Interleave(processes, model); ParallelEncodeTick(processes, model, result); //Combine simulation relation result.SimulationRel = CUDD.Constant(1); foreach (var automataBdd in processes) { result.SimulationRel = CUDD.Function.And(result.SimulationRel, automataBdd.SimulationRel); } result.SimulationRel = model.AddVarUnchangedConstraint(result.SimulationRel, model.GlobalVarIndex); // return(result); }
public override AutomataBDD EncodeComposition(BDDEncoder encoder) { List <Process> newnewListProcess = Processes; if (Processes == null) { newnewListProcess = IndexedProcessDefinition.GetIndexedProcesses(new Dictionary <string, Expression>()); } List <AutomataBDD> processAutomataBDDs = new List <AutomataBDD>(); foreach (Process process in newnewListProcess) { processAutomataBDDs.Add(process.Encode(encoder)); } // return(AutomataBDD.Interleave(processAutomataBDDs, encoder.model)); }