package G4ip;
import java.util.Vector;
import G4ip.Form.*;
/** Context acts as a multiset.<p>
* Typical contexts in logical rules are Gamma, Delta, etc.
* @author Christian Urban
*/
public class Context extends Vector {
public Context() { super(); }
public Context(Context init_context) {
super();
for (int i=0;i<init_context.size();i++) {
addElement(init_context.elementAt(i));
}
}
/** should be toString, but this is a "final" method in Vector
*/
public String makeString() {
String s = new String();
int i; // size()-1 because the last formula
for (i=0;i<size()-1;i++) { // should be printed without a comma
s=s.concat(elementAt(i).toString());
s=s.concat(", ");
}
if (size() > 0) { // add last formula
s=s.concat(elementAt(i).toString());
}
return s;
}
/** returns a context with one additional formula at the beginning
* @param new_formula a formula
*/
public Context add(Form new_formula) {
Context new_c = new Context(this);
new_c.insertElementAt(new_formula,0);
return new_c;
}
/** returns a context with two additional formulae at the beginning
* @param new_formula1,new_formula2 two formulae
*/
public Context add(Form new_formula1, Form new_formula2) {
Context new_c = new Context(this);
new_c.insertElementAt(new_formula1,0);
new_c.insertElementAt(new_formula2,0);
return new_c;
}
/** tests whether a context contains a specific atom
* @param a a formula
*/
public boolean includes(Form a) {
if (a instanceof Atm) {
for (int i=0;i<size();i++) {
switch((Form)elementAt(i)) {
case Atm(String c):
if (c.compareTo(((Atm)a).c) == 0) return true; break;
}
}
}
return false;
}
}