from typing import Tuple


def validate_comp_elements(alloy_comp: list) -> Tuple[bool, list]:
    """We validate the alloy has all the elements that will be needed by the
    simulation algorithms using a hashed dictionary as it is much faster.

    Args:
        alloy_comp: a list of Alloy composition objects (i.e.
                    {"symbol": "C", "weight": 1.0})

    Returns:
        A tuple response whether the validation succeeded and the missing
        elements if it did not.
    """
    valid_elements = {
        'C': False,
        'Mn': False,
        'Ni': False,
        'Cr': False,
        'Mo': False,
        'Si': False,
        'Co': False,
        'W': False,
        'As': False,
        'Fe': False
    }

    for el in alloy_comp:
        if el['symbol'] in valid_elements.keys():
            valid_elements[el['symbol']] = True

    # all() returns True if all values in the dict are True
    # If it does not pass, we build up a message and respond.
    if not all(el is True for el in valid_elements.values()):
        # We build up a list of missing elements for the response.
        missing_elem = []
        for k, v in valid_elements.items():
            if not v:
                missing_elem.append(k)
        # The validation has failed so we return False and the missing elements
        return False, missing_elem
    # The validation has succeeded
    return True, []