V programech nelze předpokládat existenci vestavěných predikátu pro operace se seznamy, všechny predikáty nad seznamy musíte implementovat, jinak bude odpovídajícím způsobem sníženo bodové ohodnocení. 1. Co to je výsledná substituce? Zkonstruujte SLD-strom pro dotaz :- a(S,T) a uvedený program. U každé úspěšné větve uveďte výslednou substituci. a(X,Y) :- b(X), c(Y,X). a(X,Y) :- c(X,Z),c(Z,Y). b(1). b(2). c|| 12bodů 2. Je implementace SLD-rezoluce v Prologu úplná? Demonstrujte na příkladu. 12 bodů 3. Uvažujte následující program vyber(X):- \+ male(X). male(X) :- auto(X,Zavazadla), Zavazadla < 350. auto(fabia,260). auto(octavia,560). a dotazy :- vyber(octavia). a :- vyber(Y). Napište množinu SLDNF odvození pro oba dotazy a uveďte o jaký typ odvození se jedná. 18 bodů 4. Napište implementaci vestavěného predikátu repeat/0 a vysvětlete, jakým způsobem se tento predikát používá. Popište chování tohoto predikátu také na příkladu. 15 bodů 5. Navrhněte a popište vhodnou reprezentaci matic nad celými čísly v Prologu a napište predikát pro výpočet součtu dvou matic stejného typu. 18 bodů 6. Napište predikát substitute(Podterm, Term, NovyPodterm, NovyTerm), který nahradí všechny výskyty Podterm v Term termem NovyPodterm a výsledek vrátí v NovyTerm. Předpokládejte, že Term a Podterm jsou termy bez proměnných. Příklad volání::- substitute( f(x), 2*f(x)+a(f(x),1), t, N ). N=2*t+a(t,1) yes :- substitute( f(x), 2*f(x)+a(f(x),1), [1,2], N ). N=2*[1,2]+a([1,2],1) yes :- substitute( s(x), 2*f(x)+a(f(x),1), t, N ). N=2*f(x)+a(f(x),1) yes 21 bodů 7. Která globální omezení lze použít pro řešení problémů z oblasti rozvrhování? Uveďte tři příklady včetně ukázek použití pro rozvrhovací problémy. 15 bodů 8. Napište strom stavového prostoru pro omezení A in 1 ..4, B in 3..4, C in 3..4, B#