Exemplo n.º 1
0
        public void Functor_米田2()
        {
            var list = new List <Functor>()
            {
                Functor.Create(@"\yoneda(#2)(#1)", @"\Hom(#1, #2)"),
                Functor.Create("F#1", "G(#1)")
            };

            var left  = new MathObjectFactory(@"\yoneda(a)(b)").CreateSingle();
            var right = new MathObjectFactory(@"\Hom(b, a)").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"F(\yoneda(a)(b))").CreateSingle();
            right = new MathObjectFactory(@"G(\Hom(b, a))").CreateSingle();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"F(\yoneda a b)").CreateSingle();
            right = new MathObjectFactory(@"G(\Hom(b, a))").CreateSingle();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();
        }
Exemplo n.º 2
0
        public void Functor_恒等関手()
        {
            var list = new List <Functor>()
            {
                Functor.Create(@"\id_{#2?}#1", "#1")
            };

            var left  = new MathObjectFactory(@"\id_{\cat{C}}(a)").CreateSingle();
            var right = new MathObjectFactory("a").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"\id(x)").CreateSingle();
            right = new MathObjectFactory("x").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"\id_{\cat{C}}(f\otimes g)").CreateSingle();
            right = new MathObjectFactory(@"f\otimes g").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();
        }
Exemplo n.º 3
0
        public void Functor_対角関手2()
        {
            var list = new List <Functor>()
            {
                Functor.Create(@"\Delta #1(#2)", "#1"),
                Functor.Create(@"\Hom(#1, #2)", @"\Hom(#1, #2)"),
                Functor.Create(@"\Hom_{#3}(#1, #2)", @"\Hom_{#3}(#1, #2)"),
            };
            var dic = new Dictionary <TokenString, Morphism>()
            {
                { "F".ToTokenString(), new Morphism("F", @"\cat{C}", @"\cat{D}", MorphismType.Functor, -1) }
            };

            var left  = new MathObjectFactory(@"\Hom(\Delta(\lim T)(x), F(u))").CreateSingle();
            var right = new MathObjectFactory(@"\Hom(\lim T, Fu)").CreateSingle();

            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"\Hom_{\cat{C}}(\Delta(\lim T)(x), F(u))").CreateSingle();
            right = new MathObjectFactory(@"\Hom_{\cat{C}}(\lim T, Fu)").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();
        }
Exemplo n.º 4
0
        public void Functor_括弧なし()
        {
            var list = new List <Functor>()
            {
                Functor.Create("F#1", "G#1")
            };

            var left  = new MathObjectFactory("Fa").CreateSingle();
            var right = new MathObjectFactory("Ga").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory("F(a)").CreateSingle();
            right = new MathObjectFactory("Ga").CreateSingle();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory("Fa").CreateSingle();
            right = new MathObjectFactory("G(a)").CreateSingle();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory("F(a)").CreateSingle();
            right = new MathObjectFactory("G(a)").CreateSingle();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();
        }
Exemplo n.º 5
0
        public void Functor_対角関手1()
        {
            var list = new List <Functor>()
            {
                Functor.Create(@"\Delta #1(#2)", "#1"),
            };

            var left  = new MathObjectFactory(@"\Delta a(x)").CreateSingle();
            var right = new MathObjectFactory("a").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"\Delta (a+b)(x)").CreateSingle();
            right = new MathObjectFactory("a+b").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"GF(\Delta a(x))").CreateSingle();
            right = new MathObjectFactory("GFa").CreateSingle();
            var dic = new Dictionary <TokenString, Morphism>
            {
                { "F".ToTokenString(), new Morphism("F", @"\cat{C}", @"\cat{D}", MorphismType.Functor, -1) },
                { "G".ToTokenString(), new Morphism("G", @"\cat{C}", @"\cat{D}", MorphismType.Functor, -1) },
            };

            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"GF(\Delta a(x))").CreateSingle();
            right = new MathObjectFactory("GF(a)").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"GF(\Delta a(x))").CreateSingle();
            right = new MathObjectFactory("G(Fa)").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"GF(\Delta a(x))").CreateSingle();
            right = new MathObjectFactory("G(F(a))").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory(@"G(F(\Delta a(x)))").CreateSingle();
            right = new MathObjectFactory("GFa").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();
        }
Exemplo n.º 6
0
        public void Functor_括弧あり()
        {
            var list = new List <Functor>()
            {
                Functor.Create("F#1", "G(#1)")
            };

            var left  = new MathObjectFactory("Fa").CreateSingle();
            var right = new MathObjectFactory("G(a)").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory("F(a)").CreateSingle();
            right = new MathObjectFactory("G(a)").CreateSingle();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            //left = new MathObjectFactory("Fa").CreateSingle();
            //right = new MathObjectFactory("Ga").CreateSingle();
            //CreateTikZDiagram(list)
            //    .CheckNode(left, right)
            //    .IsTrue();

            //left = new MathObjectFactory("F(a)").CreateSingle();
            //right = new MathObjectFactory("Ga").CreateSingle();
            //CreateTikZDiagram(list)
            //    .CheckNode(left, right)
            //    .IsTrue();

            var dic = new Dictionary <TokenString, Morphism>
            {
                { "G".ToTokenString(), new Morphism("G", @"\cat{C}", @"\cat{D}", MorphismType.Functor, -1) },
            };

            left  = new MathObjectFactory("Fa").CreateSingle();
            right = new MathObjectFactory("Ga").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();

            left  = new MathObjectFactory("F(a)").CreateSingle();
            right = new MathObjectFactory("Ga").CreateSingle();
            new TikZDiagram("", -1, false, false, true, dic, Array.Empty <Morphism>(), list)
            .EqualsAsMathObject(left, right)
            .IsTrue();
        }
Exemplo n.º 7
0
        public void Functor_変数無し()
        {
            var list = new List <Functor>()
            {
                Functor.Create("Fab", "Gba")
            };

            var right = new MathObjectFactory("Gba").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("Fab").CreateSingle(), right)
            .IsTrue();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("Gba").CreateSingle(), right)
            .IsTrue();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("F").CreateSingle(), right)
            .IsFalse();
        }
Exemplo n.º 8
0
        public void Functor_定数関手()
        {
            var list = new List <Functor>()
            {
                Functor.Create("F#1", "x")
            };

            var right = new MathObjectFactory("x").CreateSingle();

            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("Fa").CreateSingle(), right)
            .IsTrue();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("F(b)").CreateSingle(), right)
            .IsTrue();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("F(uvw)").CreateSingle(), right)
            .IsTrue();
            CreateTikZDiagram(list)
            .EqualsAsMathObject(new MathObjectFactory("Fs").CreateSingle(), new MathObjectFactory("Ft").CreateSingle())
            .IsTrue();
        }
        public void  数ab()
        {
            var dic  = new Dictionary <TokenString, Morphism>();
            var list = new List <Morphism>()
            {
                ToMorphismHelp(@"\ev", @"[#1a, #2]\otimes #1b", @"#2", MorphismType.OneMorphism)
            };
            var func = ExtensionsInTest.CreateDefaultFunctors().ToList();

            func.Add(Functor.Create("F#1", "G#1"));
            func.Add(Functor.Create("X", "Y"));
            var tikz = new TikZDiagram("", -1, false, false, true, dic, list, func);

            tikz.CreateMorphism(@"\ev", @"[u, v]\otimes u", @"v")
            .TestMorphism(@"\ev", @"[u, v]\otimes u", @"v", MorphismType.OneMorphism, true);

            tikz.CreateMorphism(@"\ev", @"[X, v]\otimes Y", @"v")
            .TestMorphism(@"\ev", @"[X, v]\otimes Y", @"v", MorphismType.OneMorphism, true);

            tikz.CreateMorphism(@"\ev", @"[Fu, v]\otimes Gu", @"v")
            .TestMorphism(@"\ev", @"[Fu, v]\otimes Gu", @"v", MorphismType.OneMorphism, true);
        }
Exemplo n.º 10
0
        void ProcessInput(bool executeQuery)
        {
            var input = CurrentInput;

            if (input == null)
            {
                return;
            }

            input = input.Trim();
            if (string.IsNullOrEmpty(input))
            {
                return;
            }

            TranscriptProvider.Transcript.AddTranscriptEntry(TranscriptEntryTypes.Request, input);

            var selectedClause = CurrentClauseProvider.SelectedClause;

            var codeSentences = Parser.Parse(input);

            if (codeSentences == null || codeSentences.Length == 0)
            {
                TranscriptProvider.Transcript.AddTranscriptEntry(TranscriptEntryTypes.Response, Resources.Strings.MessageUnrecognizedInput);
                return;
            }

            foreach (var codeSentence in codeSentences)
            {
                if (codeSentence.Head == null) // query
                {
                    var query = new Query(codeSentence);
                    MachineProvider.Machine = PrologMachine.Create(ProgramProvider.Program, query);
                    MachineProvider.Machine.ExecutionComplete += OnMachineExecutionComplete;
                    if (executeQuery)
                    {
                        MachineProvider.Machine.RunToSuccess();
                    }
                }
                else // fact or rule
                {
                    if (selectedClause != null && selectedClause.Container.Procedure.Functor == Functor.Create(codeSentence.Head.Functor))
                    {
                        selectedClause.CodeSentence = codeSentence;
                        TranscriptProvider.Transcript.AddTranscriptEntry(TranscriptEntryTypes.Response, Resources.Strings.ResponseSuccess);
                    }
                    else
                    {
                        if (ProgramProvider.Program.Contains(codeSentence))
                        {
                            TranscriptProvider.Transcript.AddTranscriptEntry(TranscriptEntryTypes.Response, Resources.Strings.MessageDuplicateClause);
                        }
                        else
                        {
                            ProgramProvider.Program.Add(codeSentence);
                            TranscriptProvider.Transcript.AddTranscriptEntry(TranscriptEntryTypes.Response, Resources.Strings.ResponseSuccess);
                        }
                    }
                }
            }
        }
Exemplo n.º 11
0
        private void ProcessInput(string input, bool executeQuery)
        {
            // Ignore empty input.
            //
            if (input == null)
            {
                return;
            }
            input = input.Trim();
            if (string.IsNullOrEmpty(input))
            {
                return;
            }

            AppState.Transcript.Entries.AddTranscriptEntry(TranscriptEntryTypes.Request, input);

            Clause selectedClause = ctrlProgram.SelectedClause;

            CodeSentence[] codeSentences = Parser.Parse(input);
            if (codeSentences == null ||
                codeSentences.Length == 0)
            {
                AppState.Transcript.Entries.AddTranscriptEntry(TranscriptEntryTypes.Response, Properties.Resources.MessageUnrecognizedInput);
            }
            else
            {
                foreach (CodeSentence codeSentence in codeSentences)
                {
                    if (codeSentence.Head == null) // query
                    {
                        Query query = new Query(codeSentence);

                        AppState.Machine = PrologMachine.Create(AppState.Program, query);

                        if (executeQuery)
                        {
                            AppState.Machine.RunToSuccess();
                        }
                    }
                    else // fact or rule
                    {
                        if (selectedClause != null &&
                            selectedClause.Container.Procedure.Functor == Functor.Create(codeSentence.Head.Functor))
                        {
                            selectedClause.CodeSentence = codeSentence;

                            AppState.Transcript.Entries.AddTranscriptEntry(TranscriptEntryTypes.Response, Properties.Resources.ResponseSuccess);
                        }
                        else
                        {
                            if (AppState.Program.Contains(codeSentence))
                            {
                                AppState.Transcript.Entries.AddTranscriptEntry(TranscriptEntryTypes.Response, Properties.Resources.MessageDuplicateClause);
                            }
                            else
                            {
                                AppState.Program.Add(codeSentence);

                                AppState.Transcript.Entries.AddTranscriptEntry(TranscriptEntryTypes.Response, Properties.Resources.ResponseSuccess);
                            }
                        }
                    }
                }
            }
        }