Я хочу формализовать формальные языки и их семантику в MMT и определить общее понятие семантики. эквивалентность двух семантик относительно. один синтаксис. Именно кодирование последнего оказывается идентификацией/склеиванием, что я понятия не имею, как это сделать в ММТ. Далее позвольте мне подробнее остановиться на моей конкретной настройке формализации.
Ниже приведена упрощенная формализация, показывающая мой подход. Основываясь на теории Meta
, объединяющей как логическую структуру LF, так и некоторую логику, я начинаю с Syntax
определения общего понятия выражений и типизации. Затем в Semantics
я определяю сверху семантику, здесь для простоты только дедуктивную семантику, т.е. отношение выводимости.
theory Meta : http://cds.omdoc.org/urtheories?LF=
// some logic giving us a type `prop` of propositions,
// a notion of derivability ⊦, biimplication ⇔ etc. ❙
include ?Logic ❙
❙
theory Syntax : ?Meta =
// type for expressions ❙
expr: type ❙
// a typing relation
typing_rel: expr ⟶ expr ⟶ prop ❙
// ... ❙
❚
theory Semantics : ?Meta=
include ?Syntax ❙
// a deductive semantics: "derivable e" says e is a theorem ❙
derivable: expr ⟶ prop ❙
❚
Учитывая это, я хочу определить эквивалентность двух таких семантик относительно. к одному синтаксису. Кодировать первую часть легко, см. ниже; но у меня возникли проблемы с кодировкой последнего требования.
theory SemanticsEquivalence : ?Meta =
structure syn : ?Syntax ❚
// how can I force sem1|?Syntax = sem2|?Syntax = syn ❙
structure sem1 : ?Semantics = ❚
structure sem2 : ?Semantics = ❚
is_equivalent: {e: syn/expr} ⊦ (sem1/derivable e) ⇔ (sem2/derivable e) ❙
❚
Как склеить/обозначить включения Syntax
как в sem1
, так и в sem2
?