def is_fast(protocol, valuation, disabled):
    graph, vertices, edges = transformation_graph(protocol, valuation,
                                                  disabled)
    components, _, is_bottom = label_components(graph, attractors=True)

    U = {q for q in vertices if not is_bottom[components[vertices[q]]]}
    R = {q: set() for q in vertices}
    expV = set()

    for (p, q) in edges:
        if components[vertices[p]] != components[vertices[q]]:
            for t in edges[p, q]:
                expV.add(t.pre)

                if t.pre not in disabled:
                    for r in (set(t.pre) & U):
                        R[r].add(t.pre)

    for q in U:
        formula = Formula(valuation, disabled)
        formula.assert_some_pair_present(expV)
        formula.assert_some_states_present({q})

        if not formula.implies_some_present_tautology_check(R[q]):
            return False

    return True