А сами реализации подходят? Как я понимаю, occurrence typing - примерно то же самое, что и type narrowing, который есть например в TypeScript. И в тайпчекерах питона тоже используется, так что можно ещё на mypy и pyright посмотреть
на самом деле это вопрос бэкенда LLVM (генерация кода для редких архитектур с битовой адресацией или бит.операций для остальных), и походу там конь не валялся
Подстановками (копировать тело определения, заменяя имя переменной на значение); тащить в эвалуаторе параметром мапу (имя -> значение); индексы де Бройна (de Brujin); locally nameless; bound от Кметта
Ну, для compile-time я предложил, в рантайме -- смотря что пишем. В интерпретаторе таскаем environment в том или ином виде, в компиляторе -- разные есть варианты, смотря что за переменные.