let fold_join_predicate fold f s =
try
match
fold
(fun acc e ->
match f e with
| Unknown -> raise Stop
| v -> match acc with
| None -> Some v
| Some acc -> Some (join_predicate acc v)
)
None
s
with
| None -> True
| Some v -> v
with Stop -> Unknown