Programování s omezením (neboli programování s omezením ) je programovací paradigma, ve kterém jsou vztahy mezi proměnnými specifikovány ve formě omezení. Omezení se liší od běžných primitiv imperativních programovacích jazyků v tom, že nedefinují posloupnost kroků k provedení, ale vlastnosti hledaného řešení, což z takového programování dělá formu deklarativního programování . Jsou možné různé typy omezení: ta, která se používají v problémech s uspokojením omezení (například "A nebo B je pravdivá"), ta, která jsou řešena simplexním algoritmem (například " ") a další. Omezení jsou obvykle zabudována do programovacího jazyka nebo implementována prostřednictvím samostatných softwarových knihoven .
Programování omezení úzce souvisí s teorií uspokojení omezení , která nabízí pohodlný aparát a jednoduché formální schéma pro reprezentaci a řešení kombinatorických problémů umělé inteligence . Mezi problémy řešené nástroji pro programování s omezeními patří verifikace elektronických obvodů, plánování , plánování a mnoho kombinatorických problémů.
Historicky první formou je omezené logické programování., založený na logickém programování , se objevil v roce 1987 jako specifická třída omezení pro Prolog-II, první implementace byly Prolog III, CLP (R) a CHIP. Z moderních interpretů je programování s omezenou logikou podporováno zejména GNU Prologem .
Omezení lze také kombinovat s funkcionálním programováním , přepisováním termínů a imperativním jazykem . Programovací jazyky s vestavěnou podporou omezení jsou Oz (funkční programování) a Kaleidoscope (imperativní programování). Omezení jsou většinou implementována v imperativních jazycích prostřednictvím omezených nástrojů pro řešení problémů, což jsou samostatné knihovny pro existující imperativní jazyky.