internal Inequality(GenerationKey generationKey)
        {
            Random rnd = new Random(generationKey.Seed);

            settings = generationKey.Settings;

            Fraction bigFraction = new Fraction(generationKey);

            BigFraction = bigFraction;
            Answer      = bigFraction.Answer;
            Sign        = bigFraction.Sign ? "<" : ">";
            Sign       += Answer.StrictInequality ? "" : "=";
            if (Sign == "<=")
            {
                Sign = "⩽";
            }
            else if (Sign == ">=")
            {
                Sign = "⩾";
            }
            GenerationKey = generationKey;

            if (!settings.OneFraction)
            {
                GenerateLeftAndRightSides(generationKey);
            }
            else
            {
                bigFraction.MultiplyPolynominal(generationKey.Seed, settings);
                LeftSide = new List <Fraction> {
                    bigFraction
                };
                RightSide = new List <Fraction>();
            }

            if (settings.PowerFunc && Answer.IsPowerBorders)
            {
                Fraction   root     = rnd.Next(-50, 51);
                Polynomial argument = new Polynomial("x", root);
                PowerFunc  powFunc  = new PowerFunc(argument, Answer.PowerBase);
                Subs(powFunc);
            }
            else if (settings.Radical && Answer.MinPoint() >= (double)0 && Answer.MaxPoint() > (double)10)
            {
                Fraction   root     = rnd.Next(-200, 201);
                Polynomial argument = new Polynomial("x", root);
                Radical    radical  = new Radical(argument);
                Subs(radical);
            }
            else if (settings.Log && Answer.MinPoint() >= (double)-10 && Answer.MaxPoint() <= (double)10 && Answer.AreAllPointsInteger())
            {
                Fraction   root     = rnd.Next(-100, 100);
                Polynomial argument = new Polynomial("x", root);
                int        rndBase  = rnd.Next(6) == 0 ? 2 : 3;
                Fraction   @base    = Answer.MinPoint() >= (double)-5 && Answer.MaxPoint() <= (double)5 ? rndBase : 2;
                Log        log      = new Log(argument, @base);
                Subs(log);
            }
        }