Samtidig logisk programmering

Samtidig logisk programmering är en variant av logisk programmering där program är uppsättningar av bevakade hornsatser i formen:

H :- G1 , …, Gn | Bi , …, Bn .

Konjunktionen G 1 , … , G n kallas satsens vakt , och | är åtagandeoperatör.

Deklarativt läses bevakade Horn-satser som vanliga logiska implikationer:

H om G 1 och … och G n eller B 1 och … och B n .

Emellertid, procedurmässigt, när det finns flera satser vars huvuden H matchar ett givet mål, exekveras alla satserna parallellt, och kontrollerar om deras guards G 1 , … , G n håller. Om vakterna för mer än en klausul håller, görs ett beslutsamt val till en av klausulerna, och exekveringen fortsätter med delmålen B 1 , …, Bn i den valda klausulen. Dessa delmål kan också utföras parallellt. Sålunda implementerar samtidig logikprogrammering en form av "bryr sig inte nondeterminism", snarare än "vet inte om nondeterminism".

Historia

Det första samtidiga logiska programmeringsspråket var Clarks och Gregorys relationsspråk, som var en utlöpare av IC-Prolog. Senare versioner av samtidig logikprogrammering inkluderar Shapiros Concurrent Prolog och Uedas Guarded Horn Clause-språk.

Utvecklingen av samtidig logisk programmering fick en impuls när GHC användes för att implementera KL1 , systemprogrammeringsspråket för Japanese Fifth Generation Project (FGCS) . FGCS-projektet var ett initiativ på 400 miljoner dollar av Japans ministerium för internationell handel och industri, som påbörjades 1982, för att använda massivt parallell beräkning/bearbetning för tillämpningar av artificiell intelligens. Valet av samtidig logisk programmering som den "saknade länken" mellan hårdvaran och applikationerna påverkades av ett besök på FGCS-projektet 1982 av Ehud Shapiro , som uppfann Concurrent Prolog.

Se även