1) SMT-resavacem ispitati zadovoljivost sledece bazne formule:

f(x) = y /\ g(y) = x /\ x != g(f(x))

2) SMT-resavacem ispitati zadovoljivost sledece bazne formule:

f(g(x)) = g(f(x)) /\ g(g(x) = f(x) /\ f(f(x)) = g(x) /\ g(f(g(g(x)))) != f(x)


3) SMT-resavacem ispitati zadovoljivost sledece bazne formule:

h(a) != a \/ a = b                                /\
c = d \/ f(h(a)) = f(a) \/ a = f(b)               /\
g(c) = c \/ f(h(a)) != f(a) \/ f(c) != f(d)       /\
g(c) = c \/ c = d \/ a != b                       /\
g(a) = g(f(a)) \/ h(a) = a                        /\

4) SMT-resavacem resiti sistem jednacina:

2x + 3y = 7  /\
3x - 6y = 0

u skupu celih brojeva.

5) SMT-resavacem resiti sistem jednacina:

2x + 3y = 7
3x - 6y = 7

a) u teoriji celobrojne linearne aritmetike
b) u teoriji realne linearne aritmetike

6) SMT-resavacem resiti sisteme nejednacina:

2x + 3y > 1
3x - 2y < 0

a) u teoriji realne linearne aritmetike
b) u teoriji celobrojne linearne aritmetike

U oba slucaja pokusati sa dodavanjem uslova y < 0

7) Pomocu SMT resavaca resiti Kakuro problem dat na slici  (u prilogu).

8) Golombov lenjir velicine n i reda k je skup od k celih brojeva
x1 < x2 < ... < xk takvih da su sve razlike xj - xi ( za i < j)
medjusobno razlicite, kao i da je najveca medju njima (xk - x1) jednaka
n. Ispitati pomocu SMT resavaca da li postoji Golombov lenjir reda 6 i
velicine 17. 

9) Resiti magicni kvadrat:

    ? 12  ?  ?
    ?  8 15  ?
    7  ?  2  ?
    4  ?  ? 11

tako da u tabeli budu svi razliciti brojevi iz intervala [1,16] i da
je zbir u svakoj vrsti, svakoj koloni i u obe dijagonale jednak 34.

10)    SEND
      +MORE
      -----
      MONEY

M != 0, S != 0. Resiti ovaj problem, ako svako slovo predstavlja jednu
dekadnu cifru.

11) Dat je fragment programa:

if(x > y)
 max = x;
else
 max = y;

Dokazati da je nakon toga max jednak vecem od x i y.

12) Dat je fragment programa:
  
  max = a[0];
  i = 1;
  while(i < n)
  {
    if(a[i] > max)
     max = a[i];
    i++;
  }

Dokazati da je nakon toga max jednak najvecem elementu niza.
 
13) 12 igraca jednom nedeljno igraju golf. Dele se u 4 ekipe po
3 igraca. Kako bi se bolje druzili, odlucili su da svake nedelje
menjaju ekipe, tako da nikoja dva igraca ne igraju zajedno u istoj
ekipi vise od jednom. Da li je moguce napraviti takav raspored
za 4 termina?


14) Dat je fragment programa:

f = a[0];
for(i = 0; i < n - 1; i++)
  {
    temp = a[i];
    a[i] = a[i + 1];
    a[i + 1] = temp;
  }

Dokazati da je nakon toga a[n - 1] jednak f.

15) SMT resavacem resiti problem 8 kraljica, ako se zna da je jedna kraljica na polju A1.

16) Petao, Gavran i Kukavica se takmice u pevanju. U ziriju se nalazi odredjeni broj sudija.
Svaki sudija je glasao za jednog od takmicara. Detlic je bio zaduzen za brojanje glasova.
Ukupno je izbrojao 59 glasova. Po njegovom brojanju, 15 ih je glasalo za Petla ili Gavrana,
18 za Gavrana ili Kukavicu, a 20 za Kukavicu ili Petla. Detlicu brojanje nije jaca strana,
tako da ni jedan od ova cetiri broja ne mora biti tacan, ali se zna da ni u jednom slucaju
nije pogresio za vise od 13. Koji su rezultati glasanja?

Zadatak resiti SMT resavacem. Takodje, pomocu SMT resavaca dokazati da je resenje
jedinstveno.

17) SMT resavacem resiti problem postavljanja 4 kraljica i 4 skakaca
tako da ni jedna figura ne napada druge figure.

18) Medju Neptunovim slugama nalaze se oktopodi sa po 6, 7 ili 8 nogu. Oni koji imaju 7 nogu uvek lazu, dok oni koji imaju
6 ili 8 nogu uvek govore istinu. Cetiri oktopoda, Plavi, Crveni, Zeleni i Zuti su se jednom prilikom srela. Tada je Plavi
izjavio: ``Nas cetvorica zajedno imamo 28 nogu''. Zeleni je izjavio: ``Nas cetvorica zajedno imamo 27 nogu''. Zuti je
izjavio: ``Nas cetvorica zajedno imamo 26 nogu''. Crveni je izjavio: ``Nas cetvorica zajedno imamo 25 nogu''. Koliko nogu
ima koji oktopod?

a) Resiti zadatak primenom SMT resavaca. 
b) Dokazati, takodje primenom SMT resavaca, da je resenje jedinstveno.

19) Neka je dat fragment koda:

    double x, y, r;
    ...
    if(x < y)
     r  = y - x;
    else if(y < x)
     r  = x - y;
    else
     r = 1;

   Dokazati da nakon izvrsavanja ovog koda vazi r != 0

20) Neka je dat fragment koda:

    int x;
    int y = -x;
    int z = -y;

    Dokazati da je nakon toga z == x.
