Skolems

Sometimes you want to state a nested fact, such as our parts assembly example from Facts:

Assembly123 [ hasPart -> Part1 [ weight -> 10.0 ] ].

Often, the nested identifiers, here Part1, are not very interesting. They may not be referenced anywhere else, and it can be tedious to come up with names for them. Ideally, you just want to state that there is some value there, with certain properties.

In this situation, you can use Flora’s skolems:

Assembly123 [ hasPart -> \# [ weight -> 10.0 ] ].

The \# symbol is called a skolem symbol, and essentially generates a unique identifier when first used. You can use this anonymous skolem symbol several times in the same fact, and a new identifier is generated for each one.

Warning: Do not be tempted to instead use an anonymous variable, ? in these situations. This will have a completely different (and incorrect!) meaning. Recall that facts are universally quantified on the outside. Therefore, with a variable in the place of the skolem, the fact says that everything is a part of Assembly123!

For more on skolems, see the section “Skolem Symbols” in the Flora-2 Manual [1].

[1]Kifer, Michael, Guizhen Yang, Wan Hui, and Chang Zhao. 2014. Flora-2: User’s Manual. 1.0. Stony Brook University, Stony Brook: Department of Computer Science.