@Override public void explain(Deduction d, Explanation e) { if (d.getVar() == vars[0]) { e.add(aCause); if (d.getmType() == Deduction.Type.ValRem) { vars[1].explain(VariableState.REM, ((ValueRemoval) d).getVal(), e); vars[1].explain(VariableState.REM, -((ValueRemoval) d).getVal(), e); } else { throw new UnsupportedOperationException( "PropAbsolute only knows how to explain ValueRemovals"); } } else if (d.getVar() == vars[1]) { e.add(aCause); if (d.getmType() == Deduction.Type.ValRem) { vars[0].explain(VariableState.REM, Math.abs(((ValueRemoval) d).getVal()), e); } else { throw new UnsupportedOperationException( "PropAbsolute only knows how to explain ValueRemovals"); } } else { super.explain(d, e); } }