]> matita.cs.unibo.it Git - logicplayer.git/blob - mainActivity/src/com/example/furt/myapplication/FormulaImpl.java
New version (to be tested).
[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()); //aggiunge la regola di R.A.A.
32
33         //Regola di introduzione dell'implicazione
34
35         RuleIntroduction implIntro=new RuleIntroduction("⇒i",10);
36         Node ImplN=new Node(rightF);
37         List<Formula> implHP=new ArrayList<Formula>();
38         implHP.add(leftF);
39         ImplN.addHPFormula(implHP,true);
40         Node thisNode=new Node(this);
41         thisNode.addChild(ImplN);
42         implIntro.tempRule=thisNode;
43         nodes.add(implIntro);
44
45         return nodes;
46     }
47     public List<EliminationRule> EliminationRules()
48     {
49         List<EliminationRule> nodes=new ArrayList<EliminationRule>();
50         nodes.add(new RuleImplElimination(this));
51         return nodes;
52     }
53     @Override
54     public boolean Fill(Formula Filler) {
55         if(leftF.toString().equals("_")) {
56             this.leftF = Filler;
57             return true;
58         }
59         else if(rightF.toString().equals("_")) {
60             this.rightF = Filler;
61             return true;
62         }
63         return leftF.Fill(Filler) || rightF.Fill(Filler);
64     }
65
66     @Override
67     public boolean setCursor() {
68         return leftF.setCursor() || rightF.setCursor();
69     }
70
71     @Override
72     public Formula duplicate() {
73         return new FormulaImpl(leftF.duplicate(),rightF.duplicate());
74     }
75 }