Ich glaube, es wäre für Sie von Vorteil, die Theorie der abstrakten Interpretation nachzuschlagen, die sehr gründliche Antworten auf ähnliche Fragen im etwas anderen Bereich der gitterbasierten Programmanalyse liefert.
Mir scheint, Sie verwenden ein Framework, das auf Algebren basiert. Ich verwende hier das Wort Algebra im Sinne der universellen Algebra, wobei ich davon ausgehe, dass Einschränkungen für die Struktur der Algebra durch Gleichheiten zwischen Begriffen gegeben sind. Es gibt zwei verschiedene Sinne, in denen Abstraktionen (oder Hierarchien) ins Bild kommen.
- Abstraktion als Beziehung zwischen zwei spezifischen Algebren. Vielleicht möchten Sie sagen, dass eine Algebra eine reichhaltigere Struktur als eine andere Algebra hat oder dass jedes Problem, das Sie mit einer Algebra lösen können, mit der anderen gelöst werden kann. Diese Art von Beziehung ist das, was formalisierte Kaufhomomorphismen oder eine andere Abbildung zwischen Algebren wäre.
- Abstraktionshierarchien als Familien von Algebren. In Ihrem Fall wären dies Familien von Deltamuskeln mit bestimmten Eigenschaften. Betrachten Sie als allgemeineres Beispiel alle teilweise geordneten Mengen. Wir können uns Gitter, Verteilungsgitter und Boolesche Gitter als eine Folge von Unterfamilien vorstellen, die reichere Eigenschaften haben.
Die beiden Begriffe sind eng miteinander verbunden, aber unterschiedlich.
Abstraktion zwischen zwei Strukturen
Die Erkenntnis der abstrakten Interpretation besteht darin, dass es nützlich ist, die von Ihnen betrachteten Strukturen mit einem Ordnungsbegriff auszustatten. Betrachten Sie zwei Strukturen
( N , F N ) f M : M → M f N : N → N( M., fM.) und mit und als interessierenden Operationen.( N.,fN.)fM.:: M.→ M.fN.:: N.→ N.
Ein Homomorphismus im Sinne der universellen Algebra würde ungefähr so aussehen:
h ( f M ( a ) ) = f N ( h ( a ) )h : M.→ N. ist eine Funktion, die die Gleichheit .h ( fM.( a ) ) = fN.( h ( a ) )
Wir können die beiden oben erscheinenden Strukturen als vorbestellte Strukturen betrachten
( N , = , f N )(M., = , fM.) und(N., = , fN.)
und der Homomorphismus, den wir umschreiben können, um eine befriedigende Funktion zu sein
- dass wenn dann undh ( a ) = h ( b )a = bh ( a ) = h ( b )
- für alle in ist .M h ( f M ( a ) ) = f N ( h ( a ) )einM.h ( fM.( a ) ) = fN.( h ( a ) )
Angenommen, Sie haben einen anderen Begriff der Annäherung, der sinnvoll ist. Wenn wir uns beispielsweise bei der Programmüberprüfung mit Zustandsmengen befassen, ist die Einbeziehung von Teilmengen für bestimmte Anwendungen sinnvoll, oder wenn es sich um Formeln mit automatisierter Ableitung handelt, ist die Implikation sinnvoll. Allgemeiner können wir betrachten
( N , ⊑ , f N ) ⪯ ⊑( M., ⪯ , fM.) und , wobei und Vorbestellungen sind.( N., ⊑ , fN.)⪯⊑
Anstelle von Homomorphismus können wir jetzt eine Abstraktionsfunktion haben
α : M.→ N. das ist
- monoton, was bedeutet, dass wir immer dann, wenn , unda ⪯ bα ( a ) ⊑ α ( b )
- Halb pendelt mit den Operationen: für alle in .α ( fM.( a ) ) ⊑ fN.( α ( a ) )einM.
Die Abstraktionsfunktion macht deutlich, dass, wenn die Struktur über eine Abstraktion der Struktur über , die Bewertung eines Terms in keine genaueren Ergebnisse liefern kann (in Bezug auf den Begriff der Approximation in ) als die Bewertung desselben Terms in und ordne es dann .N.M.N.N.M.N.
Jetzt können wir fragen, ob es notwendig ist, das Problem in Bezug auf Abstraktion und nicht in Bezug auf Verfeinerung anzugehen. Das heißt, können wir nicht sagen, dass eine Verfeinerung von und Bedingungen in Begriffen formulieren. Genau das macht eine Konkretisierungsfunktion .M.N.
Eine Konkretisierungsfunktion ist monoton und erfüllt die Ungleichung .γ: N.→ M.fM.( γ( b ) ) ⪯ γ( fN.( b ) )
Die Abstraktions- und Konkretisierungsbedingungen werden in der abstrakten Interpretation als Soliditätsbedingungen bezeichnet. In dem speziellen Fall, dass und eine Galois-Verbindung bilden, sind die Abstraktions- und Konkretisierungsbedingungen äquivalent. Im Allgemeinen sind sie nicht gleichwertig.αγ
Alles, was wir bisher getan haben, formalisiert nur den Begriff der Abstraktion zwischen zwei Strukturen. Die Dinge, die ich gesagt habe, lassen sich in der Sprache der Kategorietheorie viel prägnanter zusammenfassen. Ich habe Kategorien wegen Ihres obigen Kommentars vermieden.
Abstraktionshierarchien
Angenommen, wir haben eine Struktur die mit einer Vorbestellung und einigen Operationen ausgestattet ist. Wir können alle Strukturen so betrachten, dass eine Abstraktion von im obigen Sinne ist. Wenn wir haben, dass eine Abstraktion von und beide Abstraktionen von , haben wir drei Elemente der Hierarchie. Die Beziehung "ist eine Abstraktion von" ermöglicht es uns, eine Vorordnung zwischen Strukturen zu definieren. Nennen wir eine Familie von Strukturen, die nach Abstraktion geordnet sind, eine Hierarchie .N N M N 1 N 2 M.MNNMN1N2M
Wenn ich Ihr Beispiel betrachte, scheint Ihr abstrakter Deltamuskel ein Kandidat für das maximale Element in einer bestimmten Hierarchie zu sein. Ich bin mir nicht ganz sicher, da der abstrakte Deltamuskel eher eine Familie von Deltamuskeln als ein spezifischer Deltamuskel zu sein scheint.
Sie können jetzt verschiedene Hierarchien berücksichtigen. Die Hierarchie aller Deltamuskeln. Eine Unterhierarchie, die auf verschiedenen Überlegungen basiert, die Sie oben haben. Ein spezifisches Beispiel im abstrakten Interpretationskontext ist eine Hierarchie vollständiger Gitter, die in einer Galois-Verbindung mit einem gegebenen Powerset-Gitter stehen, und Unterhierarchien, die nur aus verteilenden oder nur booleschen Gittern bestehen.
Wie Martin Berger in den Kommentaren ausführt, wird dieser Begriff der Abstraktion zwischen Hierarchien durch den Begriff der Adjunktionen zwischen Kategorien erfasst.
Eine kategoriale Perspektive
In einem Kommentar wurden weitere Kommentare zu Kategorien angefordert. Dieser Kommentar ist nicht mehr da, aber ich werde trotzdem antworten.
Lassen Sie uns einen Schritt zurücktreten und uns ansehen, was Sie beim Entwerfen von Deltamuskeln tun und was ich oben aus einer allgemeineren Perspektive beschrieben habe. Wir sind daran interessiert, die wesentliche Struktur der Entitäten, die wir in einem Softwarekontext manipulieren, und die Beziehung zwischen diesen Entitäten zu verstehen.
Die erste wichtige Erkenntnis ist, dass wir nicht nur an einer Reihe von Elementen interessiert sind, sondern auch an den Operationen, die wir an diesen Elementen ausführen können, und an den Eigenschaften dieser Operationen. Diese Intuition treibt den Entwurf von Klassen in der objektorientierten Programmierung und die Definition algebraischer Strukturen voran. Sie haben diese Intuition bereits in der Definition eines Deltamuskels explizit gemacht, der einige interessante Operationen identifiziert hat. Im Allgemeinen ist dies der Denkprozess, der algebraischen Beschreibungen zugrunde liegt. Wir müssen herausfinden, was unsere Operationen sind und welche Eigenschaften sie haben. Dieser Schritt teilt uns die Typstruktur mit, mit der wir arbeiten.
Die zweite Erkenntnis ist, dass wir nicht nur an einer Reihe von Elementen interessiert sind, sondern auch an Abstraktionsbeziehungen. Die einfachste Formalisierung, die ich mir von Abstraktion vorstellen kann, besteht darin, eine vorbestellte Menge zu betrachten. Wir können uns eine vorbestellte Menge als eine strikte Verallgemeinerung einer Menge auf etwas vorstellen, das mit einem eingebrannten Begriff der Annäherung einhergeht.
Wir möchten idealerweise in einem Umfeld arbeiten, in dem beide oben genannten Erkenntnisse erstklassige Bürger sind. Das heißt, wir wollen eine typisierte Einstellung wie die einer Algebra, aber auch die approximationsbewusste Einstellung einer Vorbestellung. Ein erster Schritt in diese Richtung ist die Betrachtung eines Gitters. Ein Gitter ist eine konzeptionell interessante Struktur, da wir es auf zwei äquivalente Arten definieren können.
- Wir können ein Gitter als eine Menge die mit einer und einer Join-Operation ausgestattet ist. Wir können dann die ableiten , indem wir , das immer dann gilt, wenn .a ⊑ b a ⊓ b = a(L,⊓,⊔)a⊑ba⊓b=a
- Eine Alternative besteht darin, ein Gitter als eine teilweise geordnete Menge erfüllt, dass jedes in eine eindeutige größte Untergrenze und kleinste Obergrenze hat. Wir können dann die Meet & Join-Operationen aus der Teilreihenfolge ableiten .L.(L,⊑)L
Ein Gitter ist somit eine mathematische Struktur, die aus der algebraischen oder der Approximationsperspektive angegangen werden kann. Das Manko dabei ist, dass die Elemente eines Gitters selbst keine Typstruktur besitzen, die in die Approximationsbeziehung einbezogen wird. Das heißt, wir können keine Elemente vergleichen, die auf dem Gedanken beruhen, mehr oder weniger strukturiert zu sein.
Im Kontext Ihres Problems können Sie sich Kategorien als eine natürliche Verallgemeinerung von Vorbestellungen vorstellen, die sowohl den Begriff der Approximation (in den Morphismen) als auch die Typstruktur in einer algebraischen Umgebung erfassen. Die Einstellung der Kategorietheorie ermöglicht es uns, auf verschiedene unnötige Unterscheidungen zu verzichten und uns auf die Struktur der Entitäten zu konzentrieren, die Ihnen wichtig sind, und auf die Annäherung an diese Struktur. Universelle Eigenschaften und Zusätze bieten Ihnen ein sehr leistungsfähiges Vokabular und Werkzeuge, um die Landschaft der Strukturen zu verstehen, an denen Sie interessiert sind, und ermöglichen eine rigorose mathematische Behandlung selbst intuitiver Begriffe wie verschiedener Abstraktionsebenen.
In Bezug auf meinen Kommentar zu abstrakten Deltamuskeln scheint es, dass Sie eine Kategorie wollen. Der abstrakte Deltamuskel ist eine spezifische Kategorie analog zur Kategorie der Mengen. Es gibt andere Kategorien, die Sie in Betracht ziehen. Ich dachte anfangs, Sie definieren einen Deltamuskel, der im Sinne der Kategorietheorie ein terminales (oder endgültiges) Objekt wäre.
Sie untersuchen die Art von Fragen, auf die die Kategorietheorie eine sehr zufriedenstellende Antwort liefert. Ich hoffe, dass Sie selbst zu diesem Schluss kommen können.
Verweise
- Abstrakte Interpretation und Anwendung auf Logikprogramme , Patrick Cousot und Radhia Cousot. Die erste Hälfte dieses Artikels ist eine allgemeine Einführung in das Thema der abstrakten Interpretation.
- Abstrakte Interpretationsrahmen , Patrick Cousot und Radhia Cousot. Dieser Artikel beschreibt alle Möglichkeiten, die ich oben in Bezug auf Abstraktions- und Konkretisierungsfunktionen skizziert habe, ausführlich.
- Systematisches Design von Programmanalyse-Frameworks , Patrick Cousot und Radhia Cousot. Dies war das Papier, das den Begriff der Hierarchien von Abstraktionen in den Kontext der Programmanalyse einführte.
- Verallgemeinerte starke Bewahrung durch abstrakte Interpretation , Francesco Ranzato und Francesco Tapparo. Dieses Papier wendet diese Ideen in einem anderen Kontext von Abstraktionen an, die zeitliche Logikformeln bewahren. Hier finden Sie Beispiele für boolesche und verteilende Abstraktionen.
- Abstrakte Interpretation, logische Beziehungen und Kan-Erweiterungen , Samson Abramsky. Präsentiert eine kategorietheoretische Perspektive auf das obige ordnungstheoretische Material.