Одно из ключевых отличий состоит в том, что логические отношения используются в качестве метода для показа того, что класс программ (например, входные данные для компилятора) соответствуют другому классу программ (например, выходным данным компилятора), тогда как используются отношения моделирования показать соответствие между двумя программами.
Сходство между этими двумя понятиями состоит в том, что они оба определяют отношение, используемое для отображения соответствия между двумя различными объектами. В некотором смысле логическое отношение можно рассматривать как отношение моделирования, которое индуктивно определяется в синтаксисе типов. Но существуют разные виды симуляционных отношений.
Логические отношения могут использоваться для отображения соответствия между языком, таким как ML, и его переводом на язык ассемблера, как в статье, которую вы читаете. Логическое отношение определяется индуктивно на структуре типа. Логическое отношение обеспечивает композиционное средство для демонстрации, например, правильности перевода, показывая, что перевод корректен для каждого конструктора типа. В типах функций условие условия корректности будет выглядеть примерно так: перевод этой функции переводит хорошо переведенный ввод в хорошо переведенный вывод.
Логические отношения являются универсальной техникой для языков, основанных на лямбда-исчислении. Другие применения логических отношений включают ( отсюда ): характеристику лямбда-определимости, соотнесение денотационных семантических определений, характеристику параметрического полиморфизма, моделирование абстрактной интерпретации, проверку представлений данных, определение полностью абстрактной семантики и моделирование локального состояния в языках высшего порядка.
Симуляционные отношения обычно используются, чтобы показать эквивалентность двух программ. Обычно такие программы производят какое-то наблюдение, такое как отправка сообщений по каналам. Одна программа P моделирует другую Q, если P может делать все, что может делать Q, хотя, возможно, и больше.
Грубо говоря, бисимуляция - это два симуляционных отношения, соединенных вместе. Вы показываете, что программа P и имитирует программу Q, а эта программа Q может имитировать программу P, и у вас есть бисимуляция, хотя обычно присутствуют дополнительные условия. Википедия о бисимуляции является хорошей (более точной) отправной точкой. Существуют тысячи вариантов этой идеи, но это фундаментальная идея, которая была заново изобретена в более или менее той же форме, что и информатика, модальная логика и теория моделей. Sangiorgi в статье дает замечательную историю идеи.
Одна статья, устанавливающая связь между этими двумя понятиями, - это заметка Энди Питтса о логических отношениях между семантикой и синтаксисом , в которой используются логические отношения, в конечном счете, семантическое понятие, определенное синтаксически, для доказательства определенного свойства аппликативной бисимуляции , которое является чисто синтаксическим понятием.