public static Implicant <T> ImplicantOf <T>( DnfAnd <T> minterm) { return(ImplicantOf( minterm .ElementSet .Select(operation => { Term <T> term = operation switch { DnfVariable <T> variable => (Term <T>)PositiveTermOf(variable.Value), DnfNotVariable <T> notOperation => (Term <T>)NegativeTermOf(notOperation.Value), _ => throw new ArgumentException( message: "pattern matching in C# is sucks", paramName: nameof(operation)) }; return term; }))); }
internal static bool IsContainsMinterm <T>( this Implicant <T> implicant, DnfAnd <T> minterm) { var variableMintermMapB = minterm .ElementSet .ToDictionary(term => term.Value, term => term); return(!implicant .TermSet .Any(implicantTerm => { var mintermTerm = variableMintermMapB[implicantTerm.Value]; return (implicantTerm, mintermTerm) switch { (PositiveTerm <T> _, DnfNotVariable <T> _) => true, (NegativeTerm <T> _, DnfVariable <T> _) => true, _ => false }; })); }