Кіріспе

Шектеулерді қанағаттандырумен логикалық бағдарламалау

Шектеулерді қанағаттандырумен логикалық бағдарламалау – бұл шектеулерді бағдарламалаудың бір түрі, онда логикалық бағдарламалау шектеулерді қанағаттандырудан алынған ұғымдарды қосу арқылы кеңейтіледі. Шектеулі логикалық бағдарлама – бұл клаузалардың денесінде шектеулер бар логикалық бағдарлама. Шектеуді қамтитын клаузаның мысалы: Бұл клаузада – шектеу; A(X,Y), B(X) және C(Y) – қалыпты логикалық бағдарламалаудағыдай литералдар болып табылады. Бұл клауза A(X,Y) мәлімдемесінің орындалуына бір шартты белгілейді: X+Y нөлден үлкен және B(X) және C(Y) екеуі де дұрыс. Қалыпты логикалық бағдарламалаудағыдай, бағдарламаларға мақсаттың дәлелденуі туралы сұрақтар қойылады, олардың өзінде литералдармен қатар шектеулер де болуы мүмкін. Мақсаттың дәлелі – басқа клаузаларды қолдана отырып дәлелденетін қанағаттандырылатын шектеулер мен литералдардан тұратын клаузалар жиынтығы. Орындау интерпретатор арқылы жүзеге асырылады, ол мақсаттан басталып, мақсатты дәлелдеуге тырысатын клаузаларды рекурсивті түрде қарап шығады. Осы қарау кезінде кездесетін шектеулер «шектеулер қоймасы» деп аталатын жиынтыққа орналастырылады. Егер бұл жиынтық қанағаттандырылмайтын болып табылса, интерпретатор кері қайтады, мақсатты дәлелдеу үшін басқа клаузаларды қолдануға тырысады. Іс жүзінде, шектеулер қоймасының қанағаттандырылуы толық емес алгоритмді қолдану арқылы тексерілуі мүмкін, ол әрқашан сәйкессіздікті анықтап шығара бермейді.

Шолу

Формальды түрде, шектеу логикалық бағдарламалар тұрақты логикалық бағдарламаларға ұқсас, бірақ клаузалардың денесінде тұрақты логикалық бағдарламалау литералдарымен қатар шектеулер де болуы мүмкін. Мысалы, X>0 – бұл шектеу және келесі шектеу логикалық бағдарламаның соңғы клаузасында қамтылған. B(X,1): X<0. B(X,Y): X=1, Y>0. A(X,Y): X>0, B(X,Y). Тұрақты логикалық бағдарламалаудағыдай, A(X,1) сияқты мақсатты бағалау үшін Y=1 болғанда соңғы клаузаның денесін бағалау қажет. Тұрақты логикалық бағдарламалаудағыдай, бұл өз кезегінде B(X,1) мақсатын дәлелдеуді талап етеді. Тұрақты логикалық бағдарламалаудан өзгеше, бұл сонымен қатар шектеудің орындалуын талап етеді: X>0, соңғы клаузаның денесіндегі шектеу. (Тұрақты логикалық бағдарламалауда, X>0 толыққанды негізделген терминге байланысты болмаса, дәлелдеу мүмкін емес, және егер бұл жағдай болмаса, бағдарлама орындалуы сәтсіз аяқталады.) Шектеудің орындалуын кездескен кезде әрқашан анықтауға болмайды. Мысалы, бұл жағдайда соңғы клауза бағаланған кезде X-тің мәні анықталмайды. Нәтижесінде, X>0 шектеуі бұл сәтте орындалмайды да, бұзылмайды да. B(X,1) бағалауын жалғастырып, содан кейін X-тің нәтижесінде алынған мәні оң екенін тексерудің орнына, интерпретатор X>0 шектеуін сақтайды және содан кейін B(X,1) бағалауын жалғастырады; осылайша, интерпретатор B(X,1) бағалау кезінде X>0 шектеуінің бұзылуын анықтай алады және егер бұл орын алса, B(X,1) бағалауын күтудің орнына дереу кері қайтады. Жалпы, шектеу логикалық бағдарламаны бағалау тұрақты логикалық бағдарлама сияқты жүргізіледі. Дегенмен, бағалау кезінде кездесетін шектеулер «шектеу сақтағышы» деп аталатын жиынға орналастырылады. Мысалы, A(X,1) мақсатын бағалау Y=1 болғанда бірінші клаузаның денесін бағалау арқылы жүзеге асырылады; бұл бағалау X>0 шектеуін шектеу сақтағышына қосады және B(X,1) мақсатын дәлелдеуді талап етеді. Осы мақсатты дәлелдеуге тырысқанда, бірінші клауза қолданылады, бірақ оның бағалауы X<0 шектеуін шектеу сақтағышына қосады. Бұл қосылым шектеу сақтағышын қанағаттандырылмайтын етеді. Интерпретатор содан кейін кері қайтады және шектеу сақтағышынан соңғы қосылымды алып тастайды. Екінші клаузаны бағалау X=1 және Y>0 шектеуін шектеу сақтағышына қосады. Шектеу сақтағышы қанағаттандырылатындықтан және дәлелдеуге басқа литераль қалмағандықтан, интерпретатор X=1, Y=1 шешімімен тоқтайды.

Шарттар мен ережелер

Терминдердің әртүрлі анықтамалары қолданылады, осы арқылы әртүрлі шектеулер логикалық бағдарламалау түрлері пайда болады: ағаштар, нақты сандар немесе шекті домендер бойынша. Терминдердің теңдігі – әрқашан болатын шектеудің бір түрі. Мұндай шектеулер қажет, себебі интерпретатор P(t1) сөзбе-сөзін P(t2) басы бар жаңа варианттың денесімен ауыстырғанда t1=t2 теңдігін мақсатқа қосады.

Ағаш терминдері

Ағаш терминдерімен шектеу логикалық бағдарламалау, шектеулер қоймасында алмастыруларды шектеулер ретінде сақтап, тұрақты логикалық бағдарламалауды эмуляциялайды. Терминдер – басқа терминдерге қолданылатын айнымалылар, тұрақтылар және функциялық символдар. Қарастырылатын жалғыз шектеулер – терминдер арасындағы теңдіктер мен теңсіздіктер. Теңдік ерекше маңызды, себебі интерпретатор жиі t1=t2 сияқты шектеулерді жасайды. Терминдердегі теңдік шектеулерін біріктіру арқылы оңайлатуға, яғни шешуге болады: егер екі термин де басқа терминдерге қолданылатын функциялық символдар болса, t1=t2 шектеуін оңайлатуға болады. Егер екі функциялық символ да бірдей болса және қосалқы терминдердің саны да бірдей болса, бұл шектеуді қосалқы терминдердің жұптық теңдігімен алмастыруға болады. Егер терминдер әртүрлі функциялық символдардан құралған болса немесе бір функциядан, бірақ әртүрлі сандағы терминдерден тұрса, шектеу қанағаттандырылмайды. Егер екі терминнің бірі айнымалы болса, айнымалыға рұқсат етілген жалғыз мән – екінші термин. Нәтижесінде, екінші термин ағымдағы мақсатта және шектеулер қоймасында айнымалыны алмастыра алады, осылайша айнымалыны қарастырудан шығарып тастайды. Атап айтқанда, айнымалы өзімен тең болса, шектеу әрқашан қанағаттандырылған деп есептеліп, алынып тасталуы мүмкін. Бұл шектеуді қанағаттандыру түрінде айнымалы мәндері терминдер болып табылады.

Реалдар

Нақты сандармен шектелген логикалық бағдарламалау нақты өрнектерді термин ретінде пайдаланады. Функция белгілері қолданылмаған жағдайда, терминдер нақты сандардағы өрнектер болып табылады, және оларда айнымалылар болуы мүмкін. Мұндай жағдайда, әрбір айнымалы тек нақты санды ғана мән ретінде қабылдай алады. Нақтырақ айтқанда, терминдер – айнымалылар мен нақты тұрақтылар арқылы құрастырылған өрнектер. Терминдер арасындағы теңдік – әрқашан болатын шектеу түрі, себебі интерпретатор орындау барысында терминдердің теңдігін жасайды. Мысалы, егер ағымдағы мақсаттың бірінші литералы A(X+1) болса және интерпретатор A(Y 1): Y=1 деген клаузаны таңдаса, қайта жазудан кейін айнымалылар бойынша, ағымдағы мақсатқа қосылатын шектеулер X+1=Y 1 болады. Функция белгілері үшін қолданылатын оңайлату ережелері, әрине, қолданылмайды: X+1=Y 1 теңдеуі, бірінші өрнек + операторы арқылы, екіншісі болса басқаша құрастырылғандықтан, қанағаттандырылмайды. Нақты сандар мен функция белгілерін біріктіруге болады, нәтижесінде терминдер басқа терминдерге қолданылатын нақты сандар мен функция белгілері арқылы құрастырылған өрнектерге айналады. Формальды түрде, айнымалылар мен нақты тұрақтылар – басқа өрнектердегі кез келген арифметикалық оператор сияқты өрнектер болып табылады. Айнымалылар, тұрақтылар (нөлдік аритметикалық функция белгілері) және өрнектер – терминдерге қолданылатын кез келген функция белгісі сияқты терминдер болып табылады. Басқаша айтқанда, терминдер өрнектерден, ал өрнектер сандар мен айнымалылардан құралады. Бұл жағдайда, айнымалылар нақты сандар және терминдер арасында өзгереді. Яғни, бір айнымалы нақты санды, ал екіншісі терминді мән ретінде қабылдай алады. Екі терминнің теңдігін ағаш тәрізді терминдер үшін қолданылатын ережелер арқылы оңайлатуға болады, егер екі терминнің ешқайсысы нақты өрнек болмаса. Мысалы, егер екі терминнің функция белгісі мен субтерминдер саны бірдей болса, олардың теңдік шектеуін субтерминдердің теңдігімен алмастыруға болады.

Шекті домендер

Логикалық шектеулер бағдарламалауда қолданылатын шектеулердің үшінші класы – шекті домендер. Бұл жағдайда айнымалылардың мәндері шекті доменнен алынады, көбінесе бүтін сандардан. Әр айнымалы үшін әртүрлі доменді белгілеуге болады: мысалы, X::[1 5] дегеніміз, X мәні 1 мен 5 арасында екендігін білдіреді. Айнымалының доменін айнымалы алатын барлық мәндерді тізімдеу арқылы да беруге болады; сондықтан жоғарыдағы доменді декларацияны X::[1,2,3,4,5] деп те жазуға болады. Доменді белгілеудің осы екінші тәсілі X::[george,mary,john] сияқты бүтін сандардан құралмаған домендерге мүмкіндік береді. Егер айнымалының домені көрсетілмесе, ол тілде бейнеленетін бүтін сандар жиыны деп есептеледі. [X,Y,Z]::[1 5] сияқты декларацияны қолдана отырып, айнымалылар тобына бірдей доменді беруге болады. Айнымалының домені орындау кезінде қысқартылуы мүмкін. Шындығында, интерпретатор шектеулерді шектеу қоймасына қосқанда, ол жергілікті сәйкестіктің бір түрін қамтамасыз ету үшін шектеулерді таратуды жүзеге асырады, және бұл операциялар айнымалылардың доменін азайтуы мүмкін. Егер айнымалының домені бос болса, шектеулер қоймасы сәйкессіз болады, ал алгоритм кері қадам жасайды. Егер айнымалының домені жеке элементтен тұрса, айнымалыға оның доменіндегі бірегей мәнді тағайындауға болады. Әдетте қолданылатын сәйкестік түрлері – доғалық сәйкестік, гипердоғалық сәйкестік және шекаралық сәйкестік. Өзгергіштің ағымдағы доменін тексеру үшін нақты литеральдарды пайдалануға болады; мысалы, dom(X,D) X өзгергіштің ағымдағы доменін D ретінде анықтайды. Нақты сандардың домендеріне келетін болсақ, бүтін сандар домендерімен функторларды қолдануға болады. Бұл жағдайда термин бүтін сандардағы өрнек, тұрақты немесе басқа терминдерге функтордың қолданылуы болуы мүмкін. Егер өзгергіштің домені бүтін сандар немесе тұрақтылар жиыны ретінде көрсетілмесе, ол кез келген терминді мән ретінде қабылдауы мүмкін.

Шектеулер қоймасы

Шектеулер қоймасы қазіргі уақытта қанағаттандырылатыны болжамдалған шектеулерді қамтиды. Оны жүйелі логикалық бағдарламалаудағы ағымдағы алмастыру ретінде қарастыруға болады. Тек ағаш тәрізді терминдерге рұқсат болғанда, шектеулер қоймасында t1=t2 түріндегі шектеулер болады; бұл шектеулер біріктіру арқылы қарапайымдатылады, нәтижесінде өзгермелі=термин түріндегі шектеулер пайда болады; мұндай шектеулер алмастыруға баламалы. Дегенмен, егер терминдер арасындағы тең еместік рұқсат етілсе, шектеулер қоймасында t1!=t2 түріндегі шектеулер де болуы мүмкін. Нақты сандар немесе шекті домендер бойынша шектеулерге рұқсат болғанда, шектеулер қоймасында X+2=Y/2 сияқты доменге тән шектеулер де болуы мүмкін. Шектеулер қоймасы ағымдағы алмастыру тұжырымын екі жағынан кеңейтеді. Біріншіден, ол жаңа варианттың басымен сәйкес келетін сөз тіркесінен туындаған шектеулерді ғана емес, сонымен қатар сөз тіркесінің денесіндегі шектеулерді де қамтиды. Екіншіден, ол тек өзгермелі=мәнді түріндегі шектеулерді ғана емес, сонымен қатар қарастырылып отырған шектеу тіліне қатысты шектеулерді де қамтиды. Жүйелі логикалық бағдарламаның сәтті орындалуының нәтижесі соңғы алмастыру болса, шектеу логикалық бағдарламаның нәтижесі соңғы шектеулер қоймасы болып табылады, ол өзгермелі=мәнді түріндегі шектеулерді қамтуы мүмкін, бірақ жалпы жағдайда кез келген шектеулерді қамтуы мүмкін. Доменге тән шектеулер сөз тіркесінің денесінен де, сөз тіркесін сөз тіркесінің басымен сәйкестендіруден де шектеулер қоймасына түсуі мүмкін: мысалы, егер интерпретатор A(X+2) сөз тіркесін A(Y/2) басы болатын жаңа вариантты сөз тіркесімен қайта жазса, X+2=Y/2 шектеуі шектеулер қоймасына қосылады. Егер айнымалы нақты сан немесе шекті домендік өрнекте пайда болса, ол тек нақты сан немесе шекті домендегі мәнді қабылдай алады. Мұндай айнымалы басқа терминдерге қолданылатын функтордан құралған терминді мән ретінде қабылдамайды. Шектеулер қоймасы қанағаттандырылмайды, егер айнымалы белгілі бір доменнің мәнін де, терминдерге қолданылатын функторды да қабылдауға міндетті болса. Шектеу қоймасына шектеу қосылғаннан кейін, оның үстінде бірнеше операциялар орындалады. Орындалатын операциялар қарастырылып отырған домен мен шектеулерге байланысты. Мысалы, шекті ағаш теңдіктері үшін біріктіру, нақты сандардағы көпмүшелік теңдеулер үшін айнымалыларды жою, шекті домендер үшін жергілікті сәйкестіктің бір түрін сақтау үшін шектеу тарату қолданылады. Бұл операциялар шектеулер қоймасын қанағаттандыруға тексеру және шешуді жеңілдетуге бағытталған. Бұл операциялардың нәтижесінде жаңа шектеулердің қосылуы ескі шектеулерді өзгерте алады. Интерпретатор осы өзгерістерді кері қайтара білуі маңызды. Ең қарапайым әдіс – интерпретатордың әр таңдау жасаған сайын қойманың толық күйін сақтауы (ол мақсатты қайта жазу үшін сөз тіркесін таңдайды). Шектеулер қоймасын бұрынғы күйіне қайтаруға мүмкіндік беретін тиімді әдістер де бар. Атап айтқанда, екі таңдау нүктесі арасында шектеулер қоймасында жасалған өзгерістерді, соның ішінде ескі шектеулерге енгізілген өзгерістерді сақтау жеткілікті. Бұл өзгертілген шектеулердің ескі мәнін сақтау арқылы жасалуы мүмкін; бұл әдіс іздеу деп аталады. Көбірек жетілдірілген әдіс – өзгертілген шектеулерге енгізілген өзгерістерді сақтау. Мысалы, сызықтық шектеу оның коэффициентін өзгерту арқылы өзгертіледі: ескі және жаңа коэффициент арасындағы айырманы сақтау өзгерісті кері қайтаруға мүмкіндік береді. Бұл екінші әдіс семантикалық кері ілгерілеу деп аталады, өйткені өзгерістің семантикасы ғана сақталады, шектеулердің ескі нұсқасы емес.

Таңбалау

Жазылу литералдары шекті домендердегі айнымалыларда шектеу сақтаудың қанағаттандырылуын немесе ішінара қанағаттандырылуын тексеру және қанағаттандыратын тағайындаманы табу үшін қолданылады. Жазылу литералы – labeling([айнымалылар]) түрінде болады, мұнда аргумент – шекті домендердегі айнымалылардың тізімі. Интерпретатор мұндай литералды бағалағанда, тізімдегі айнымалылардың домендерінде барлық тиісті шектеулерді қанағаттандыратын тағайындаманы табу үшін іздеу жүргізеді. Әдетте, бұл кері іздеудің бір түрімен жасалады: айнымалылар әрқайсысы үшін барлық мүмкін мәндерді сынап, сәйкессіздік анықталғанда кері іздеу арқылы бағаланады. Жазылу литералының бірінші қолданылуы – шектеу сақтаудың нақты қанағаттандырылуын немесе ішінара қанағаттандырылуын тексеру. Интерпретатор шектеу сақтау қоймасына шектеуді қосқанда, ол тек жергілікті сәйкестіктің бір түрін ғана қолданады. Бұл операция, егер шектеу сақтау қанағаттандырылмаса да, сәйкессіздікті анықтамауы мүмкін. Айнымалылар жиынтығына жазылу литералын қолдану осы айнымалылар бойынша шектеулердің қанағаттандырылуын тексереді. Нәтижесінде, шектеу сақтау қоймасында көрсетілген барлық айнымалыларды пайдалану қойманың қанағаттандырылуын тексеруге әкеледі. Жазылу литералының екінші қолданылуы – шектеуді сақтауды қанағаттандыратын айнымалылардың бағалауын нақты анықтау. Жазылу литералы болмаса, айнымалыларға тек қана шектеу сақтау қоймасында X=мәні түріндегі шектеулер болған кезде және жергілікті сәйкестік айнымалының доменін бір ғана мәнге дейін азайтатын кезде ғана мәндер беріледі. Кейбір айнымалыларға жазылу литералын қолдану осы айнымалыларды бағалауға мәжбүрлейді. Басқаша айтқанда, жазылу литералы қарастырылғаннан кейін барлық айнымалыларға мән беріледі. Әдетте, шектеу логикасы бағдарламалары шектеулер қоймасында мүмкіндігінше көп шектеулер жинақталғаннан кейін ғана жазылу литералдары бағаланатын етіп жазылады. Себебі, жазылу литералдары іздеуді талап етеді, ал егер қанағаттандырылатын шектеулер көп болса, іздеу тиімдірек болады. Шектеулерді қанағаттандыру мәселесі әдетте келесі құрылымды шектеу логикалық бағдарламасымен шешіледі:

Интерпретатор solve(аргументтер) мақсатын бағалағанда, ол бірінші ережесінің жаңа нұсқасының денесін ағымдағы мақсатқа орналастырады. Бірінші мақсат constraints(X') болғандықтан, екінші ереже бағаланады және бұл операция барлық шектеулерді ағымдағы мақсатқа және ақырында шектеу сақтау қоймасына көшіреді. Содан кейін labeling(X') литералы бағаланады, бұл шектеу сақтау қоймасының шешімін іздеуге мәжбүрлейді. Шектеу сақтау қоймасында бастапқы шектеулерді қанағаттандыру мәселесінің шектеулері дәл болғандықтан, бұл операция бастапқы мәселенің шешімін іздейді.

Бағдарламаның қайта құрылуы

Берілген шектеу логикалық бағдарлама тиімділігін арттыру үшін қайта құрылуы мүмкін. Бірінші ереже – таңбаланған литеральдарға мүмкіндігінше көп шектеулер жинақталғаннан кейін ғана таңбалау литеральдары орналастырылуы керек. Теориялық тұрғыдан алғанда, , интерпретатор таңбалау литералын кездестіргенде орындалатын іздеу X>0 шектеуін қамтымайтын шектеу қоймасында жүзеге асырылады. Нәтижесінде, ол X=1 сияқты шешімдерді тудыруы мүмкін, бұл шешімдер кейіннен бұл шектеуді қанағаттандырмайды. Екінші нұсқада іздеу тек қана шектеу X>0 шектеу қоймасында болған кезде ғана орындалады. Сәйкессіздіктерді ертерек анықтауға мүмкіндік беретін қосымша шектеулер іздеу кеңістігін қысқартады, нәтижесінде іздеу тек осы шектеуге сәйкес келетін шешімдерді ғана қайтарады. Тиімділікті арттыруға мүмкіндік беретін екінші қайта құру – бұл сөйлемдердің денесінде литеральдардың алдына шектеулерді қою. Тағы да айта кетейік, және принципте эквивалентті. Дегенмен, бірінші жағдайда көбірек есептеулер қажет болуы мүмкін. Мысалы, егер шектеу қоймасында X<2 шектеуі болса, интерпретатор бірінші жағдайда B(X) функциясын рекурсивті түрде бағалайды; егер ол сәтті аяқталса, онда X>0 шектеуін қосу кезінде шектеу қоймасы сәйкессіз екенін анықтайды. Екінші жағдайда, осы сөйлемді бағалау кезінде интерпретатор алдымен X>0 шектеуін шектеу қоймасына қосады, содан кейін, мүмкін, B(X) функциясын бағалайды. X>0 шектеуін қосылғаннан кейін шектеу қоймасы сәйкессіз болып шықса, B(X) функциясының рекурсивті бағалануы мүлдем орындалмайды. Үшінші қайта құру, тиімділікті арттыруға мүмкіндік береді – артық шектеулерді қосу. Егер бағдарламашы белгілі бір шектеуді қанағаттандыратын мәселенің шешімін білсе, ол бұл шектеуді қосып, шектеу қоймасының сәйкессіздігін мүмкіндігінше ертерек тудыруы мүмкін. Мысалы, егер B(X) функциясын бағалау X үшін оң мәнге әкелетіні алдын ала белгілі болса, бағдарламашы B(X) функциясының кез келген пайда болуынан бұрын X>0 шектеуін қосуы мүмкін. Мысалы, A(X,Y): B(X),C(X) мақсаты A(2,Z) үшін сәтсіз аяқталады, бірақ бұл тек B(X) қосалқы мақсатын бағалау кезінде анықталады. Екінші жағынан, егер жоғарыдағы сөйлем , арқылы ауыстырылса, интерпретатор X>0 шектеуін шектеу қоймасына қосылған кезде кері қадам жасайды, бұл B(X) функциясын бағалау басталғанға дейін болады.

Бір мезгілдегі шектеу логикасын бағдарламалау

Шектеу логикасы бағдарламалаудың бір мезгілдегі нұсқалары шектеуді қанағаттандыру мәселелерін шешуден гөрі бір мезгілдегі процестерді бағдарламалауға бағытталған. Шектеу логикасы бағдарламалаудағы мақсаттар бір мезгілде бағаланады; сондықтан бір мезгілдегі процесс интерпретатордың мақсатты бағалауы ретінде бағдарламаланады. Синтаксистік тұрғыдан, бір мезгілдегі шектеу логикалық бағдарламалары бір мезгілде емес бағдарламаларға ұқсас, тек ерекшелігі – бұл ережелерге күзетшілер кіреді, олар кейбір жағдайларда ережелердің қолданылуын тоқтататын шектеулер болып табылады. Семантикалық жағынан, бір мезгілдегі шектеу логикалық бағдарламалау бір мезгілде емес нұсқалардан ерекшеленеді, өйткені мақсатты бағалау проблемаға шешім табудың орнына бір мезгілдегі процесті жүзеге асыруды көздейді. Ең бастысы, бұл айырмашылық интерпретатордың бірден көп ереже қолданылған кезде қалай әрекет ететіндігіне әсер етеді: бір мезгілде емес шектеу логикасы бағдарламалауы барлық ережелерді рекурсивті түрде сынап көреді; бір мезгілдегі шектеу логикасы бағдарламалауы тек біреуін таңдайды. Бұл интерпретатордың бұрын қабылдаған шешімін қайта қарамайтынының ең айқын көрінісі. Бұның басқа да әсерлері бар – бүкіл бағалау сәтсіз аяқталмаса да, дәлелдеуге келмейтін мақсаттың болуының семантикалық мүмкіндігі және мақсатты ереже басымен теңестірудің ерекше тәсілі.

Қолданбалар

Шектеу логикалық бағдарламалау автоматтандырылған кестелеу, типтік қорытынды, азаматтық инженерия, механикалық инженерия, цифрлық тізбектерді тексеру, әуе трафигін басқару, қаржы және тағы да басқа салаларда қолданылған.

Тарих

Шектеулі логикалық бағдарламалау 1987 жылы Джаффар мен Лассез енгізді. Олар Prolog II терминдерінің теңдеулері мен теңдесу еместіктері шектеулердің нақты бір түрі екенін байқады және бұл идеяны кез келген шектеу тілдеріне жалпылады. Осы тұжырымдаманың алғашқы іске асырылымдары Prolog III, CLP(R) және CHIP болды.