def simple_closure(s, implications):
    """
    Input:  A set of implications and an attribute set s
    Output: The closure of s with respect to implications
    
    Examples
    ========
    
    >>> from fca.implication import Implication
    >>> cd2a = Implication(set(('c', 'd')), set(('a')))
    >>> ad2c = Implication(set(('a', 'd')), set(('c')))
    >>> ab2cd = Implication(set(('a', 'b')), set(('c', 'd')))
    >>> imps = [cd2a, ad2c, ab2cd]
    >>> print simple_closure(set('a'), imps)
    set(['a'])
    >>> print simple_closure(set(), imps)
    set([])
    >>> simple_closure(set(['b', 'c', 'd']), imps) == set(['a', 'b', 'c', 'd'])
    True
    
    >>> a2bc = Implication(set(('a')), set(('b', 'c')))
    >>> ce2abd = Implication(set(('c', 'e')), set(('a', 'b', 'd')))
    >>> de2abc = Implication(set(('d', 'e')), set(('a', 'b', 'c')))
    >>> cd2abe = Implication(set(('c', 'd')), set(('a', 'b', 'e')))
    >>> imps = [a2bc, ce2abd, de2abc, cd2abe]
    >>> simple_closure(set(['b', 'a']), imps) == set(['a', 'b', 'c'])
    True
    >>> simple_closure(set(['a', 'e']), imps) == set(['a', 'b', 'c', 'd', 'e'])
    True
    >>> imps = [ce2abd, a2bc, de2abc, cd2abe]
    >>> simple_closure(set(['a', 'e']), imps) == set(['a', 'b', 'c', 'd', 'e'])
    True
    
    """
    unused_imps = implications[:]
    new_closure = s.copy()
    changed = True
    while changed:
        changed = False
        for imp in unused_imps:
            if imp.premise <= new_closure:
                new_closure |= imp.conclusion
                changed = True
                unused_imps.remove(imp)
    return new_closure