<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_act_dependency(self, son_id, parent_id, notif_failure_criteria, dep_period, inherits_parents):
 """ Add a logical dependency for actions between two hosts or services. :param son_id: uuid of son host :type son_id: str :param parent_id: uuid of parent host :type parent_id: str :param notif_failure_criteria: notification failure criteria, notification for a dependent host may vary :type notif_failure_criteria: list :param dep_period: dependency period. Timeperiod for dependency may vary :type dep_period: str | None :param inherits_parents: if this dep will inherit from parents (timeperiod, status) :type inherits_parents: bool :return: """

        if son_id in self:
            son = self[son_id]
        else:
            msg = "Dependency son (%s) unknown, configuration error" % son_id
            self.add_error(msg)
        parent = self[parent_id]
        son.act_depend_of.append((parent_id, notif_failure_criteria, dep_period, inherits_parents))
        parent.act_depend_of_me.append((son_id, notif_failure_criteria, dep_period,
                                        inherits_parents))

        # TODO: Is it necessary? We already have this info in act_depend_* attributes
        son.parent_dependencies.add(parent_id)
        parent.child_dependencies.add(son_id)