private void updateLiteralRuleAssociationList_removeRule(final Rule rule) throws TheoryException {
		try {
			for (Literal literal : rule.getLiteralList()) {
				// for (Literal l : rule.getLiteralList()) {
				// Literal literal=l instanceof LiteralVariable ? DomUtilities.getLiteral(l):l;

				Map<String, Rule> ruleList = literalRuleAssoList.get(literal);
				if (null == ruleList) {
					System.out.println("e1, literal=" + literal + "\n" + toString());
					throw new TheoryException("updateLiteralRuleAssociationList_removeRule1: literal [" + literal
							+ "] contains in no rules!!");
				}
				Rule retn = ruleList.remove(rule.getLabel());
				if (null == retn) {
					System.out.println("e2, literal=" + literal + ": ruleLabel=" + rule.getLabel() + "\nruleList=" + ruleList + "\n"
							+ toString());
					throw new TheoryException(ErrorMessage.RULE_UNRECOGNIZED_RULE_ID, "updateLiteralRuleAssociationList_removeRule2:"
							+ rule.toString(), new Object[] { rule.getLabel() });
				}
				if (ruleList.size() == 0) {
					literalRuleAssoList.remove(literal);

					// literal variable and boolean operation handling
					if (literal instanceof LiteralVariable) {
						LiteralVariable lv = (LiteralVariable) literal;
						if (lv.isLiteralVariable()) literalVariablesInRules.remove(lv);
						else if (lv.isLiteralBooleanFunction()) literalBooleanFunctionsInRules.remove(lv);
					}
				}
			}
		} catch (Exception e) {
			System.err.println(rule);
			throw new TheoryException("exception throw while updating literal-rule association list:" + rule.toString(), e);
		}
	}