/**
*
*/
package kodkod.examples.tptp;
import static kodkod.ast.Expression.IDEN;
import static kodkod.ast.Expression.UNIV;
import java.util.ArrayList;
import java.util.List;
import kodkod.ast.Expression;
import kodkod.ast.Formula;
import kodkod.ast.Relation;
import kodkod.ast.Variable;
import kodkod.instance.Bounds;
import kodkod.instance.TupleFactory;
import kodkod.instance.TupleSet;
import kodkod.instance.Universe;
/**
* A KK encoding of axioms MED001+0.ax and MED001+1.ax from http://www.cs.miami.edu/~tptp/
* @author Emina Torlak
*/
public abstract class MED001 {
protected final Relation bcapacityne, bcapacityex, bcapacitysn,
conditionhyper, conditionhypo, conditionnormo,
drugi, uptakelg, uptakepg, releaselg, bsecretioni,
drugbg, qilt27, s0, s1, s2, s3, drugsu, n0;
protected final Relation gt;
protected MED001() {
bcapacityne = Relation.unary("bcapacityne");
bcapacityex = Relation.unary("bcapacityex");
bcapacitysn = Relation.unary("bcapacitysn");
conditionhyper = Relation.unary("conditionhyper");
conditionhypo = Relation.unary("conditionhypo");
conditionnormo = Relation.unary("conditionnormo");
drugi = Relation.unary("drugi");
uptakelg = Relation.unary("uptakelg");
uptakepg = Relation.unary("uptakepg");
releaselg = Relation.unary("releaselg");
bsecretioni = Relation.unary("bsecretioni");
drugbg = Relation.unary("drugbg");
qilt27 = Relation.unary("qilt27");
s0 = Relation.unary("s0");
s1 = Relation.unary("s1");
s2 = Relation.unary("s2");
s3 = Relation.unary("s3");
drugsu = Relation.unary("drugsu");
n0 = Relation.unary("n0");
gt = Relation.binary("gt");
}
/**
* Returns the declarations.
* @return declarations
*/
public final Formula decls() {
return n0.one();
}
/**
* Returns the irreflexivity_gt axiom.
* @return irreflexivity_gt
*/
public final Formula irreflexivity_gt() {
return gt.intersection(IDEN).no();
}
/**
* Returns the transitivity_gt axiom.
* @return transitivity_gt
*/
public final Formula transitivity_gt() {
return gt.join(gt).in(gt);
}
/**
* Returns the axioms xorcapacity1 through xorcapacity1_4.
* @return xorcapacity1_4
*/
public final Formula xorcapacity1_4() {
return UNIV.in(bcapacityne.union(bcapacityex).union(bcapacitysn)).
and(bcapacityne.intersection(bcapacityex).no()).
and(bcapacityne.intersection(bcapacitysn).no()).
and(bcapacityex.intersection(bcapacitysn).no());
}
/**
* Returns the axioms xorcondition1 through xorcondition1.
* @return xorcondition1_4
*/
public final Formula xorcondition1_4() {
return UNIV.in(conditionhyper.union(conditionhypo).union(conditionnormo)).
and(conditionhyper.intersection(conditionhypo).no()).
and(conditionhyper.intersection(conditionnormo).no()).
and(conditionnormo.intersection(conditionhypo).no());
}
/**
* Returns the insulin_effect axiom.
* @return insulin_effect
*/
public final Formula insulin_effect() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
return x1.in(drugi).implies(x1.in(uptakelg.intersection(uptakepg))).forAll(x0.oneOf(UNIV));
}
/**
* Returns the liver_glucose axiom.
* @return liver_glucose
*/
public final Formula liver_glucose() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
return x1.in(uptakelg).implies(x1.in(releaselg).not()).forAll(x0.oneOf(UNIV));
}
/**
* Returns the sulfonylurea_effect axiom.
* @return sulfonylurea_effect
*/
public final Formula sulfonylurea_effect() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
return x1.in(drugi).and(x0.in(bcapacityex).not()).
implies(x1.in(bsecretioni)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the biguanide_effect axiom.
* @return biguanide_effect
*/
public final Formula biguanide_effect() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
return x1.in(drugbg).implies(x1.in(releaselg).not()).forAll(x0.oneOf(UNIV));
}
/**
* Returns the sn_cure_1 axiom.
* @return sn_cure_1
*/
public final Formula sn_cure_1() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(bsecretioni).and(x0.in(bcapacitysn)).
and(x0.in(qilt27)).and(x0.join(gt).in(conditionhyper));
return f0.implies(x1.in(conditionnormo)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the sn_cure_2 axiom.
* @return sn_cure_2
*/
public final Formula sn_cure_2() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(releaselg).not().and(x0.in(bcapacitysn)).
and(x0.in(qilt27).not()).and(x0.join(gt).in(conditionhyper));
return f0.implies(x1.in(conditionnormo)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the ne_cure axiom.
* @return ne_cure
*/
public final Formula ne_cure() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(releaselg).not().or(x1.in(uptakepg)).
and(x0.in(bcapacityne)).and(x1.in(bsecretioni)).and(x0.join(gt).in(conditionhyper));
return f0.implies(x1.in(conditionnormo)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the ex_cure axiom.
* @return ex_cure
*/
public final Formula ex_cure() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(uptakelg).and(x1.in(uptakepg)).
and(x0.in(bcapacityex).not()).and(x0.join(gt).in(conditionhyper));
return f0.implies(x1.in(conditionnormo.union(conditionhypo))).forAll(x0.oneOf(UNIV));
}
/**
* Returns the axioms xorstep1 through xorstep7.
* @return xorstep1_7
*/
public final Formula xorstep1_7() {
return UNIV.in(s0.union(s1).union(s2).union(s3)).
and(s0.intersection(s1).no()).
and(s0.intersection(s2).no()).
and(s0.intersection(s3).no()).
and(s1.intersection(s2).no()).
and(s1.intersection(s3).no()).
and(s2.intersection(s3).no());
}
/**
* Returns the normo axiom.
* @return normo
*/
public final Formula normo() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(bsecretioni).and(x0.in(bcapacitysn)).
and(x0.in(qilt27)).and(x0.join(gt).in(conditionhyper));
final Formula f1 = x1.in(releaselg).not().and(x0.in(bcapacitysn)).
and(x0.in(qilt27).not()).and(x0.join(gt).in(conditionhyper));
final Formula f2 = x1.in(releaselg).not().or(x1.in(uptakelg)).and(x0.in(bcapacitysn)).
and(x1.in(bsecretioni)).and(x0.join(gt).in(conditionhyper));
final Formula f3 = x1.in(uptakelg).and(x1.in(uptakepg)).
and(x0.in(bcapacityex)).and(x0.join(gt).in(conditionhyper));
return x1.in(conditionnormo).implies(f0.or(f1).or(f2).or(f3)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the axioms step1 through step4.
* @return step1_4
*/
public final Formula step1_4() {
return s1.intersection(qilt27).in(drugsu).
and(s1.intersection(UNIV.difference(qilt27)).in(drugbg)).
and(s2.in(drugbg.intersection(drugsu))).
and(s3.in(drugi.intersection(drugsu.union(drugbg)).union(drugi)));
}
/**
* Returns the axioms sucomp and insulincomp.
* @return *comp
*/
public final Formula comp() {
return drugsu.in(s1.intersection(qilt27).union(s2).union(s3)).
and(drugi.in(s3));
}
/**
* Returns the insulin_completion axiom.
* @return insulin_completion
*/
public final Formula insulin_completion() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(uptakelg.union(uptakepg));
return f0.implies(x1.in(drugi)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the uptake_completion axiom.
* @return uptake_completion
*/
public final Formula uptake_completion() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(releaselg).not();
return f0.implies(x1.in(uptakelg)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the su_completion axiom.
* @return su_completion
*/
public final Formula su_completion() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(bsecretioni);
return f0.implies(x1.in(drugsu).and(x0.in(bcapacityex).not())).forAll(x0.oneOf(UNIV));
}
/**
* Returns the bg_completion axiom.
* @return bg_completion
*/
public final Formula bg_completion() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x1.in(releaselg).not();
return f0.implies(x1.in(drugbg)).forAll(x0.oneOf(UNIV));
}
/**
* Returns the trans_ax1 axiom.
* @return trans_ax1
*/
public final Formula trans_ax1() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x0.in(s0).and(x1.in(conditionnormo).not());
final Formula f1 = x1.intersection(s1).some().and(x1.join(gt).in(conditionhyper));
return f0.implies(f1).forAll(x0.oneOf(UNIV));
}
/**
* Returns the trans_ax2 axiom.
* @return trans_ax2
*/
public final Formula trans_ax2() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x0.in(s1).and(x1.in(conditionnormo).not());
final Formula f1 = x1.intersection(s2).intersection(bcapacityne.union(bcapacityex)).some().
and(x1.join(gt).in(conditionhyper));
return f0.implies(f1).forAll(x0.oneOf(UNIV));
}
/**
* Returns the trans_ax3 axiom.
* @return trans_ax3
*/
public final Formula trans_ax3() {
final Variable x0 = Variable.unary("X0");
final Expression x1 = UNIV.difference(x0.join(gt));
final Formula f0 = x0.in(s2).and(x1.in(conditionnormo).not());
final Formula f1 = x1.intersection(s3).intersection(bcapacityex).some().
and(x1.join(gt).in(conditionhyper));
return f0.implies(f1).forAll(x0.oneOf(UNIV));
}
/**
* Returns the conjunction of all axioms.
* @return conjunction of all axioms.
*/
public final Formula axioms() {
return Formula.and(trans_ax2(), trans_ax3(), transitivity_gt(), decls(), irreflexivity_gt(),
normo(), xorcapacity1_4(), xorcondition1_4(), insulin_effect(),
liver_glucose(), sulfonylurea_effect(), biguanide_effect(), bg_completion(),
sn_cure_1(), sn_cure_2(), ne_cure(), ex_cure(), su_completion(),
xorstep1_7(), step1_4(), comp(), insulin_completion(),
uptake_completion(), trans_ax1());
}
/**
* Returns bounds for the given scope.
* @return bounds for the given scope.
*/
public final Bounds bounds(int n) {
assert n > 0;
final List<String> atoms = new ArrayList<String>(n);
for(int i = 0; i < n; i++)
atoms.add("a"+i);
final Universe u = new Universe(atoms);
final Bounds b = new Bounds(u);
final TupleFactory f = u.factory();
final TupleSet s = f.allOf(1);
b.bound(bcapacityne, s);
b.bound(bcapacityex, s);
b.bound(bcapacitysn, s);
b.bound(conditionhyper, s);
b.bound(conditionhypo, s);
b.bound(conditionnormo, s);
b.bound(drugi, s);
b.bound(uptakelg, s);
b.bound(uptakepg, s);
b.bound(releaselg, s);
b.bound(bsecretioni, s);
b.bound(drugbg, s);
b.bound(qilt27, s);
b.bound(s0, s);
b.bound(s1, s); b.bound(s2, s);
b.bound(s3, s);
b.bound(drugsu, s);
b.bound(n0,s);
b.bound(gt,f.allOf(2));
return b;
}
}