March 25, 2025

DSL X соответствует метамодели Y при интерпретации Z

Введём структуру для декларативного утверждения:

"DSL X соответствует метамодели Y при интерпретации Z"
structure Interpretation where
  dsl         : String      -- например, "MyER"
  metamodel   : String      -- например, "MOF"
  mapping     : MetaMapping
  validity    : Prop        -- опционально: можно добавить предикат соответствия

Можно будет писать:

def interp_ER_MOF : Interpretation :=
  { dsl := "ER",
    metamodel := "MOF",
    mapping := ER_to_MOF_mapping,
    validity := sorry }  -- или реальное утверждение

Интерпретация Z — это, по сути, мост между DSL X и метамоделью Y. Без неё «соответствие» остаётся лишь декларацией. А с ней — становится осмысленным: что мы именно понимаем под этим соответствием?


🔧 Формально (в контексте Lean):

"DSL X соответствует метамодели Y при интерпретации Z"
означает: Z — это правило, которое объясняет, как конструкции из X реализуются средствами Y.

📌 Реальный пример (из моделирования):

Ситуация:

У нас есть ER-диаграмма (DSL X), и мы говорим, что она «соответствует» MOF (метамодель Y).

Но! В MOF нет «Entity» и «Relationship». Там есть только Class, Property, Association, и т.п.
Поэтому мы не можем сказать просто: "ER соответствует MOF".
Нужно уточнить Z — интерпретацию, которая скажет:

"Entity интерпретируется как MOF::Class с property attributes;" "Attribute интерпретируется как MOF::Property;" "Relationship интерпретируется как MOF::Association между двумя MOF::Class, где source и target — по имени".

Тогда уже можно:

  • проверять соответствие конкретной ER-модели требованиям MOF (с учётом этой интерпретации),
  • преобразовывать ER-модели в MOF-подобные структуры,
  • доказывать, что они корректны именно при этой интерпретации Z.

💬 Более житейский пример:

Представь, у тебя есть таблица в Excel с колонками Название, Цена, Категория.
Ты говоришь: "Эта таблица — это продуктовая база данных (DSL X)".

А твой собеседник отвечает:
"Я мыслю в терминах RDF-графов (Y). Докажи мне, что твоя таблица вообще является базой знаний."

Ты тогда вводишь интерпретацию Z:

"Я читаю строку как Product — класс, Название как hasLabel, Цена как hasPrice, Категория как belongsToCategory."

Теперь вы можете говорить на одном языке.