Задача для любителей теории категорий: в Emacs есть completion и есть narrowing. И интуитивно кажется, что эти две задачи двойственны друг другу.
Completion выглядит явно как задача построения продолжения, она же задача построения ретракции: множество A «полных» значений (например, строк, которые надо получить) вкладывается в множество X «неполных» (в этом же примере — строк, с которых осмысленно начать). completion функцию можно рассматривать либо как ретракцию X → A, которая неполной строке так или иначе сопоставляет полную, либо (эквивалентно) как способ любую функцию A → Y продолжить до X → Y : если мы можем что-то сделать с полной строкой, рабочий комплишн означает, что можем это сделать и начав с неполной.
Интуитивно мне кажется, что narrowing (выбор одного кандидата из списка) это двойственная задача, но я могу и заблуждаться. Сформулировать соответствующую двойственную задачу построения поднятия, или, эквивалентно, задачу построения сечения, я не могу.