Warning: session_start(): open(/var/lib/php/sessions/sess_5lfjt7mrvi1sh1j82f8h2cf159, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
/*
Event 1 happens before event 2 :=
vars {event 1, event 2, X, Y}
Event 1 happens at day X.
Event 2 happens at day Y.
X < Y.
*/
sclass Obj {
class Fact {}
record StatementsWithVars(Set vars, L statements) {
*(Fact... statements) {
this.statements = asList(statements);
collectVars();
}
void collectVars {
vars = new Set;
fOr (Fact f : statements)
vars.addAll(print("Vars", findVars(f)));
}
}
L scanObject(O o) {
ret filter(nonStaticNonPrimitiveNonTransientFieldValues(o),
v -> v != null && !v instanceof S && v != Obj.this);
}
L findVars(Fact statement) {
Cl out = transitiveHullOfFunction(o -> scanObject(o), statement);
print(classNames(out));
ret instancesOf Var(out);
}
record $HappensBefore$(A event1, B event2) extends Fact {}
record $HappensAtDay$(A event, B y) extends Fact {}
record $LessThan$(A x, A y) extends Fact {}
// Enrolling happens before graduation.
// Enrolling happens at day 200.
// Graduation happens at day 100. // Contradiction!
L facts = ll(
new $HappensBefore$("enrolling", "graduation"),
new $HappensAtDay$("enrolling", 200),
new $HappensAtDay$("graduation", 200)
);
void rule1($HappensBefore$ in) {
O event1 = in.event1, event2 = in.event2;
NamedVar X = NamedVar("X"), Y = NamedVar("Y");
emit(new StatementsWithVars(
new $HappensAtDay$(event1, X),
new $HappensAtDay$(event2, Y),
new $LessThan$(X, Y)
));
}
*() {
pnlWithHeading("Facts", facts);
for (Fact f : facts)
callOpt(this, 'rule1, f);
}
}
p-exp { new Obj; }