Exemple #1
0
        /**
         * Determina si la cláusula representa una tautología, si por ejemplo contiene True, ~False o (P o ~P).
         *
         * @return cierto si la cláusula representa una tautología, falso en caso contrario.
         */
        public bool IsTautology()
        {
            if (cachedIsTautologyResult == null)
            {
                foreach (Literal l in literals)
                {
                    if (l.IsAlwaysTrue())
                    {
                        // Si contiene True o contiene ~False es una tautología
                        cachedIsTautologyResult = true;
                    }
                }
                // Si seguimos sin saberlo
                if (cachedIsTautologyResult == null)
                {
                    if (SetOps.Intersection(cachedPositiveSymbols, cachedNegativeSymbols).Count > 0)   // Esto de SetOps.intersection me recuerda al Sets.intersection de Java... tendré que ver cómo sustituirlo en C#
                    // Tenemos P | ~P que siempre es cierto.
                    {
                        cachedIsTautologyResult = true;
                    }
                    else
                    {
                        cachedIsTautologyResult = false;
                    }
                }
            }

            return((bool)cachedIsTautologyResult); // No puede ser null por la forma en que se ha programado arriba
        }