private static Func<dynamic> GetDerivedUnknown(this Func<dynamic> fact, Func<dynamic> unknown)
        {
            if (unknown.LeftMatchesLeft(fact))
                return unknown.CalculateDerivedFrom(fact);

            if (unknown.LeftMatchesLeft(fact.Invert()))
                return unknown.CalculateDerivedFrom(fact.Invert());

            return null;
        }