/** * 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 }