Logika wielu sortowań

Logika z wieloma sortowaniami może formalnie odzwierciedlać naszą intencję, by nie traktować wszechświata jako jednorodnego zbioru obiektów, ale podzielić go w sposób podobny do typów w programowaniu typu . Zarówno funkcjonalne, jak i asertywne „ części mowy ” w języku logiki odzwierciedlają ten typowy podział wszechświata, nawet na poziomie składni: podstawianie i przekazywanie argumentów może odbywać się tylko odpowiednio, z poszanowaniem „rodzajów”.

Istnieją różne sposoby sformalizowania wspomnianej powyżej intencji; logika wielosortowana to dowolny pakiet informacji, który ją spełnia. W większości przypadków podaje się:

  • zestaw rodzajów, S
  • odpowiednie uogólnienie pojęcia podpisu , aby móc obsłużyć dodatkowe informacje towarzyszące sortowaniu.

Dziedzina dyskursu dowolnej struktury tej sygnatury jest następnie dzielona na rozłączne podzbiory, po jednym dla każdego rodzaju.

Przykład

Podczas rozumowania na temat organizmów biologicznych warto rozróżnić dwa rodzaje: i . gdy funkcja ma sens, podobna funkcja zazwyczaj nie. wielosortowania , ale aby odrzucić terminy takie jak jako składniowo źle sformułowane.

Algebraizacja

Algebraizacja logiki z wieloma sortowaniami została wyjaśniona w artykule Caleiro i Gonçalvesa, który uogólnia abstrakcyjną logikę algebraiczną na przypadek z wieloma sortowaniami, ale może być również użyty jako materiał wprowadzający.

Logika uporządkowana według kolejności

Przykładowa hierarchia sortowania

Podczas gdy logika posortowana według wielu wymaga, aby dwa odrębne rodzaje miały rozłączne zbiory wszechświatów, logika posortowana według kolejności pozwala na zadeklarowanie jako podsortu innego rodzaju pisząc składnię W powyższym przykładzie z biologii pożądane jest zadeklarowanie

,
,
,
,
,
,

i tak dalej; por. zdjęcie.

Wszędzie tam, gdzie wymagany jest jakiś termin można podać termin dowolnego podrodzaju zasada podstawienia Liskowa . Na przykład, zakładając deklarację funkcji i stałą deklarację , termin jest całkowicie poprawne i ma sortowanie . W celu dostarczenia informacji, że matką psa jest z kolei pies, kolejna deklaracja może zostać wydane; nazywa się to przeciążaniem funkcji , podobnie jak przeciążanie w językach programowania .

Logikę uporządkowaną można przetłumaczyć na logikę nieposortowaną, dla dla każdej deklaracji podsortowania . Podejście odwrotne powiodło się w zautomatyzowanym dowodzeniu twierdzeń: w 1985 roku Christoph Walther mógł rozwiązać ówczesny problem wzorcowy, tłumacząc go na logikę posortowaną rzędem, a tym samym sprowadzając go do rzędu wielkości, ponieważ wiele predykatów jednoargumentowych zamieniło się w sortowania.

Aby włączyć logikę posortowaną według kolejności do automatycznego dowodzenia twierdzeń opartego na klauzulach, niezbędny jest odpowiedni algorytm unifikacyjny posortowany według kolejności , który dla dowolnych dwóch zadeklarowanych sortowań wymaga } ich przecięcie ma zostać zadeklarowane: jeśli i są zmiennymi typu i odpowiednio równanie ma rozwiązanie , gdzie .

Smolka uogólnił logikę sortowaną według kolejności, aby umożliwić polimorfizm parametryczny . W jego ramach deklaracje podsortowania są propagowane do wyrażeń typu złożonego. można zadeklarować parametryczną parametrem, jak w szablonie C++ ), od deklaracja podsortowania relacji oznacza że każda lista liczb całkowitych jest również listą liczb zmiennoprzecinkowych.

Schmidt-Schauß uogólnił logikę sortowania według kolejności, aby umożliwić deklaracje terminów. Jako przykład, zakładając deklaracje podsortowania ⊆ , deklaracja terminu, taka jak pozwala zadeklarować właściwość dodawania liczb całkowitych, której nie można wyrazić zwykłym przeciążeniem.

Zobacz też

Wczesne artykuły na temat logiki wielosortowanej obejmują:

Linki zewnętrzne