let rec group_verifies_filter f path g =
match f with
Group s -> Some (title_verifies_path s path g.group_title)
| Empty -> Some (g.group_groups = [] && g.group_items = [])
| And (f1, f2) ->
begin
match group_verifies_filter f1 path g,
group_verifies_filter f2 path g
with
_, Some false
| Some false, _ -> Some false
| None, _
| _, None -> None
| _ -> Some true
end
| Or (f1, f2) ->
begin
match group_verifies_filter f1 path g,
group_verifies_filter f2 path g
with
_, Some true
| Some true, _ -> Some true
| None, _
| _, None -> None
| _ -> Some false
end
| Not f ->
begin
match group_verifies_filter f path g with
None -> None
| Some b -> Some (not b)
end
| _ -> assert false