/**
* This program (working title: MAS Prover) is an automated tableaux prover
* for epistemic logic (S5n).
* Copyright (C) 2007 Elske van der Vaart and Gert van Valkenhoef
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package nl.rug.ai.mas.oops.tableau;
import java.util.*;
import nl.rug.ai.mas.oops.formula.*;
import nl.rug.ai.mas.oops.parser.Context;
public class ModalRuleFactory {
public static String LOZENGE = "◊";
public static String SQUARE = "◻";
private interface RuleClosure {
public Rule buildRule(Context c);
}
public enum RuleID {
PosO1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildPosO1(c);
}
}), PosO2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildPosO2(c);
}
}), PosS1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildPosS1(c);
}
}), PosS2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildPosS2(c);
}
}), BNecO1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildBNecO1(c);
}
}), BNecO2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildBNecO2(c);
}
}), BNecS1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildBNecS1(c);
}
}), BNecS2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildBNecS2(c);
}
}), SNecO1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecO1(c);
}
}), SNecO2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecO2(c);
}
}), SNecO3(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecO3(c);
}
}), SNecO4(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecO4(c);
}
}), SNecS1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecS1(c);
}
}), SNecS2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecS2(c);
}
}), SNecS3(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecS3(c);
}
}), SNecS4(new RuleClosure() {
public Rule buildRule(Context c) {
return buildSNecS4(c);
}
}), EK1(new RuleClosure() {
public Rule buildRule(Context c) {
return buildEK1(c);
}
}), EK2(new RuleClosure() {
public Rule buildRule(Context c) {
return buildEK2(c);
}
}), EK3(new RuleClosure() {
public Rule buildRule(Context c) {
return buildEK3(c);
}
}), EK4(new RuleClosure() {
public Rule buildRule(Context c) {
return buildEK4(c);
}
});
private final RuleClosure func;
RuleID(RuleClosure func) {
this.func = func;
}
public Rule buildRule(Context c) {
return func.buildRule(c);
}
}
private ModalRuleFactory() {
}
public static Vector<Rule> build(Context context) {
Vector<Rule> rules = new Vector<Rule>(12);
for (RuleID rule : RuleID.values()) {
rules.add(rule.buildRule(context));
}
return rules;
}
public static Vector<Rule> build(Context context, Vector<RuleID> ruleIds) {
Vector<Rule> rules = new Vector<Rule>();
for (RuleID rule : ruleIds) {
rules.add(rule.buildRule(context));
}
return rules;
}
public static Rule build(Context context, RuleID rule) {
return rule.buildRule(context);
}
public static Rule buildPosO1(Context context) {
String html = "M<sub>" + LOZENGE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
// Variable<World> n = new Variable<World>("n");
// WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Formula templateFormula = new MultiDiamond(iref, fref);
Formula rewriteFormula = fref;
WorldInstance n = new WorldInstance(rewriteFormula);
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = new LabelInstance(templateLabel, n, iref);
Constraint c = new NotEqualConstraint(i, j);
return new CreateRule("PosO1", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildPosO2(Context context) {
String html = "M<sub>" + SQUARE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
// Variable<World> n = new Variable<World>("n");
// WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Formula templateFormula = new Negation(new MultiBox(iref, fref));
Formula rewriteFormula = new Negation(fref);
WorldInstance n = new WorldInstance(rewriteFormula);
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = new LabelInstance(templateLabel, n, iref);
Constraint c = new NotEqualConstraint(i, j);
return new CreateRule("PosO2", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildPosS1(Context context) {
String html = "M<sub>" + LOZENGE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
// Variable<World> n = new Variable<World>("n");
// WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Formula templateFormula = new MultiDiamond(iref, fref);
Formula rewriteFormula = fref;
WorldInstance n = new WorldInstance(rewriteFormula);
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = new LabelInstance(lref, n, iref);
return new CreateRule("PosS1", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildPosS2(Context context) {
String html = "M<sub>" + SQUARE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
// Variable<World> n = new Variable<World>("n");
// WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Formula templateFormula = new Negation(new MultiBox(iref, fref));
Formula rewriteFormula = new Negation(fref);
WorldInstance n = new WorldInstance(rewriteFormula);
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = new LabelInstance(lref, n, iref);
return new CreateRule("PosS2", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildBNecO1(Context context) {
String html = "K<sub>" + SQUARE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
Variable<World> n = new Variable<World>("n");
WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Formula templateFormula = new MultiBox(iref, fref);
Formula rewriteFormula = fref;
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = new LabelInstance(templateLabel, nref, iref);
Constraint c = new NotEqualConstraint(i, j);
return new AccessRule("BNecO1", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildBNecO2(Context context) {
String html = "K<sub>" + LOZENGE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
Variable<World> n = new Variable<World>("n");
WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = new LabelInstance(templateLabel, nref, iref);
Formula templateFormula = new Negation(new MultiDiamond(iref, fref));
Formula rewriteFormula = new Negation(fref);
Constraint c = new NotEqualConstraint(i, j);
return new AccessRule("BNecO2", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildBNecS1(Context context) {
String html = "K<sub>" + SQUARE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
Variable<World> n = new Variable<World>("n");
WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = new LabelInstance(lref, nref, iref);
Formula templateFormula = new MultiBox(iref, fref);
Formula rewriteFormula = fref;
return new AccessRule("BNecS1", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildBNecS2(Context context) {
String html = "K<sub>" + LOZENGE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// new world
Variable<World> n = new Variable<World>("n");
WorldReference nref = new WorldReference(n);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = new LabelInstance(lref, nref, iref);
Formula templateFormula = new Negation(new MultiDiamond(iref, fref));
Formula rewriteFormula = new Negation(fref);
return new AccessRule("BNecS2", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildSNecO1(Context context) {
String html = "T<sub>" + SQUARE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = templateLabel;
Formula templateFormula = new MultiBox(iref, fref);
Formula rewriteFormula = fref;
Constraint c = new NotEqualConstraint(i, j);
return new AccessRule("SNecO1", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildSNecO2(Context context) {
String html = "T<sub>" + LOZENGE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = templateLabel;
Formula templateFormula = new Negation(new MultiDiamond(iref, fref));
Formula rewriteFormula = new Negation(fref);
Constraint c = new NotEqualConstraint(i, j);
return new AccessRule("SNecO2", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildSNecO3(Context context) {
String html = "D<sub>" + SQUARE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = templateLabel;
Formula templateFormula = new MultiBox(iref, fref);
Formula rewriteFormula = new MultiDiamond(iref, fref);
Constraint c = new NotEqualConstraint(i, j);
return new AccessRule("SNecO3", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildSNecO4(Context context) {
String html = "D<sub>" + LOZENGE + "</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// different agent
Variable<Agent> j = new Variable<Agent>("j");
AgentReference jref = new AgentReference(j, context.getAgentCodeMap().code(j));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, jref);
Label rewriteLabel = templateLabel;
Formula templateFormula = new Negation(new MultiDiamond(iref, fref));
Formula rewriteFormula = new Negation(new MultiBox(iref, fref));
Constraint c = new NotEqualConstraint(i, j);
return new AccessRule("SNecO4", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula), c);
}
public static Rule buildSNecS1(Context context) {
String html = "R<sub>" + SQUARE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = lref;
Formula templateFormula = new MultiBox(iref, fref);
Formula rewriteFormula = fref;
return new AccessRule("SNecS1", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildSNecS2(Context context) {
String html = "R<sub>" + LOZENGE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = lref;
Formula templateFormula = new Negation(new MultiDiamond(iref, fref));
Formula rewriteFormula = new Negation(fref);
return new AccessRule("SNecS2", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildSNecS3(Context context) {
String html = "4r<sub>" + SQUARE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = lref;
Formula templateFormula = new MultiBox(iref, fref);
Formula rewriteFormula = new MultiBox(iref, fref);
return new AccessRule("SNecS3", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildSNecS4(Context context) {
String html = "4r<sub>" + LOZENGE + "*</sub>";
// variables occuring
// the formula
Variable<Formula> f = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(f, context.getFormulaCodeMap().code(f));
// agent for which the modal operator holds
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// current world
Variable<World> k = new Variable<World>("k");
WorldReference kref = new WorldReference(k);
// superlabel
Variable<Label> l = new Variable<Label>("L");
LabelReference lref = new LabelReference(l);
// formula f. agents i, j. worlds k, n. label l.
Label templateLabel = new LabelInstance(lref, kref, iref);
Label rewriteLabel = lref;
Formula templateFormula = new Negation(new MultiDiamond(iref, fref));
Formula rewriteFormula = new Negation(new MultiDiamond(iref, fref));
return new AccessRule("SNecS4", html, new Node(templateLabel, templateFormula), new Node(rewriteLabel, rewriteFormula));
}
public static Rule buildEK1(Context context) {
String html = "E" + "<sub>" + SQUARE + "</sub>";
// variables
Variable<Formula> F = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(F, context.getFormulaCodeMap().code(F));
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// formula
Formula f = new UniBox(fref);
// rewrites
Formula rwt = new MultiBox(iref, fref);
return new AgentLinearRule("EK1", html, f, rwt, context, iref);
}
public static Rule buildEK2(Context context) {
String html = "E" + "<sub>" + SQUARE + "*</sub>";
// variables
Variable<Formula> F = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(F, context.getFormulaCodeMap().code(F));
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// formula
Formula f = new Negation(new UniBox(fref));
// rewrites
Formula rwt = new Negation(new MultiBox(iref, fref));
return new AgentSplitRule("EK2", html, f, rwt, context, iref);
}
public static Rule buildEK3(Context context) {
String html = "I" + "<sub>" + LOZENGE + "</sub>";
// variables
Variable<Formula> F = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(F, context.getFormulaCodeMap().code(F));
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// formula
Formula f = new UniDiamond(fref);
// rewrites
Formula rwt = new MultiBox(iref, fref);
return new AgentSplitRule("EK3", html, f, rwt, context, iref);
}
public static Rule buildEK4(Context context) {
String html = "I" + "<sub>" + LOZENGE + "*</sub>";
// variables
Variable<Formula> F = new Variable<Formula>("F");
FormulaReference fref = new FormulaReference(F, context.getFormulaCodeMap().code(F));
Variable<Agent> i = new Variable<Agent>("i");
AgentReference iref = new AgentReference(i, context.getAgentCodeMap().code(i));
// formula
Formula f = new Negation(new UniDiamond(fref));
// rewrites
Formula rwt = new Negation(new MultiBox(iref, fref));
return new AgentLinearRule("EK2", html, f, rwt, context, iref);
}
}