]> matita.cs.unibo.it Git - logicplayer.git/blob - mainActivity/src/com/example/furt/myapplication/FormulaImpl.java
9761a0e58384ce57322d9f7bf6e18e24415f20c8
[logicplayer.git] / mainActivity / src / com / example / furt / myapplication / FormulaImpl.java
1 package com.example.furt.myapplication;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 public class FormulaImpl extends GenericFormula implements Formula
7 {
8     Formula leftF;
9     Formula rightF;
10     int leftPriority;
11     int rightPriority;
12     FormulaImpl(Formula F1,Formula F2)
13     {
14         priority=10;
15         leftF=F1;
16         rightF=F2;
17         leftPriority=11;
18         rightPriority=10;
19     }
20     @Override
21     public String Draw(int p)
22     {
23         if (priority >= p)
24             return leftF.Draw(leftPriority)+"⇒"+rightF.Draw(rightPriority);
25         else
26             return("(")+leftF.Draw(leftPriority)+"⇒"+rightF.Draw(rightPriority)+")";
27     }
28
29     public List<IntroductionRule> introductionRules(){
30         List<IntroductionRule> nodes=new ArrayList<IntroductionRule>();
31         nodes.addAll(super.introductionRules());
32         RuleIntroduction implIntro=new RuleIntroduction("⇒i",10);
33         Node ImplN=new Node(rightF);
34         List<Formula> implHP=new ArrayList<Formula>();
35         implHP.add(leftF);
36         ImplN.addHPFormula(implHP,true);
37         Node thisNode=new Node(this);
38         thisNode.addChild(ImplN);
39         implIntro.tempRule=thisNode;
40         nodes.add(implIntro);
41         return nodes;
42     }
43     public List<EliminationRule> EliminationRules()
44     {
45         List<EliminationRule> nodes=new ArrayList<EliminationRule>();
46         nodes.add(new RuleImplElimination(this));
47         return nodes;
48     }
49     @Override
50     public boolean Fill(Formula Filler) {
51         if(leftF.toString().equals("_")) {
52             this.leftF = Filler;
53             return true;
54         }
55         else if(rightF.toString().equals("_")) {
56             this.rightF = Filler;
57             return true;
58         }
59         return leftF.Fill(Filler) || rightF.Fill(Filler);
60     }
61
62     @Override
63     public boolean setCursor() {
64         return leftF.setCursor() || rightF.setCursor();
65     }
66
67     @Override
68     public Formula duplicate() {
69         return new FormulaImpl(leftF.duplicate(),rightF.duplicate());
70     }
71 }