Program: 74468
Project: 74468
Buggy source:
/** 
 * A private function used as a recursive step to generate all premises for enabling transition in .smv file. In variable valueDomain, it specifies that for a particular transition, the set of all possible values to invoke the transition. Thus it is the duty of this recursive step function to generate all possible combinations. The function would try to attach correct premise and update correct new value for the variable set by the transition based on the original value.
 * @param currentPremise Current precondition for the transition. It is not completed unless parameter index == maxIndex.
 * @param index Current depth for the recursive function. It would stop when it reaches maxIndex.
 * @param maxIndex
 * @param keySetArray keySetArray stores all variable names that is used in this transition.
 * @param valueDomain valueDomain specifies for a particular transition, for each variable, the set of all possible values to invoke the transition.
 * @param lValue lValue specifies the variable name that would be set after the transition.
 * @param newVariableValue newVariableValue can have different meanings based on different value of variable operatingSign. When operatingSign is +,-,*,/ it represents the offset. Remember in the set-action, each sub-statement has formats either <i>var = var operatingSign offset</i> or <i>var = rValue</i>. When operatingSign is S or N, it represents the rValue of the system.
 * @param operatingSign
 */
private void _recursiveStepGeneratePremiseAndResultEachTransition(String currentPremise,int index,int maxIndex,String[] keySetArray,HashMap<String,ArrayList<Integer>> valueDomain,String lValue,String newVariableValue,String operatingSign) throws IllegalActionException {
  if (lValue != null) {
    if (index >= maxIndex) {
      VariableTransitionInfo newTransitionInfo=new VariableTransitionInfo();
      newTransitionInfo._preCondition=currentPremise;
      newTransitionInfo._varibleNewValue=newVariableValue;
      LinkedList<VariableTransitionInfo> temp=_variableTransitionInfo.remove(lValue);
      if (temp == null) {
        throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
      }
      temp.add(newTransitionInfo);
      _variableTransitionInfo.put(lValue,temp);
    }
 else {
      if (keySetArray[index].equalsIgnoreCase(lValue)) {
        if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              if (Integer.parseInt(newVariableValue) >= 0) {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      int minimumInBoundary=Integer.parseInt(variableInfo._minValue);
                      for (int j=0; j < (Integer.parseInt(newVariableValue)); j++) {
                        if ((minimumInBoundary + j) > Integer.parseInt(variableInfo._maxValue)) {
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          break;
                        }
                        String updatedVariableValue=String.valueOf(minimumInBoundary + j);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() + (Integer.parseInt(newVariableValue)));
                  if (vList.get(i).intValue() + (Integer.parseInt(newVariableValue)) > Integer.parseInt(((VariableInfo)_variableInfo.get(lValue))._maxValue)) {
                    updatedVariableValue="String_Node_Str";
                  }
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                }
              }
 else {
                if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._maxValue != null) && (variableInfo._minValue != null)) {
                      int maximumInBoundary=Integer.parseInt(variableInfo._maxValue);
                      for (int j=0; j > (Integer.parseInt(newVariableValue)); j--) {
                        if (variableInfo._minValue != null) {
                          if ((maximumInBoundary + j) < Integer.parseInt(variableInfo._minValue)) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                            break;
                          }
                          String updatedVariableValue=String.valueOf(maximumInBoundary + j);
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                        }
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() + (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=(VariableInfo)_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._minValue != null) {
                      if (vList.get(i).intValue() + (Integer.parseInt(newVariableValue)) < Integer.parseInt(variableInfo._minValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                      _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                    }
                  }
                }
              }
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              if (Integer.parseInt(newVariableValue) >= 0) {
                if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  int maximumInBoundary=Integer.parseInt(((VariableInfo)_variableInfo.get(lValue))._maxValue);
                  for (int j=0; j < (Integer.parseInt(newVariableValue)); j++) {
                    VariableInfo variableInfo=_variableInfo.get(lValue);
                    if (variableInfo != null) {
                      if (variableInfo._minValue != null) {
                        if ((maximumInBoundary - j) < Integer.parseInt(variableInfo._minValue)) {
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          break;
                        }
                      }
                    }
                    String updatedVariableValue=String.valueOf(maximumInBoundary - j);
                    _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() - (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._minValue != null) {
                      if (vList.get(i).intValue() - (Integer.parseInt(newVariableValue)) < Integer.parseInt(variableInfo._minValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                      _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                    }
                  }
                }
              }
 else {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      int minimumInBoundary=Integer.parseInt(variableInfo._minValue);
                      for (int j=0; j > (Integer.parseInt(newVariableValue)); j--) {
                        if ((minimumInBoundary - j) < Integer.parseInt(variableInfo._maxValue)) {
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          break;
                        }
                        String updatedVariableValue=String.valueOf(minimumInBoundary - j);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() - (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._maxValue != null) {
                      if (vList.get(i).intValue() - (Integer.parseInt(newVariableValue)) > Integer.parseInt(((VariableInfo)_variableInfo.get(lValue))._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                    }
                  }
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                }
              }
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              if (Integer.parseInt(newVariableValue) > 0) {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._maxValue) >= 0) {
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else {
                        int starter=Integer.parseInt(variableInfo._maxValue) + 1;
                        while (starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) < Integer.parseInt(variableInfo._minValue)) && ((starter + 1) * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._minValue) <= 0) {
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else {
                        int starter=Integer.parseInt(variableInfo._minValue) - 1;
                        while (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) > Integer.parseInt(variableInfo._maxValue)) && ((starter - 1) * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() * (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (vList.get(i).intValue() * (Integer.parseInt(newVariableValue)) < Integer.parseInt(variableInfo._minValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
 else                       if (vList.get(i).intValue() * (Integer.parseInt(newVariableValue)) > Integer.parseInt(variableInfo._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                      _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                    }
                  }
                }
              }
 else               if (Integer.parseInt(newVariableValue) < 0) {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._maxValue) >= 0) {
                        int starter=Integer.parseInt(variableInfo._maxValue) + 1;
                        while (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue)) {
                          String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else                       if (Integer.parseInt(variableInfo._maxValue) < 0) {
                        int starter=Integer.parseInt(variableInfo._maxValue) + 1;
                        while (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) > Integer.parseInt(variableInfo._maxValue)) && ((starter + 1) * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._minValue) <= 0) {
                        int starter=Integer.parseInt(variableInfo._minValue) - 1;
                        while (starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) {
                          String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else                       if (Integer.parseInt(variableInfo._minValue) > 0) {
                        int starter=Integer.parseInt(variableInfo._minValue) - 1;
                        while (starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) < Integer.parseInt(variableInfo._minValue)) && ((starter + 1) * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() - (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._maxValue != null) {
                      if (vList.get(i).intValue() - (Integer.parseInt(newVariableValue)) > Integer.parseInt(variableInfo._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                    }
                  }
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                }
              }
 else {
                String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                if (vList.get(i).intValue() == DOMAIN_LS) {
                  newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                }
 else                 if (vList.get(i).intValue() == DOMAIN_GT) {
                  newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                }
                String updatedVariableValue="String_Node_Str";
                VariableInfo variableInfo=_variableInfo.get(lValue);
                if (variableInfo == null) {
                  throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                }
 else {
                  if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                    if (0 > Integer.parseInt(variableInfo._maxValue)) {
                      updatedVariableValue="String_Node_Str";
                    }
 else                     if (0 < Integer.parseInt(variableInfo._minValue)) {
                      updatedVariableValue="String_Node_Str";
                    }
                    _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                  }
                }
              }
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              String updatedVariableValue=String.valueOf(vList.get(i).intValue() / (Integer.parseInt(newVariableValue)));
              String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
              if (vList.get(i).intValue() == DOMAIN_LS) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
 else               if (vList.get(i).intValue() == DOMAIN_GT) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
              _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              String updatedVariableValue=newVariableValue;
              String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
              if (vList.get(i).intValue() == DOMAIN_LS) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
 else               if (vList.get(i).intValue() == DOMAIN_GT) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
              _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
      }
 else {
        ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
        if ((vList != null) && (vList.size() != 0)) {
          for (int i=0; i < vList.size(); i++) {
            String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
            if (vList.get(i).intValue() == DOMAIN_LS) {
              newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
            }
 else             if (vList.get(i).intValue() == DOMAIN_GT) {
              newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
            }
            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else {
          _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
        }
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * A private function used as a recursive step to generate all premises for enabling transition in .smv file. In variable valueDomain, it specifies that for a particular transition, the set of all possible values to invoke the transition. Thus it is the duty of this recursive step function to generate all possible combinations. The function would try to attach correct premise and update correct new value for the variable set by the transition based on the original value.
 * @param currentPremise Current precondition for the transition. It is not completed unless parameter index == maxIndex.
 * @param index Current depth for the recursive function. It would stop when it reaches maxIndex.
 * @param maxIndex
 * @param keySetArray keySetArray stores all variable names that is used in this transition.
 * @param valueDomain valueDomain specifies for a particular transition, for each variable, the set of all possible values to invoke the transition.
 * @param lValue lValue specifies the variable name that would be set after the transition.
 * @param newVariableValue newVariableValue can have different meanings based on different value of variable operatingSign. When operatingSign is +,-,*,/ it represents the offset. Remember in the set-action, each sub-statement has formats either <i>var = var operatingSign offset</i> or <i>var = rValue</i>. When operatingSign is S or N, it represents the rValue of the system.
 * @param operatingSign
 */
private void _recursiveStepGeneratePremiseAndResultEachTransition(String currentPremise,int index,int maxIndex,String[] keySetArray,HashMap<String,ArrayList<Integer>> valueDomain,String lValue,String newVariableValue,String operatingSign) throws IllegalActionException {
  if (lValue != null) {
    if (index >= maxIndex) {
      VariableTransitionInfo newTransitionInfo=new VariableTransitionInfo();
      newTransitionInfo._preCondition=currentPremise;
      newTransitionInfo._varibleNewValue=newVariableValue;
      LinkedList<VariableTransitionInfo> temp=_variableTransitionInfo.remove(lValue);
      if (temp == null) {
        throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
      }
      temp.add(newTransitionInfo);
      _variableTransitionInfo.put(lValue,temp);
    }
 else {
      if (keySetArray[index].equalsIgnoreCase(lValue)) {
        if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              if (Integer.parseInt(newVariableValue) >= 0) {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      int minimumInBoundary=Integer.parseInt(variableInfo._minValue);
                      for (int j=0; j < (Integer.parseInt(newVariableValue)); j++) {
                        if ((minimumInBoundary + j) > Integer.parseInt(variableInfo._maxValue)) {
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          break;
                        }
                        String updatedVariableValue=String.valueOf(minimumInBoundary + j);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() + (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._maxValue != null) {
                      if (vList.get(i).intValue() + (Integer.parseInt(newVariableValue)) > Integer.parseInt(variableInfo._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                    }
                  }
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                }
              }
 else {
                if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._maxValue != null) && (variableInfo._minValue != null)) {
                      int maximumInBoundary=Integer.parseInt(variableInfo._maxValue);
                      for (int j=0; j > (Integer.parseInt(newVariableValue)); j--) {
                        if (variableInfo._minValue != null) {
                          if ((maximumInBoundary + j) < Integer.parseInt(variableInfo._minValue)) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                            break;
                          }
                          String updatedVariableValue=String.valueOf(maximumInBoundary + j);
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                        }
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() + (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=(VariableInfo)_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._minValue != null) {
                      if (vList.get(i).intValue() + (Integer.parseInt(newVariableValue)) < Integer.parseInt(variableInfo._minValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                      _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                    }
                  }
                }
              }
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              if (Integer.parseInt(newVariableValue) >= 0) {
                if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      int maximumInBoundary=Integer.parseInt(variableInfo._maxValue);
                      for (int j=0; j < (Integer.parseInt(newVariableValue)); j++) {
                        if ((maximumInBoundary - j) < Integer.parseInt(variableInfo._minValue)) {
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          break;
                        }
                        String updatedVariableValue=String.valueOf(maximumInBoundary - j);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() - (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._minValue != null) {
                      if (vList.get(i).intValue() - (Integer.parseInt(newVariableValue)) < Integer.parseInt(variableInfo._minValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                      _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                    }
                  }
                }
              }
 else {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      int minimumInBoundary=Integer.parseInt(variableInfo._minValue);
                      for (int j=0; j > (Integer.parseInt(newVariableValue)); j--) {
                        if ((minimumInBoundary - j) < Integer.parseInt(variableInfo._maxValue)) {
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          break;
                        }
                        String updatedVariableValue=String.valueOf(minimumInBoundary - j);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() - (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._maxValue != null) {
                      if (vList.get(i).intValue() - (Integer.parseInt(newVariableValue)) > Integer.parseInt(variableInfo._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                    }
                  }
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                }
              }
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              if (Integer.parseInt(newVariableValue) > 0) {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._maxValue) >= 0) {
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else {
                        int starter=Integer.parseInt(variableInfo._maxValue) + 1;
                        while (starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) < Integer.parseInt(variableInfo._minValue)) && ((starter + 1) * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._minValue) <= 0) {
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else {
                        int starter=Integer.parseInt(variableInfo._minValue) - 1;
                        while (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) > Integer.parseInt(variableInfo._maxValue)) && ((starter - 1) * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() * (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (vList.get(i).intValue() * (Integer.parseInt(newVariableValue)) < Integer.parseInt(variableInfo._minValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
 else                       if (vList.get(i).intValue() * (Integer.parseInt(newVariableValue)) > Integer.parseInt(variableInfo._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                      _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                    }
                  }
                }
              }
 else               if (Integer.parseInt(newVariableValue) < 0) {
                if (vList.get(i).intValue() == DOMAIN_GT) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._maxValue) >= 0) {
                        int starter=Integer.parseInt(variableInfo._maxValue) + 1;
                        while (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue)) {
                          String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else                       if (Integer.parseInt(variableInfo._maxValue) < 0) {
                        int starter=Integer.parseInt(variableInfo._maxValue) + 1;
                        while (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) > Integer.parseInt(variableInfo._maxValue)) && ((starter + 1) * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else                 if (vList.get(i).intValue() == DOMAIN_LS) {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo == null) {
                    throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                  }
 else {
                    if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                      if (Integer.parseInt(variableInfo._minValue) <= 0) {
                        int starter=Integer.parseInt(variableInfo._minValue) - 1;
                        while (starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) {
                          String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                          _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
 else                       if (Integer.parseInt(variableInfo._minValue) > 0) {
                        int starter=Integer.parseInt(variableInfo._minValue) - 1;
                        while (starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) {
                          if ((starter * Integer.parseInt(newVariableValue) < Integer.parseInt(variableInfo._minValue)) && ((starter + 1) * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                          }
 else                           if ((starter * Integer.parseInt(newVariableValue) <= Integer.parseInt(variableInfo._maxValue)) && (starter * Integer.parseInt(newVariableValue) >= Integer.parseInt(variableInfo._minValue))) {
                            String updatedVariableValue=String.valueOf(starter * Integer.parseInt(newVariableValue));
                            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                          }
                          starter++;
                        }
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                        _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,"String_Node_Str",operatingSign);
                      }
                    }
                  }
                }
 else {
                  String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                  String updatedVariableValue=String.valueOf(vList.get(i).intValue() - (Integer.parseInt(newVariableValue)));
                  VariableInfo variableInfo=_variableInfo.get(lValue);
                  if (variableInfo != null) {
                    if (variableInfo._maxValue != null) {
                      if (vList.get(i).intValue() - (Integer.parseInt(newVariableValue)) > Integer.parseInt(variableInfo._maxValue)) {
                        updatedVariableValue="String_Node_Str";
                      }
                    }
                  }
                  _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                }
              }
 else {
                String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
                if (vList.get(i).intValue() == DOMAIN_LS) {
                  newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                }
 else                 if (vList.get(i).intValue() == DOMAIN_GT) {
                  newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
                }
                String updatedVariableValue="String_Node_Str";
                VariableInfo variableInfo=_variableInfo.get(lValue);
                if (variableInfo == null) {
                  throw new IllegalActionException("String_Node_Str" + lValue + "String_Node_Str");
                }
 else {
                  if ((variableInfo._minValue != null) && (variableInfo._maxValue != null)) {
                    if (0 > Integer.parseInt(variableInfo._maxValue)) {
                      updatedVariableValue="String_Node_Str";
                    }
 else                     if (0 < Integer.parseInt(variableInfo._minValue)) {
                      updatedVariableValue="String_Node_Str";
                    }
                    _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
                  }
                }
              }
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              String updatedVariableValue=String.valueOf(vList.get(i).intValue() / (Integer.parseInt(newVariableValue)));
              String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
              if (vList.get(i).intValue() == DOMAIN_LS) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
 else               if (vList.get(i).intValue() == DOMAIN_GT) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
              _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else         if (operatingSign.equalsIgnoreCase("String_Node_Str")) {
          ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
          if ((vList != null) && (vList.size() != 0)) {
            for (int i=0; i < vList.size(); i++) {
              String updatedVariableValue=newVariableValue;
              String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
              if (vList.get(i).intValue() == DOMAIN_LS) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
 else               if (vList.get(i).intValue() == DOMAIN_GT) {
                newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
              }
              _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,updatedVariableValue,operatingSign);
            }
          }
 else {
            _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
      }
 else {
        ArrayList<Integer> vList=valueDomain.get(keySetArray[index]);
        if ((vList != null) && (vList.size() != 0)) {
          for (int i=0; i < vList.size(); i++) {
            String newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ String.valueOf(vList.get(i).intValue());
            if (vList.get(i).intValue() == DOMAIN_LS) {
              newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
            }
 else             if (vList.get(i).intValue() == DOMAIN_GT) {
              newPremise=currentPremise + "String_Node_Str" + keySetArray[index]+ "String_Node_Str"+ "String_Node_Str";
            }
            _recursiveStepGeneratePremiseAndResultEachTransition(newPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
          }
        }
 else {
          _recursiveStepGeneratePremiseAndResultEachTransition(currentPremise,index + 1,maxIndex,keySetArray,valueDomain,lValue,newVariableValue,operatingSign);
        }
      }
    }
  }
}