Our problem setting is the learning from failures (LFF) [1]} setting.
LFF uses hypothesis constraints to restrict the hypothesis space.
Let \(\mathcal {L}\)  be a language that defines hypotheses, i.e. a meta-language.
For instance, consider a meta-language formed of two literals h_lit/4 and b_lit/4 which represent head and body literals respectively.
With this language, we can denote the clause last(A,B) \(\leftarrow \)  tail(A,C), head(C,B) as the set of literals {h_lit(0,last,2,(0,1)), b_lit(0,tail,2,(0,2)), b_lit(0,head,2,(2,1))}.
The first argument of each literal is the clause index, the second is the predicate symbol, the third is the arity, and the fourth is the literal variables, where 0 represents A, 1 represents B, etc.
A hypothesis constraint is a constraint expressed in \(\mathcal {L}\) .
Let \(C\)  be a set of hypothesis constraints written in a language \(\mathcal {L}\) .
A set of definite clauses \(H\)  is consistent with \(C\)  if, when written in \(\mathcal {L}\) , \(H\)  does not violate any constraint in \(C\) .
For instance, the constraint
\(\leftarrow \)  h_lit(0,last,2,(0,1)), b_lit(0,last,2,(1,0))
would be violated by the definite clause last(A,B) \(\leftarrow \)  last(B,A).
Let \(\mathcal {H}\)  be a hypothesis space.
We denote as \(\mathcal {H}_{C}\)  the subset of \(\mathcal {H}\)  which does not violate any constraint in \(C\) .
