internal void removeGAF(GAF gaf)
        {
#if DEBUG
            Debug.Assert(gafByGTT.ContainsKey(gaf.gtt));
//            Debug.Assert(upToDate(gaf.gArguments));
#endif
            gafByGTT[gaf.gtt].Remove(gaf);
        }
        internal GL(GAF formula, bool polarity)
            : base(formula, polarity)
        {
            gaf = formula;
#if DEBUG
            m[index] = this;
#endif
        }
        public void addGAF(GAF gaf)
        {
#if DEBUG
            Debug.Assert(!gafByGTT.ContainsKey(gaf.gtt) || !gafByGTT[gaf.gtt].Contains(gaf));
            Debug.Assert(upToDate(gaf.gtt));
#endif
            {
                ISet <GAF> e;
                if (!gafByGTT.TryGetValue(gaf.gtt, out e))
                {
                    gafByGTT[gaf.gtt] = e = new HashSet <GAF>();
                }
                e.Add(gaf);
            }
        }