code: @Override
  	public Value caseACompBinaryExp(ACompBinaryExp node, Context ctxt)
  			throws AnalysisException
  	{
  		// breakpoint.check(location, ctxt);
  		node.getLocation().hit(); // Mark as covered
  
  		Value lv = node.getLeft().apply(VdmRuntime.getExpressionEvaluator(), ctxt).deref();
  		Value rv = node.getRight().apply(VdmRuntime.getExpressionEvaluator(), ctxt).deref();
  
  		if (lv instanceof MapValue)
  		{
  			ValueMap lm = null;
  			ValueMap rm = null;
  
  			try
  			{
  				lm = lv.mapValue(ctxt);
  				rm = rv.mapValue(ctxt);
  			} catch (ValueException e)
  			{
  				return VdmRuntimeError.abort(node.getLocation(), e);
  			}
  
  			ValueMap result = new ValueMap();
  
  			for (Value v : rm.keySet())
  			{
  				Value rng = lm.get(rm.get(v));
  
  				if (rng == null)
  				{
  					VdmRuntimeError.abort(node.getLocation(), 4162, "The RHS range is not a subset of the LHS domain", ctxt);
  				}
  
  				Value old = result.put(v, rng);
  
  				if (old != null && !old.equals(rng))
  				{
  					VdmRuntimeError.abort(node.getLocation(), 4005, "Duplicate map keys have different values", ctxt);
  				}
  			}
  
  			return new MapValue(result);
  		}
  
  		try
  		{
  			FunctionValue f1 = lv.functionValue(ctxt);
  			FunctionValue f2 = rv.functionValue(ctxt);
  
  			return new CompFunctionValue(f1, f2);
  		} catch (ValueException e)
  		{
  			return VdmRuntimeError.abort(node.getLocation(), e);
  		}
  	}
docs: /*
  end boolean