Chapter 3 Formula Functions

Beatrice wants to analyze her rule set. In particular, she is interested in the variable distribution: How often do given variables each occur in the set of rules?

Luckily for her there is a LogicNG function to count the number of occurrences of each variable in a formula: VariableProfileFunction (c.f. the function getVariableOccurrences in the tutorial code). Beatrice uses the VariableProfileFunction in the following way:

Map<Variable, Integer> variables2Occurrences =
        data.f.and(formulas).apply(new VariableProfileFunction());

SortedMap<Integer, List<Variable>> occurrences2Vars = new TreeMap<>();
variables2Occurrences.forEach((var, occ) ->
        occurrences2Vars.computeIfAbsent(occ, y -> new ArrayList<>()).add(var));

The VariableProfileFunction computes a map from each variable to its occurrence:

{r3=1, r2=1, color=1, saddle=1, h1=2, frontWheel=1, h3=3, f1=3, h2=2, h5=4, f3=5,
 h4=2, f2=3, b1=2, luggageRack=1, b3=2, b2=3, wf32=5, wb32=3, s2=2, s1=3, wf29=4,
 s4=2, s3=2, wf27=4, wb29=3, wf26=4, wb27=3, wf24=3, backWheel=1, bell=2, c2=2,
 c1=2, c4=2, handlebar=1, wb26=3, r1=1, frame=2}

In order to sort the variables by the number of their occurrences, she creates the map occurrences2Vars. The result is:

 1=[r3, r2, color, saddle, frontWheel, luggageRack, backWheel, handlebar, r1],
 2=[h1, h2, h4, b1, b3, s2, s4, s3, bell, c2, c1, c4, frame],
 3=[h3, f1, f2, b2, wb32, s1, wb29, wb27, wf24, wb26],
 4=[h5, wf29, wf27, wf26], 5=[f3, wf32]

For more information about formula functions check out the relevant chapter in the documentation.