def addtosigma_dfa(Din, addition):
    """Given a DFA Din and a proposed addition to its Sigma,
       if there is an overlap with the existing Sigma ,
       complain and reject (possible user typo); else
       add to Din's Sigma and return the new D. Useful when
       we define a DFA via markdown and later want to 
       add extra inputs (Sigma) that aren't decoded.
    """
    for symb in addition:
        assert(type(symb)==str and len(symb)==1
              ),("Adding non-string or longer than 1 string " +
                  symb + " in addtosigma_dfa.")
    assert(Din["Sigma"] & addition == set()
          ),("Din[Sigma] already has these symbols: "+
             str(Din["Sigma"] & addition))
    D = Din.copy()
    D["Sigma"] = Din["Sigma"] | addition
    return D