@Override
  public void applyImpl() throws RuleFailedException {

    var_fields =
        new Variable<java.util.List<it.xsemantics.example.fj.fj.Field>>(
            createCollectionType(createEClassifierType(basicPackage.getField())),
            getAll(
                var_e.getValue().getType().getClassref(),
                "members",
                "superclass",
                it.xsemantics.example.fj.fj.Field.class));

    try {
      equals(length(var_e.getValue().getArgs()), length(var_fields));
    } catch (RuleFailedException e) {
      e.setMessage(
          "argument number "
              + stringRep(length(var_e.getValue().getArgs()))
              + " is not equal to field number "
              + stringRep(length(var_fields)));
      throw e;
    }

    register("forall " + stringRep(length(var_e.getValue().getArgs())));
    try {
      for (var_i.setValue(0);
          var_i.getValue() < length(var_e.getValue().getArgs());
          var_i.setValue(var_i.getValue() + 1)) {

        var_argType =
            new Variable<it.xsemantics.example.fj.fj.Type>(
                createEClassifierType(basicPackage.getType()), null);

        var_fieldType =
            new Variable<it.xsemantics.example.fj.fj.Type>(
                createEClassifierType(basicPackage.getType()), null);

        applyTypeRule(env_G, var_e.getValue().getArgs().get(var_i.getValue()), var_argType);

        applyTypeRule(env_G, var_fields.getValue().get(var_i.getValue()), var_fieldType);

        try {
          applySubtypeRule(env_G, var_argType, var_fieldType);
        } catch (RuleFailedException e) {
          e.setMessage(
              "argument type ("
                  + stringRep(var_argType.getValue())
                  + ") is not a subtype of field type ("
                  + stringRep(var_fieldType.getValue())
                  + ")");
          throw e;
        }
      }
    } catch (Throwable e) {
      registerFailure(e);
      throw new RuleFailedException(
          "failure in checking arguments " + stringRep(var_e.getValue().getArgs()));
    }
    register("end " + "forall " + stringRep(length(var_e.getValue().getArgs())));
    assignment(var_t, var_e.getValue().getType());

    // final check for variable initialization

  }
  @Override
  public void applyImpl() throws RuleFailedException {
    // axiom

    getRight().setValue(var_v.getValue().getParamref().getType());
  }