The utility-tools program is a set of utilities to manage rules. It currently provides three services:

single-piece head decomposition
transforms a set of rules into a set of rules with a single-piece head. In other words, it splits rule heads as much as possible while keeping logical equivalence and without introducing new predicates;
atomic-head decomposition
transforms a set of rules into a set of atomic-head rules. This requires to introduce new predicates. The atomic-head decomposition first performs a single-piece head decomposition to minimize the number of added predicates.
labeler
adds an annotation into the label of rules when they satisfy one of the patterns below:
  • CI: Concept Inclusion - B(x) :- A(x)
  • RI: Role Inclusion - r(x,y) :- p(x,y)
  • Inv: Inverse Role - r(y,x) :- p(x,y)
  • Dom: Domain - A(x) :- p(x,y)
  • Rng: Range - A(y) :- p(x,y)
  • MR: Mandatory Role - p(x,y) :- A(x)
  • IMR: Inverse Mandatory Role - p(x,y) :- A(y)
  • ERC: Existential quantification in rule heads - p(x,y), B(y) :- A(x)
  • IERC: ERC with Inverse role - p(y,x), B(y) :- A(x)
  • Trans: Transitivity - p(x,z) :- p(x,y),p(y,z)
  • RC: Role Composition - s(x,z) :- p(x,y),r(y,z)
  • Func: Functional dependency - x = y :- BODY
  • DC: Disjoint Concept - ! :- A(x), B(x)
  • DR: Disjoint Role - ! :- p(x,y),r(x,y)
  • NC: Negative Constraint - ! BODY
This allows to easily extract specific kinds of rules from a rule set.

Getting started

Compute single-piece head rules

java -jar utility-tools-*.jar -p < ./example1.dlp

Compute atomic-head rules

java -jar utility-tools-*.jar -a < ./example1.dlp

Label rules

java -jar utility-tools-*.jar -l < ./example1.dlp
desc="Utility tools is a set of utils to manage rules." keywords="Tools, rules, utils, atomic-head, singlepiece-head, singlepiece, atomic rule, datalog+" -%]