internal void add(FunctionApplicationExpression mlu)
 {
     if (mlu.function is MapLookup)
     {
         fieldReads.Add(mlu);
     }
     if (mlu.function is MapUpdate)
     {
         updateReads.Add(mlu);
     }
 }
            internal void add(FunctionApplicationExpression mlu)
            {
                Debug.Assert(mlu.function is MapLookup || mlu.function is MapUpdate);
                string name = getBaseName(mlu);

                if (!mapData.ContainsKey(name))
                {
                    mapData.Add(name, new MapData(name));
                }
                mapData[name].add(mlu);
            }
 ////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////
 public override Expression visit(FunctionApplicationExpression e)
 {
     if (e.function is MapLookup || e.function is MapUpdate)
     {
         maps.add(e);
         base.visit(e);
     }
     else
     {
         base.visit(e);
     }
     return(e);
 }
            private string getBaseName(FunctionApplicationExpression mlu)
            {
                Debug.Assert(mlu.function is MapLookup || mlu.function is MapUpdate);
                Debug.Assert(mlu.arguments.count > 0);
                Expression mapExpression = mlu.arguments[0];
                string     result        = mapExpression.ToString();

                if (mapExpression is ProgramVariableExpression)
                {
                    result = procedure.getBaseIncarnation((mapExpression as ProgramVariableExpression).name).name;
                }

                return(result);
            }