def make_po_tag_dict(pos, pofilter=lambda po: True):
    """Create a predicate tag dictionary from a a list of proof obligations.

    Args:
      pos: list of proof obligations (primary or supporting)
      pofilter: predicate that specifies which proof obligations to include
    Returns:
      dictionary that organizes the proof obligations by predicate tag
    """
    result = {}
    for po in pos:
        if pofilter(po):
            tag = po.get_predicate_tag()
            if tag not in result:
                result[tag] = []
            result[tag].append(po)
    return result