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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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); }
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); } } } } }
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); } } } } } }