Я новичок, работающий над методами, доказывающими эквивалентность программы. Я прочитал несколько статей об определении логических отношений или симуляций, чтобы доказать, что две программы эквивалентны. Но я совершенно запутался в этих двух методах.
Я только знаю, что логические отношения определяются индуктивно, а симуляции основаны на коиндукции. Почему они определены такими способами? Каковы их плюсы и минусы соответственно? Какой из них выбрать в разных ситуациях?
Ответы:
У меня есть ответ на этот вопрос, который, возможно, является новым. Фактически, я все еще обдумываю это в течение прошлых 6 месяцев или около того, и это еще не было написано в газетах.
Общий тезис заключается в том, что принципы реляционного мышления, такие как «логические отношения», «симуляции» и даже «инварианты», являются проявлениями абстракции данных или сокрытия информации. Везде, где скрывается информация, эти принципы возникают.
Первыми, кто открыл это, были теоретики автоматов. Автоматы имеют скрытое состояние. Таким образом, вам нужны реляционные рассуждения, чтобы говорить об их эквивалентности. Теоретики автоматов какое-то время боролись с гомоморфизмами, отказались и выдвинули понятие «реляционное покрытие», которое является формой симуляционных отношений.
Милнер подхватил эту идею в малоизвестной, но очень фундаментальной статье под названием « Алгебраическое понятие симуляции между программами » в 1971 году. Хоар знал об этом и использовал ее, придумав « Доказательство правильности представлений данных » в 1972 году (но использовал функции абстракции вместо отношений, потому что он думал, что они были "проще"). Позже он отозвал утверждение о простоте и вернулся к использованию отношений в « Уточнение уточнения данных ». Рейнольдс использовал реляционные рассуждения в « Ремесле программирования»Глава 5 (1981). Он думал, что отношения были более естественными и общими, чем функции абстракции. Если вы вернетесь и прочитаете эту главу, вы обнаружите, что идеи реляционной параметризации скрываются в ожидании открытия. Конечно же, два года спустя, Рейнольдс опубликовал «Типы, абстракции и параметрический полиморфизм» (1983).
Похоже, что все эти идеи не имеют ничего общего с типами, но они действительно имеют. Языки и модели с состоянием имеют встроенную абстракцию данных. Вам не нужно определять «абстрактный тип данных», чтобы скрыть информацию. Вы просто объявляете локальную переменную и скрываете ее. Мы можем научить его первокурсникам на уроках Java в первые несколько недель. Нет пота.
Итак, моделирование и реляционная параметричность - это, по сути , одна и та же идея . Это не просто внешнее сходство. Первый предназначен для языков с состоянием, где есть встроенная абстракция данных. Последнее сделано для языков без состояний, где абстракция данных получается через переменные типа.
А как насчет логических отношений тогда? На первый взгляд логические отношения представляются более общей идеей. В то время как параметричность говорит о том, как связать переменные типа в одной и той же модели, логические отношения, по-видимому, связывают типы в разных моделях. (Дейв Кларк написал блестящее изложение этого ранее.) Но я чувствую (и это все еще необходимо продемонстрировать), что это пример какой-то формы параметричности высшего типа, которая еще не сформулирована. Оставайтесь с нами для большего прогресса в этом направлении.
[Примечание добавлено] Связь между логическими отношениями и симуляциями обсуждается в нашей недавней статье « Логические отношения и параметризация: программа Рейнольдса для теории категорий и языков программирования» .
источник
functor
Одно из ключевых отличий состоит в том, что логические отношения используются в качестве метода для показа того, что класс программ (например, входные данные для компилятора) соответствуют другому классу программ (например, выходным данным компилятора), тогда как используются отношения моделирования показать соответствие между двумя программами.
Сходство между этими двумя понятиями состоит в том, что они оба определяют отношение, используемое для отображения соответствия между двумя различными объектами. В некотором смысле логическое отношение можно рассматривать как отношение моделирования, которое индуктивно определяется в синтаксисе типов. Но существуют разные виды симуляционных отношений.
Логические отношения могут использоваться для отображения соответствия между языком, таким как ML, и его переводом на язык ассемблера, как в статье, которую вы читаете. Логическое отношение определяется индуктивно на структуре типа. Логическое отношение обеспечивает композиционное средство для демонстрации, например, правильности перевода, показывая, что перевод корректен для каждого конструктора типа. В типах функций условие условия корректности будет выглядеть примерно так: перевод этой функции переводит хорошо переведенный ввод в хорошо переведенный вывод.
Логические отношения являются универсальной техникой для языков, основанных на лямбда-исчислении. Другие применения логических отношений включают ( отсюда ): характеристику лямбда-определимости, соотнесение денотационных семантических определений, характеристику параметрического полиморфизма, моделирование абстрактной интерпретации, проверку представлений данных, определение полностью абстрактной семантики и моделирование локального состояния в языках высшего порядка.
Симуляционные отношения обычно используются, чтобы показать эквивалентность двух программ. Обычно такие программы производят какое-то наблюдение, такое как отправка сообщений по каналам. Одна программа P моделирует другую Q, если P может делать все, что может делать Q, хотя, возможно, и больше.
Грубо говоря, бисимуляция - это два симуляционных отношения, соединенных вместе. Вы показываете, что программа P и имитирует программу Q, а эта программа Q может имитировать программу P, и у вас есть бисимуляция, хотя обычно присутствуют дополнительные условия. Википедия о бисимуляции является хорошей (более точной) отправной точкой. Существуют тысячи вариантов этой идеи, но это фундаментальная идея, которая была заново изобретена в более или менее той же форме, что и информатика, модальная логика и теория моделей. Sangiorgi в статье дает замечательную историю идеи.
Одна статья, устанавливающая связь между этими двумя понятиями, - это заметка Энди Питтса о логических отношениях между семантикой и синтаксисом , в которой используются логические отношения, в конечном счете, семантическое понятие, определенное синтаксически, для доказательства определенного свойства аппликативной бисимуляции , которое является чисто синтаксическим понятием.
источник
Два типа отношений, кажется, используются в разных контекстах. Логические симуляции для типизированных языков и симуляционных отношений при работе с исчислениями процессов или модальными логиками, интерпретируемыми по переходным системам. Дейв Кларк дал много интуитивного объяснения, поэтому я просто добавлю несколько указателей, которые могут помочь.
Была проведена работа по характеристике обоих понятий с использованием абстрактной интерпретации. Это может быть не то, что вы хотите, но, по крайней мере, оба понятия рассматриваются в одной математической структуре.
Самсон Абрамский использовал логические отношения для доказательства правильности и прекращения анализа строгости для ленивого лямбда-исчисления ( Абстрактная интерпретация, Логические отношения и Кан-расширения ). Он также показал, что логические отношения определяют функции абстракции в смысле связи Галуа абстрактной интерпретации. Совсем недавно Backhouse и Backhouse показали, как построить соединения Galois для типов высшего порядка из соединений Galois для базовых типов, и что эти конструкции могут быть эквивалентно описаны с помощью логических отношений ( Logical Relations и Galois Connections ). Таким образом, в конкретном контексте типизированных функциональных языков эти два понятия эквивалентны.
Имитационные отношения характеризуют сохранение свойств между структурами Крипке для различных модальных и временных логик. Вместо типов у нас есть модальности в логике. Симуляционные отношения также определяют связи Галуа и, следовательно, абстракции. Можно спросить, имеют ли эти абстракции специальные свойства. Ответ заключается в том, что стандартные абстракции являются надежными, а абстракции, основанные на отношениях моделирования, завершены. Понятие полноты относится к связям Галуа, которые могут не совпадать с интуитивной интерпретацией. Это направление работы было разработано Дэвидом Шмидтом ( Структурно-сохраняющие бинарные отношения для абстракции программы ), а также Франческо Ранзато и Франческо Таппаро ( Обобщенное сильное сохранение посредством абстрактной интерпретации ).
источник
Я бы сказал, что эти два понятия несколько расплывчаты. И то, и другое касается бинарных отношений вычислительных механизмов, которые каким-то образом воплощают понятие равенства. Логические отношения определяются индукцией структуры типов, в то время как симуляции могут быть определены, как вы хотите, но термин намекает на коиндукцию.
источник