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