-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Прогонка и встраивание функций в Рефале-5λ #122
Comments
Турчин формулировал свои эквивалентные преобразования (см. выше) для L-выражений, которые представляют собой жёсткие выражения, в которых разрешены повторные s-переменные и запрещены любые t-переменные. Я сегодня спросил в рассылку [email protected], можно ли добавить в алгоритмы эквивалентных преобразований неодноимённые t-переменные: https://www.mail-archive.com/[email protected]/msg00100.html Андрей Климов мне ответил, что можно: https://www.mail-archive.com/[email protected]/msg00101.html Никаких теоретических ограничений на это нет, просто Турчин ради компактности и бритвы Оккама исключил и их тоже. |
Ещё одна хорошая статья по нашей теме:
В нашей терминологии Климов и Романенко в статье предлагали встраивание и прогонку единственных сужений (см. статью) для всех функций, неограниченную прогонку — для явно указанных пользователем. Интересно то, что при встраивании (они это называют частичным вычислением) Климов и Романенко допускают обобщённое сопоставление с произвольным образцом (включая открытые e-переменные). Стоит подумать об этом. Прогонка единственных сужений также нам может быть интересна. |
@madnaaaaas, в работе
важно прочитать и понять «Введение» и «1. Содержательная сущность прогонки». Если кратко — базисный Рефал не замкнут относительно преобразования прогонки, т.е. результат прогонки не выразим средствами базисного Рефала. Поэтому Турчин перешёл к ограниченному Рефалу, в котором запрещены t-переменные и открытые и повторные e-переменные. Прогонка в этом подмножестве замкнута (хотя туда можно добавить неповторные t-переменные, см. выше). Романенко предлагает другой вариант — расширение языка до надмножества, на котором прогонка тоже будет замкнута (ещё можно посмотреть вот сюда: http://pat.keldysh.ru/~roman/doc/1987-Romanenko--Progonka_dlya_programm_na_Refale-4.pdf, только введение и заключение). В нашем случае на выходе обессахаривателя и на входе back-end’а мы имеем базисный Рефал с условиями (#17) и конструктором замыкания. Поэтому предлагается осуществлять встраивание и прогонку только для жёстких выражений с повторными s-переменными, они же L-выражения с неповторными t-переменными. |
По поводу прогонки с t-переменными. Есть вот такая работа:
Правда, это больше похоже не на курсовую работу, а на черновик, что вполне логично — курсовая остаётся на кафедре, а черновик может отстаться у студента (или научрука). В общем, в этой работе L-выражения пополняются неповторными t-переменными и v-переменными (непустыми e-переменными). Работу лучше не читать — в ней громоздкие математические доказательства, из которых строится математизированное описание алгоритма. На самом деле, если чисто интуитивно добавить t-переменные в эквивалентные преобразования Турчина, получится не хуже. Кроме того, Сергей Абрамов в работе также ставил задачу вычисления разности между классами, задаваемыми образцами и рестрикциями (неравенствами), что тоже сильно усложнило его алгоритм. |
Задачу забрал себе, исключил веху study spring 2018, поскольку Дамир не восстановился. |
Готово! Если вдруг всплывут ошибки, на них заведу отдельные заявки. |
@InfiniteDisorder попросил открыть задачу. |
Презентация и РПЗ по реализации прогонки и встраивания (#122)
Теперь при подстановке сужений проверяется содержимое замороженных скобок: если оно изменилось, скобка оттаивает, иначе остаётся как есть. Ранее подогрев включался в зависимости от контекста подстановки, и включался неправильно, из-за чего достигалась недостаточная глубина оптимизации.
Эта задача — подзадача для #91. Подробнее о встраивании и прогонке см. в #91.
Основные расширения синтаксиса
$ENTRY
,$INLINE
и т.д.)$INLINE
перед именем функции (по аналогии с$ENTRY
):*$INLINE
(уточнение: эту часть задачи делаю я, @Mazdaywik):Нюанс — встраивание и прогонка
В задаче #91 предлагается реализовать механизм прогонки с расщеплением предложений:
Достоинство данного механизма: повышается глубина оптимизации. Недостаток — для рекурсивных встраиваемых функций он будет зацикливаться. Поэтому предлагается ввести два ключевых слова:
$INLINE
для простого встраивания (не меняющего левую часть) и$DRIVE
для прогонки (соответственно,*$INLINE
и*$DRIVE
для Рефала-5λ).Список литературы
Теоретической основой данной задачи являются прежде всего две работы Турчина.
Следует иметь ввиду, что в этих материалах рассматриваются L-выражения — жёсткие выражения без t-переменных. При реализации прогонки в Простом Рефале следует описанные алгоритмы аккуратно расширить на t-переменные.
The text was updated successfully, but these errors were encountered: