Ejemplo n.º 1
0
        public static bool CheckMonotony(BooleanFunction f, bool verbose = false)
        {
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if (!AreAdjacent(i, j) || !IsLessThan(i, j))
                    {
                        continue;
                    }

                    if (f.EvalAt(i) > f.EvalAt(j))
                    {
                        if (verbose)
                        {
                            Console.WriteLine("F ∉ T_<=, т.к. F({0}) > F({1})", PointAsString(i), PointAsString(j));
                        }

                        return(false);
                    }
                }
            }

            if (verbose)
            {
                Console.WriteLine("F ∈ T_<=, т.к. я на всех наборах проверял, честно!");
            }

            return(true);
        }
Ejemplo n.º 2
0
        public BooleanFunction DirectionalDeriv(params BooleanVariable[] variables)
        {
            Dictionary <BooleanVariable, bool> values;

            int res = 0;

            for (int i = 0; i < 8; i++)
            {
                res *= 2;

                values = new Dictionary <BooleanVariable, bool> {
                    { BooleanVariable.A, i / 4 == 1 },
                    { BooleanVariable.B, i / 2 % 2 == 1 },
                    { BooleanVariable.C, i % 2 == 1 },
                };

                BooleanFunction leftOp  = this;
                BooleanFunction rightOp = this;

                foreach (var variable in variables)
                {
                    leftOp  = leftOp.FixVar(variable, values[variable] ? 1 : 0);
                    rightOp = rightOp.FixVar(variable, values[variable] ? 0 : 1);
                }

                res += leftOp.EvalAt(i) ^ rightOp.EvalAt(i);
            }

            return(new BooleanFunction((byte)res));
        }
Ejemplo n.º 3
0
        public override byte Eval()
        {
            int res = 0;

            for (int i = 0; i < 8; i++)
            {
                res *= 2;
                res += F.EvalAt(First.EvalAt(i) * 4 + Second.EvalAt(i) * 2 + Third.EvalAt(i));
            }

            return((byte)res);
        }
Ejemplo n.º 4
0
        public static bool CheckSelfDuality(BooleanFunction f, bool verbose = false)
        {
            for (int i = 0; i < 8; i++)
            {
                if (f.EvalAt(i) == f.EvalAt(7 - i))
                {
                    if (verbose)
                    {
                        Console.WriteLine("F ∉ T_*, т.к. F({0}) = F({1}) = {2}", PointAsString(i), PointAsString(7 - i), f.EvalAt(i));
                    }

                    return(false);
                }
            }

            if (verbose)
            {
                Console.WriteLine("F ∈ T_*, т.к. я на всех наборах проверял, честно!");
            }

            return(true);
        }
Ejemplo n.º 5
0
        public static bool CheckConservationOne(BooleanFunction f, bool verbose = false)
        {
            if (f.EvalAt(7) == 1)
            {
                if (verbose)
                {
                    Console.WriteLine("F ∈ T_1, т.к. F(1,1,1) = 1");
                }

                return(true);
            }
            else
            {
                if (verbose)
                {
                    Console.WriteLine("F ∉ T_1, т.к. F(1,1,1) = 0");
                }

                return(false);
            }
        }
Ejemplo n.º 6
0
        public static bool CheckConservationZero(BooleanFunction f, bool verbose = false)
        {
            if (f.EvalAt(0) == 0)
            {
                if (verbose)
                {
                    Console.WriteLine("F ∈ T_0, т.к. F(0,0,0) = 0");
                }

                return(true);
            }
            else
            {
                if (verbose)
                {
                    Console.WriteLine("F ∉ T_0, т.к. F(0,0,0) = 1");
                }

                return(false);
            }
        }
Ejemplo n.º 7
0
        public static bool CheckSelfDuality(BooleanFunction f, bool verbose = false)
        {
            for(int i = 0; i < 8; i++) {
                if(f.EvalAt(i) == f.EvalAt(7 - i)) {
                    if(verbose)
                        Console.WriteLine("F ∉ T_*, т.к. F({0}) = F({1}) = {2}", PointAsString(i), PointAsString(7 - i), f.EvalAt(i));

                    return false;
                }
            }

            if(verbose)
                Console.WriteLine("F ∈ T_*, т.к. я на всех наборах проверял, честно!");

            return true;
        }
Ejemplo n.º 8
0
        public static bool CheckMonotony(BooleanFunction f, bool verbose = false)
        {
            for(int i = 0; i < 8; i++) {
                for(int j = 0; j < 8; j++) {
                    if(!AreAdjacent(i, j) || !IsLessThan(i, j))
                        continue;

                    if(f.EvalAt(i) > f.EvalAt(j)) {
                        if(verbose)
                            Console.WriteLine("F ∉ T_<=, т.к. F({0}) > F({1})", PointAsString(i), PointAsString(j));

                        return false;
                    }
                }
            }

            if(verbose)
                Console.WriteLine("F ∈ T_<=, т.к. я на всех наборах проверял, честно!");

            return true;
        }
Ejemplo n.º 9
0
        public static bool CheckConservationZero(BooleanFunction f, bool verbose = false)
        {
            if(f.EvalAt(0) == 0) {
                if(verbose)
                    Console.WriteLine("F ∈ T_0, т.к. F(0,0,0) = 0");

                return true;
            }
            else {
                if(verbose)
                    Console.WriteLine("F ∉ T_0, т.к. F(0,0,0) = 1");

                return false;
            }
        }
Ejemplo n.º 10
0
        public static bool CheckConservationOne(BooleanFunction f, bool verbose = false)
        {
            if(f.EvalAt(7) == 1) {
                if(verbose)
                    Console.WriteLine("F ∈ T_1, т.к. F(1,1,1) = 1");

                return true;
            }
            else {
                if(verbose)
                    Console.WriteLine("F ∉ T_1, т.к. F(1,1,1) = 0");

                return false;
            }
        }