コード例 #1
0
ファイル: Program.cs プロジェクト: sandwwraith/mathlogic
 public override void ExitHeader(PropositionalCalculusParser.HeaderContext context)
 {
         for (int ind = 0; ind < context.ChildCount - 2; ind += 2)
         {
             proposals.Add(context.children[ind]);
         }
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: sandwwraith/mathlogic
 public override void ExitProof(PropositionalCalculusParser.ProofContext context)
 {
     foreach (var child in context.children.Where(tree => tree is PropositionalCalculusParser.ExpressionContext))
     {
         Axioms.Add(new Axiom(child));
     }
 }
コード例 #3
0
ファイル: TreeUtils.cs プロジェクト: sandwwraith/mathlogic
 private void Init()
 {
     var inputStream = new AntlrInputStream(new System.IO.StreamReader(_filename));
     var lexer = new PropositionalCalculusLexer(inputStream);
     var tokenStream = new CommonTokenStream(lexer);
     _parser = new PropositionalCalculusParser(tokenStream) { BuildParseTree = true };
     _tree = _parser.text();
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: sandwwraith/mathlogic
        public override void ExitProof(PropositionalCalculusParser.ProofContext context)
        {
            for (int ind = 0; ind < context.children.Count; ind+=2)
            {
                var expr = context.children[ind];

                bool flag = false;
                //Checking axioms
                for (int axiom_i = 0; axiom_i < storage.Count && !flag; axiom_i++)
                {
                    var axiom = storage[axiom_i];
                    if (axiom.Match(expr))
                    {
                        Proof.Add(new Result(expr.GetText(),Result.AnnotationBuilder.Axiom(axiom_i+1)));
                        flag = true;
                    }
                }

                //Checking proposals
                for (int p = 0; p < proposals.Count && !flag; p++)
                {
                    if (proposals[p].Same(expr))
                    {
                        flag = true;
                        Proof.Add(new Result(expr.GetText(), Result.AnnotationBuilder.Proposal(p + 1)));
                    }
                }

                //Checking M.P.

                for (int j = ind; j >= 0 && !flag; j -= 2)
                {
                    var candidate = context.children[j].Collapse();
                    if (!candidate.IsImplication()) continue;
                    var p2 = candidate.GetChild(2);
                    if (!p2.Same(expr)) continue;
                    var p1 = candidate.GetChild(0);
                    //Need to find index of p1
                    for (int i = ind; i >= 0; i -= 2)
                    {
                        if (p1.Same(context.children[i]))
                        {
                            //Success
                            flag = true;
                            Proof.Add(new Result(expr.GetText(),Result.AnnotationBuilder.MP(i/2+1,j/2+1)));
                            break;
                        }
                    }
                }

                //If not prooved
                if (!flag) Proof.Add(new Result(expr.GetText(), Result.AnnotationBuilder.NotProoved()));
            }
        }