def build_word_net(phrase_list):
    """build a word net (discrimination net) from a list of phrases.
    No normalization of words is performed, except case.
    
    End of phrase is marked with {'':{}}. Eventually, we stop at key ''.
    
    >>> build_word_net(['this and','this or','that and','this or that'])
    {'this': {'and': {'': {}}, 'or': {'': {}, 'that': {'': {}}}}, 'that': {'and': {'': {}}}}
    """
    def to_dict(ls):
        if not(ls):
            return {}
        return {ls[0] : to_dict(ls[1:])}
    def one_dict(phrase):
        od = to_dict(phrase.lower().split()+[''])
        return od
    def add_dict(d1,od): 
        if not(od):
            return d1
        key = [*od][0] #first key
        if key in d1:
            # N.B. avoid equality to preserve scoping
            d1.__setitem__(key,add_dict(d1[key],od[key]))
        else:
            d1.setdefault(key,od[key])
        return d1
    acc = {}
    for phrase in phrase_list:
        acc = add_dict(acc,one_dict(phrase))
    return acc