Logika transakcji

Transaction Logic to rozszerzenie logiki predykatów , które w czysty i deklaratywny sposób wyjaśnia zjawisko zmian stanu w programach logicznych i bazach danych . To rozszerzenie dodaje łączniki zaprojektowane specjalnie do łączenia prostych działań w złożone transakcje i zapewniania kontroli nad ich wykonaniem. Logika ma naturalną teorię modeli oraz solidną i kompletną teorię dowodową . Logika transakcji ma klauzulę Horna podzbiór, który ma zarówno semantykę proceduralną, jak i deklaratywną. Do ważnych cech logiki należą hipotetyczne i zatwierdzone aktualizacje, dynamiczne ograniczenia dotyczące wykonywania transakcji, niedeterminizm i aktualizacje zbiorcze. W ten sposób Transaction Logic jest w stanie deklaratywnie uchwycić szereg nielogicznych zjawisk, w tym wiedzę proceduralną w sztucznej inteligencji , aktywne bazy danych , czy metody z efektami ubocznymi w obiektowych bazach danych .

Logika transakcji została pierwotnie zaproponowana przez Anthony'ego Bonnera i Michaela Kifera , a później opisana bardziej szczegółowo w i. Najbardziej wyczerpujący opis znajduje się w.

W późniejszych latach Transaction Logic został rozszerzony na różne sposoby, w tym współbieżność , rozumowanie możliwe do pokonania , częściowo zdefiniowane działania i inne funkcje.

W 2013 roku oryginalny artykuł na temat logiki transakcyjnej zdobył nagrodę 20 -letniej próby czasu przyznawaną przez Association for Logic Programming jako najbardziej wpływowy artykuł z konferencji ICLP 1993 w ciągu ostatnich 20 lat.

Przykłady

Kolorowanie wykresów

Tutaj tinsert oznacza elementarną operację aktualizacji wstawiania transakcyjnego . Spójnik nazywamy koniunkcją szeregową .

colorNode <- // pokoloruj prawidłowo jeden węzeł node(N) ⊗ ¬ kolorowy(N,_) ⊗ kolor(C) ⊗ ¬(przylegający(N,N2) ∧ kolorowy(N2,C)) ⊗ tinsert(kolorowy(N, C)). colorGraph <- ¬uncoloredNodesLeft. colorGraph <- colorNode ⊗ colorGraph.

Układanie piramidy

Podstawowa aktualizacja tdelete reprezentuje transakcyjną operację usuwania .

stos(N,X) <- N>0 ⊗ ruch(Y,X) ⊗ stos(N-1,Y). stos(0,X). ruch(X,Y) <- podnieś(X) ⊗ odłóż(X,Y). podnieś(X) <- wyczyść(X) ⊗ wł(X,Y) ⊗ ⊗ tdelete(w(X,Y)) ⊗ tinsert(wyczyść(Y)). putdown(X,Y) <- szerszy(Y,X) ⊗ clear(Y) ⊗ tinsert(on(X,Y)) ⊗ tdelete(clear(Y)).

Hipotetyczna egzekucja

Tutaj <> jest operatorem modalnym możliwości: Jeśli zarówno akcja1 , jak i akcja2 są możliwe, wykonaj akcję1 . W przeciwnym razie, jeśli możliwa jest tylko akcja 2 , wykonaj ją.

wykonaj <- <>akcja1 ⊗ <>akcja2 ⊗ akcja1. wykonaj <- ¬<>akcja1 ⊗ <>akcja2 ⊗ akcja2.

Filozofowie jedzenia

tutaj | jest spójnikiem logicznym koniunkcji równoległej współbieżnej logiki transakcji.

jadalniaFilozofowie <- phil(1) | fil(2) | fil(3) | fil(4).

Implementacje

Istnieje wiele implementacji logiki transakcji:

  • Oryginalna realizacja.
  • Implementacja logiki transakcji współbieżnych.
  • Logika transakcji wzbogacona o tworzenie tabel . Implementacja logiki transakcji została również włączona jako część Flora-2 .

Wszystkie te implementacje są open source .

Linki zewnętrzne