Grob gesagt definieren Sie mit einer tiefen Einbettung einer Logik (1) einen Datentyp, der die Syntax für Ihre Logik darstellt, und (2) geben ein Modell der Syntax an und (3) beweisen, dass Axiome über Ihre Syntax in Bezug auf Respekt stimmen zum Modell. Bei einer flachen Einbettung überspringen Sie die Schritte (1) und (2) und beginnen einfach mit einem Modell und beweisen Verwicklungen zwischen Formeln. Dies bedeutet, dass flache Einbettungen normalerweise weniger Arbeit erfordern, um auf den Boden zu kommen, da sie Arbeit darstellen, die Sie normalerweise ohnehin mit einer tiefen Einbettung erledigen würden.
Bei einer tiefen Einbettung ist es jedoch in der Regel einfacher, reflektierende Entscheidungsverfahren zu schreiben, da Sie mit Formeln arbeiten, die tatsächlich eine Syntax haben, die Sie erneut verwenden können. Wenn Ihr Modell seltsam oder kompliziert ist, möchten Sie normalerweise nicht direkt mit der Semantik arbeiten. (Wenn Sie zum Beispiel Biorthogonalität verwenden, um das zulässige Schließen zu erzwingen, oder Modelle im Kripke-Stil verwenden, um Frame-Eigenschaften in Separationslogiken oder ähnlichen Spielen zu erzwingen.) Tiefe Einbettungen zwingen Sie jedoch mit ziemlicher Sicherheit dazu, viel über variable Bindungen und Substitutionen nachzudenken , die Ihr Herz mit Wut füllen wird, da dies (a) trivial und (b) eine nie endende Quelle der Belästigung ist.
Die richtige Reihenfolge, die Sie einhalten sollten, ist: (1) Versuchen Sie, mit einer flachen Einbettung auszukommen. (2) Wenn der Dampf ausgeht, versuchen Sie, die gewünschten Entscheidungsverfahren mithilfe von Taktiken und Zitaten durchzuführen. (3) Wenn Ihnen auch der Dampf ausgeht, geben Sie auf und verwenden Sie eine abhängig typisierte Syntax für Ihre tiefe Einbettung.
- Nehmen Sie sich für (3) ein paar Monate Zeit, wenn Sie zum ersten Mal ausgehen. Sie werden müssen vertraut machen mit der Phantasie des Beweis - Assistenten verfügt bleiben gesund. (Dies ist jedoch eine Investition, die sich im Allgemeinen auszahlt.)
- Wenn Ihr Proof-Assistent keine abhängigen Typen hat, bleiben Sie auf Stufe 2.
- Wenn Ihre Objektsprache selbst abhängig ist, bleiben Sie auf Stufe 2.
Versuchen Sie auch nicht, die Leiter allmählich nach oben zu klettern. Wenn Sie sich dazu entschließen, die Komplexitätsleiter zu erklimmen, gehen Sie jeweils einen Schritt weiter. Wenn Sie die Dinge Stück für Stück tun, erhalten Sie viele Sätze, die seltsam und unbrauchbar sind (z. B. erhalten Sie mehrere halbherzige Syntaxen und Sätze, die Syntax und Semantik auf seltsame Weise mischen) muss irgendwann rausschmeißen.
EDIT: Hier ist ein Kommentar, der erklärt, warum es so verlockend ist, nach und nach die Leiter hoch zu steigen und warum es (im Allgemeinen) zu Leiden führt.
A⋆BIA⋆B⟺B⋆A(A⋆B)⋆C⟺A⋆(B⋆C)(I⋆A)⋆(B⋆C)A⋆(B⋆(C⋆I))
⋆
Das ist wahr und funktioniert! Beachten Sie jedoch, dass die Konjunktion ebenso wie die Disjunktion ACUI ist. So werden Sie denselben Prozess in anderen Beweisen mit unterschiedlichen Listendatentypen durchlaufen, und dann werden Sie drei Syntaxen für unterschiedliche Fragmente der Trennungslogik haben, und Sie werden Metatheoreme für jedes von ihnen haben, die unvermeidlich unterschiedlich sein werden. und Sie werden feststellen, dass Sie nach einem Metatheorem suchen, das Sie für die Trennung von Konjunktion und Disjunktion bewiesen haben. Dann möchten Sie Syntaxen mischen und dann werden Sie verrückt.
Es ist besser, das größte Fragment auszuwählen, das Sie mit vertretbarem Aufwand handhaben können, und es einfach zu tun.