def METHOD_NAME(self, node: AssignableNode) -> FrozenSet[AssignableNode]:
    """
    Performs one propagation step according to rule 4:
        is_cause(c, x) <- exists y, z : `x = y.z` in graph and is_cause(c, y)
        (If x refers to y.z but y is unset, this blocks execution. If c is the cause for y being unset,
            it is the cause for x being unset)
    """
    return frozenset(
        node
        for assignment in node.assignable_assignments
        if isinstance(assignment.rhs, AttributeNodeReference)
        for node in assignment.rhs.instance_var_ref.nodes()
    )