6 Rozhodovací procedury a verifikace Pavel Surynek, KTIML http://ktiml.mff.cuni.cz/~surynek/nail094 Matematicko-fyzikální fakulta Univerzita Karlova v Praze 1
Lineární aritmetika Budeme zabývat rozhodovacími procedurami pro konjunkce lineárních podmínek. Definice 11.1 (formule lineární aritmetiky). Nechť Var je množina symbolů pro proměnné, Cons nechť je množina symbolů pro konstanty (VarCons=). Formule lineární aritmetiky je slovo dané následující gramatikou: Počáteční neterminál I, další neterminály T, A, S Množina terminálů = VarCons {,=,<,,+,(,)} I II (I) I A A S = S S < S S S S T S S + T T v c cv pro vvar, ccons I odpovídá formuli, A odpovídá atomu, S odpovídá součtu, T odpovídá termu. 2 / Rozhodovací procedury a verifikace, 11. přednáška
Lineární aritmetika - poznámky Z formálního hlediska je lineární aritmetika teorie obsahující axiomy pro binární relace =, <,, binární funkci + a unární funkce c pro ccons (násobení konstantou). Jako doménu uvažujeme buď racionální nebo celá čísla: Rozhodování o splnitelnosti je v prvním případě polynomiální, v druhém NPúplný problém. Příklad formule lineární aritmetiky: 3y 1 + 2y 2 5y 3 2y 1-2 y 2 = 0 Tělo smyčky Motivační příklad: for (i = 1; i <= 10; i++) { a[j+i] = a[j] } R4 mem[a+r2] R5 R2 + R1 mem*a+r5+ R4 R1 R1 + 1 R4 mem[a+r2] Mimo tělo smyčky Tělo smyčky R5 R2 + R1 mem*a+r5+ R4 R1 R1 + 1 a[j] se nesmí měnit, tj. formule (i 1 i 10 j+i=j) musí být nesplnitelná. 3 / Rozhodovací procedury a verifikace, 11. přednáška
Rozhodování lineární aritmetiky Lineární programování (LP) Zadání: konjunkce lineárních nerovností a lineární objektivní funkce (=lineární program). Hledáme ohodnocení proměnných racionálními čísly, které splňuje nerovnosti a maximalizuje (minimalizuje) objektivní funkci. Celočíselné lineární programování (ILP) Zadání: opět lineární program (nerovnosti a objektivní funkce) Hledáme celočíselné ohodnocení proměnných, které splňuje stejné podmínky. Rozhodování lineární aritmetiky Zadání: konjunkce lineárních nerovností, tj. formule lineární aritmetiky. Chceme odpověď, zda existuje ohodnocení proměnných racionálními čísly splňující danou formuli. 4 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex (1) Obecný simplex je metoda pro rozhodování lineární aritmetiky s rovnostmi a neostrými nerovnostmi. Lineární nerovnosti tvořící formuli lineární aritmetiky jsou požadovány ve speciálním tvaru, tzv. obecný tvar: Rovnosti tvaru: a 1 x 1 + a 2 x 2 + + a n x n = 0, kde x 1, x 2,, x n jsou racionální proměnné a a 1, a 2,, a n racionální konstanty. Dolní a horní mez pro proměnné: l i x i u i pro i = 1,2,,n, kde l i a u i jsou racionální konstanty nebo - resp. +. Poznámka: V klasickém simplexovém algoritmu požadujeme proměnné nezáporné. Převod na obecný tvar: Nechť se formule skládá z m lineárních podmínek ve tvaru L i Δ R i, kde Δ,=,, -, pro I = 1,2,,m. 5 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex (2) Převod na obecný tvar: Případ L i R i (resp. L i R i ) Podmínku L i R i, převedeme na tvar L i b i, kde b i je racionální konstanta. Zavedeme novou proměnnou s i, původní podmínku nahradíme podmínkami L i - s i = 0 a s i b i. Případ L i = R i : Podmínku L i = R i, převedeme na tvar L i = b i, kde b i je racionální konstanta. Zavedeme novou proměnnou s i, původní podmínku nahradíme podmínkami L i - s i = 0, s i b i a s i b i. Původní proměnné y 1, y 2,, y n se nazývají problémové proměnné, proměnné s 1, s 2,, s m se nazývají dodatečné. Příklad: y 1 + y 2 2 2y 1 y 2 0 -y 1 + 2y 2 1 y 1 + y 2 s 1 = 0 2y 1 x 2 s 2 = 0 -y 1 + 2y 2 s 3 = 0 s 1 2 s 2 0 s 3 1. 6 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex (3) Úlohu nalezení splňujícího ohodnocení proměnných je možné nahlížet geometricky: Každá proměnná představuje dimenzi, podmínky představují nadroviny (rovnosti) a poloprostory (nerovnosti). Uzavřený podprostor splňujících ohodnocení je průnikem nadrovin a poloprostorů, jedná se o konvexní polytop. y 1 + y 2 2 2y 1 y 2 0 -y 1 + 2y 2 1 y 2 4 2y 1 - y 2 0 3 2 1 0 y 1 + y 2 2 1 2 3 4 -y 1 + 2y 2 0 y 1 7 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex (4) Koeficienty v zadání úlohy reprezentujeme jako matici A typu m (n + m), proměnné y 1, y 2,, y n, s 1, s 2,,s m reprezentujeme jako vektor x (prvky matice značíme a ij pro i=1,2,,m a j=1,2,,n+m). Lze použít ekvivalentní formulaci: Ax = 0 a i=1 n+m l i x i u i y 1 + y 2 s 1 = 0 2y 1 y 2 s 2 = 0 -y 1 + 2y 2 s 3 = 0 s 1 2 s 2 0 s 3 1 A = 1 1-1 0 0 2-1 0-1 0-1 2 0 0-1 Nebo se používá tabulková reprezentace (matice A bez diagonální podmatice s -1). 2 s 1 ( + ) (- y 1 + ) 0 s 2 ( + ) (- y 2 + ) 1 s 3 ( + ) y 1 y 2 s 1 1 1 s 2 2-1 s 3-1 2 A je pro pořadí proměnných: x = (y 1, y 2, s 1, s 2, s 3 ) 2 s 1 ( + ) 0 s 2 ( + ) 1 s 3 ( + ) (- y 1 + ) (- y 2 + ) 8 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex (5) V průběhu obecného simplexu se bude matice A (tabulka) měnit, ovšem sloupce odpovídající diagonální podmatici s -1 budou stále přítomné (permutovaně). Definice 11.2 (bázické, nebázické proměnné). Množina proměnných odpovídající sloupcům diagonální podmatice s -1 se nazývá množina bázických proměnných, značí se B. Ostatní proměnné se nazývají nebázické a značí se N. Lze psát: xib (x i = xjn a ij x j ), toto plyne přímo z Ax=0 a definice 11.2. Algoritmus bude udržovat následující: Ohodnocení α:bn Q (racionální čísla) Invarianty (i) a (ii): (i): Ax α = 0, kde x α = (α(x 1 ), α(x 2 ),, α(x n+m )) (ii): (x j N) l j α(x j ) u j 9 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex (6) - algoritmus Na vstupu nechť je formule L lineární aritmetiky s m rovnostmi a neostrými nerovnostmi. function GENERAL-SIMPLEX(L): boolean převeď formuli L na obecný tvar: Ax = 0 a m i=1 l i s i u i B {s 1,s 2,, s m } s 1,s 2,, s m jsou bázické proměnné N {y 1,y 2,, y n } y 1,y 2,, y n jsou nebázické proměnné for i=1,2,,n+m do α(x i ) 0 while True do Satisfied True for i=1,2,,n+m do [y 1,y 2,, y n, s 1,s 2,, s m ] = [x 1,x 2,, x n+m ] Pořadí proměnných je pevné if x i B and (l i > α(x i ) or α(x i ) > u i ) then Satisfied False, Pivot False for j=1,2,,n+m do if x j N and x i a x j lze pivotovat then Pivot True proveď pivotaci s x i a x j if not Pivot then return False if Satisfied then return True Formule je nesplnitelná Formule je splnitelná 10 / Rozhodovací procedury a verifikace, 11. přednáška
Operace pivotace (1) Nechť x i B je taková, že α(x i ) > u i (bez újmy na obecnosti). Je tedy třeba snížit hodnotu α(x i ). Platí, že x i = xjn a ij x j, tedy hodnota α(x i ) může být redukována snížením hodnoty x j N, kde a ij > 0 a l j <α(x j ), nebo zvýšením hodnoty x k N, kde a ik < 0 a α(x k )<u k. Když taková x j N ani x k N neexistuje říkáme, že nelze pivotovat (algoritmus v tomto případě odpovídá, že formule je nesplnitelná). θ = (u i - α(x i ))/a ij, resp. ι= (u i - α(x i ))/a ik, položíme α(x j ) = α(x j ) + θ, resp. α(x j ) = α(x j ) ι x i nyní splňuje podmínku α(x i ) u i, mohlo se ale stát, že α(x j ) porušuje invariant (ii) (tedy nemusí platit l j α(x j ) u j ) Je třeba x j zařadit mezi bázické a x i mezi nebázické. 11 / Rozhodovací procedury a verifikace, 11. přednáška
Operace pivotace (2) Chceme tedy přehodit x i a x j. Definice 11.3 (pivot, pivotový sloupec, pivotový řádek). Pro proměnné x i a x j se koeficient a ij tabulky nazývá pivot. Sloupec s proměnnou x j se nazývá pivotový sloupec (x j nebázická, nebázické odpovídají sloupcům), řádek s proměnnou x i se nazývá pivotový řádek (x i bázická, bázické odpovídají řádkům). Platí, že a ij 0: Vyřešíme řádek i pro x j. tj. z rovnosti x i = xln a il x l obdržíme rovnost x j = xln l j (-a il /a ij )x l + (1/a ij )x i Ve všech ostatních řádcích k i eliminujeme proměnnou x j pomocí získané rovnosti. Vypočteme novou hodnotu ohodnocení pro bázické proměnné. V algoritmu postupujeme při výběru pivota podle pevného pořadí proměnných (Blandovo pravidlo), žádní množina bázických proměnných se nezopakuje, algoritmus vždy skončí (bez důkazu). 12 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex příklad (1) Uvažujme formuli: y 1 + y 2 2 2y 1 y 2 0 -y 1 + 2y 2 1 y 1 + y 2 s 1 = 0 2y 1 x 2 s 2 = 0 -y 1 + 2y 2 s 3 = 0 s 1 2 s 2 0 s 3 1. y 1 y 2 s 1 1 1 s 2 2-1 s 3-1 2 2 s 1 ( + ) 0 s 2 ( + ) 1 s 3 ( + ) (- y 1 + ) (- y 2 + ) Dolní mez pro s 1 je porušená, protože α(s 1 ) < 2. Zvýšíme proměnnou y 1 o θ = (2-0)/1 (první, se kterou lze pivotovat, shora neomezená). Vyřešíme rovnost pro y 1 : s 1 = y 1 + y 2 y 1 = s 1 y 2 α(s 1 )=0 N={y 1, y 2 } α(s 2 )=0 B={s 1, s 2, s 3 } α(s 3 )=0 pořadí: y 1, y 2, s 1, s 2, s 3 α(y 1 )=0 α(y 2 )=0 y 2 4 3 2 1 0 2y 1 - y 2 0 y 1 + y 2 2 1 2 3 4 -y 1 + 2y 2 0 y 1 13 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex příklad (2) Nahradíme (eliminujeme) y 1 v ostatních rovnostech pravou stranou s 1 y 2 : s 2 = 2(s 1 - y 2 ) y 2 s 2 = 2s 1 3y 2 s 3 = -(s 1 - y 2 ) 2y 2 s 3 = -s 1 + 3y 2 s 1 y 2 y 1 1-1 s 2 2-3 s 3-1 3 2 s 1 ( + ) 0 s 2 ( + ) 1 s 3 ( + ) (- y 1 + ) (- y 2 + ) Dolní mez pro s 3 je porušená, protože α(s 3 ) < 1. Zvýšíme proměnnou y 2 o θ = (1 (-2))/3=1 (jediná, se kterou lze pivotovat, shora neomezená (s 1 bychom museli snižovat, což nejde)). Vyřešíme rovnost pro y 2 a eliminujeme y 2 α(s 1 )=2 N={s 1, y 2 } α(s 2 )=4 B={y 1, s 2, s 3 } α(s 3 )=-2 α(y 1 )=2 α(y 2 )=0 y 2 4 3 2 1 0 2y 1 - y 2 0 y 1 + y 2 2 1 2 3 4 -y 1 + 2y 2 0 y 1 14 / Rozhodovací procedury a verifikace, 11. přednáška
Obecný simplex příklad (3) Algoritmus končí, získáme splňující ohodnocení: y 1 1, y 2 1 s 1 s 3 y 1 2/3-1/3 s 2 1-1 y 2 1/3 1/3 2 s 1 ( + ) 0 s 2 ( + ) 1 s 3 ( + ) (- y 1 + ) (- y 2 + ) α(s 1 )=1 N={s 1, s 3 } α(s 2 )=1 B={y 1, s 2, y 2 } α(s 3 )=2 α(y 1 )=1 α(y 2 )=1 y 2 4 3 2y 1 - y 2 0 2 1 0 y 1 + y 2 2 1 2 3 4 -y 1 + 2y 2 0 y 1 15 / Rozhodovací procedury a verifikace, 11. přednáška
Metoda větví a mezí (1) Metoda pro řešení celočíselného lineárního programování (ILP). Zde nás zajímá rozhodovací varianta, čili nebudeme mít objektivní funkci. Zadání stejné jako pro obecný simplex (tedy formule lineární aritmetiky), pouze vyžadujeme, aby ohodnocení proměnných byla celá čísla. Poznámka: lze snadno podporovat ostré nerovnosti, stačí přičíst či odečíst 1 od konstanty na pravé straně nerovnosti. Definice 11.4 (problém, relaxovaný problém). Mějme systém systém lineárních nerovností S, problém nalezení celočíselného ohodnocení proměnných, které splňuje nerovnosti, nechť je problém. Relaxovaný problém potom je tatáž úloha, ale bez požadavku na celočíselnost ohodnocení, značíme relaxed(s). Předpokládejme existenci funkce LP feasible, která rozhoduje splnitelnost pro formuli lineární aritmetiky (vrací dvojici - indikátor splnitelnosti, případně splňující ohodnocení). Lze použít například obecný simplex. 16 / Rozhodovací procedury a verifikace, 11. přednáška
Metoda větví a mezí (2) Na vstupu je formule lineární aritmetiky s celočíselnými proměnnými S. function FEASIBILITY-BRANCH-AND-BOUND(S): boolean SEARCH-INTEGRAL-SOLUTION(S) return False procedure SEARCH-INTEGRAL-SOLUTION(S) (satisfiable, α) LP feasible (relaxed(s)) if not satisfiable then return else if α je celočíselné then abort(true) else let x je proměnní, že α(x)=rz SEARCH-INTEGRAL-SOLUTION(S (x r)) SEARCH-INTEGRAL-SOLUTION(S (x r)) V aktuální větvi není celočíselné řešení Snadno lze dovolit některé proměnné racionální a jiné celočíselné (MIP smíšení celočíselné programování) V aktuální větvi není přípustné ohodnocení, tedy ani celočíselné Celočíselné přípustné ohodnocení nalezeno, formule splnitelná, konec. Proměnná x je ohodnocením α ohodnocena neceločíselně 17 / Rozhodovací procedury a verifikace, 11. přednáška
Metoda větví a mezí příklad a poznámky Příklad: Nechť x 1, x 2, x 3, x 4 jsou proměnné formule lineární aritmetiky. Předpokládejme, že funkce LP feasible vrátila řešení (1, 0.7, 2.5, 3) Dále je možno vybrat neceločíselně ohodnocenou proměnnou, v tomto případě buď x 2, nebo x 3. Nechť byla vybrána x 2 : Přidá se podmínka x 2 0 a rekurzivně se pokračuje v řešení, nechť není nalezeno přípustné ohodnocení v této větvi. Přidá se tedy podmínka x 2 1 a opět se rekurzivně pokračuje v řešení. Algoritmus není úplný, nemusí zastavit. Pro formuli lineární aritmetiky: 1 3x 3y 2 nezastaví (úloha nemá celočíselné přípustné řešení). Lze vyřešit odhadem na velikost domény proměnných: Tvrzení 11.1 (odhad proměnných): Nechť koeficienty formule φ tvoří matici A typu m n a vektor b (pravé strany), x 1, x 2,, x n nechť jsou proměnné a nechť μ je největší z abs. hodnot koeficientů a abs. hodnot konstant. Potom je-li φ celočíselně splnitelná, existuje celočíselné ohodnocení α, že α(x j ) ((m+n)*n*μ) n pro j=1,2,,n. Bez důkazu. 18 / Rozhodovací procedury a verifikace, 11. přednáška
Ořezávání pomocí nadrovin (1) Ořezávací nadrovina je podmínka, která když se přidá k formuli lineární aritmetiky, nezmění množinu přípustných celočíselných řešení. Ořezávací nadroviny mohou pomoci zmenšit prohledávaný prostor přípustných (neceločíselných) ohodnocení. 19 / Rozhodovací procedury a verifikace, 11. přednáška
Ořezávání pomocí nadrovin (2) Popíšeme ořezávací nadroviny nazývané Gomoryho řezy, nejdříve příklad: Nechť x 1, x 2, x 3 jsou proměnné a nechť dolní meze jsou 1 x 1 a 0.5 x 2, předpokládáme, že konečná tabulka v obecném simplexu obsahuje rovnost: x 3 = 0.5x 1 +2.5x 2. Konečné přípustné ohodnocení nechť je: α: {x 1 1, x 2 0.5, x 3 1.75}. Odečteme přípustné ohodnocení od rovnosti: x 3 1.75 = 0.5(x 1 1) +2.5(x 2 0.5) x 3 1 = 0.75 + 0.5(x 1 1) +2.5(x 2 0.5) 0.75 + 0.5(x 1 1) +2.5(x 2 0.5) 1 Poslední nerovnost přidáme jako novou podmínku, aktuální ohodnocení α ji nesplňuje, α bude oříznuto. 20 / Rozhodovací procedury a verifikace, 11. přednáška
Ořezávání pomocí nadrovin (3) Budeme odvozovat řez z rovnosti, ta musí splňovat dvě podmínky: (i) Ohodnocení bázických proměnných musí být zlomkové. (ii) Ohodnocení všech nebázických proměnných musí odpovídat jedné z jejích mezí (hodní nebo dolní). Uvažme rovnost: x i = xjn a ij x j, kde x i je bázická proměnná (1) α nechť je ohodnocení nalezené obecným simplexem, tedy: α(x i )= xjn a ij α(x j ) (2) Rozdělíme nebázické proměnné podle toho, zda mají přiřazenou hodní nebo dolní mez: J = {j x j N α(x j ) = l j } K = {j x j N α(x j ) = u j } 21 / Rozhodovací procedury a verifikace, 11. přednáška
Ořezávání pomocí nadrovin (4) Provedeme odečtení (2) od (1): x i - α(x i )= jj a ij (x j l j ) - jk a ij (u j - x j ) Nechť f 0 = α(x i ) - α(x i ), jelikož předpokládáme, že α(x i ) není celé číslo, platí, že 0 < f 0 < 1, můžeme tedy psát: x i - α(x i ) = f 0 + jj a ij (x j l j ) - jk a ij (u j - x j ) Všimněme si, že levá strana je celé číslo. Nyní rozlišíme dva případy: (a) Když jj a ij (x j l j ) - jk a ij (u j - x j ) > 0, pak jelikož pravá strana je celé číslo, platí: f 0 + jj a ij (x j l j ) - jk a ij (u j - x j ) 1, provedeme rozdělení indexů: J + = { j jj a ij > 0} J - = { j jj a ij < 0} K + = { j jk a ij > 0} K - = { j jk a ij < 0} 22 / Rozhodovací procedury a verifikace, 11. přednáška
Ořezávání pomocí nadrovin (5) Na levou stranu shromáždíme pozitivní členy: jj+ a ij (x j l j ) - jk- a ij (u j - x j ) 1 - f 0, ekvivalentně také jj+ (a ij /(1- f 0 ))(x j l j ) - jk- (a ij /(1- f 0 ))(u j - x j ) 1 (b) Když jj a ij (x j l j ) - jk a ij (u j - x j ) 0, pak jelikož pravá strana je celé číslo, platí: f 0 + jj a ij (x j l j ) - jk a ij (u j - x j ) 0 Podobně jako v předchozím obdržíme: jj- a ij (x j l j ) - jk+ a ij (u j - x j ) - f 0, ekvivalentně také - jj- (a ij /f 0 )(x j l j ) + jk+ (a ij /f 0 )(u j - x j ) 1 Celkem dostáváme, že: jj+ (a ij /(1- f 0 ))(x j l j ) - jj- (a ij /f 0 )(x j l j ) + jk+ (a ij /f 0 )(u j - x j ) - jk- (a ij /(1- f 0 ))(u j - x j ) 1 Nová podmínka zakáže ohodnocení α, jelikož při něm jsou členy na levé straně nulové. 23 / Rozhodovací procedury a verifikace, 11. přednáška
Diferenční logika (1) Rozhodovací procedura pro konjunkci diferenčních podmínek, jedná se o fragment lineární aritmetiky. Definice 11.5 (formule diferenční logiky). Nechť Var je množina symbolů pro proměnné, Cons nechť je množina symbolů pro konstanty (VarCons=). Formule diferenční logiky je slovo dané následující gramatikou: Počáteční neterminál I, další neterminál A, T Množina terminálů = VarCons {,<,,(,)} I II (I) I A A T T < c T T c pro ccons T v pro vvar I odpovídá formuli, A odpovídá atomu, T odpovídá termu, který v tomto případě je proměnná. 24 / Rozhodovací procedury a verifikace, 11. přednáška
Diferenční logika (2) Lze modelovat i další podmínky podle následujících pravidel: x y = c lze zapsat jako x y c y x -c x y c lze zapsat jako y x -c x y > c lze zapsat jako y x < -c Podmínka s jednou proměnnou jako například x < 5 lze napsat jako x-x 0 < 5, kde x 0 je nová proměnná (tzv. nulová proměnná). Vyžaduje se, aby hodnota nulové proměnné byla 0. Uvažujme formuli: x < y + 5 y 4 x = z 1 Tuto formuli lze přepsat jako formuli diferenční logiky: x y < 5 y x 0 4 x z -1 z x 1 25 / Rozhodovací procedury a verifikace, 11. přednáška
Diferenční logika (3) Podívejme se na rozhodovací proceduru pro diferenční logiku. Definice 11.6 (graf nerovností). Nechť δ je formule diferenční logiky ve formě konjunkce nerovností. Potom orientovaný graf s váhami G=(V,E,c) je graf nerovností, jestliže vrcholy odpovídají proměnným a je přítomna hrana e=(x,y) s váhou c(e) pro každou nerovnost x-y c(e) ve formuli. Tvrzení 11.2 (splňování diferenční logiky): Nechť δ je formule diferenční logiky ve formě konjunkce nerovností a nechť G je odpovídající graf nerovností. Potom δ je splnitelná, právě když G neobsahuje negativní cyklus. Důkaz: Použijeme Bellman-Fordův algoritmus pro nalezení nejkratších cest grafu. 26 / Rozhodovací procedury a verifikace, 11. přednáška
Předzpracování pro neceločíselné formule Dva jednoduché způsoby předzpracování vstupní formule (konjunkce podmínek): 1. Uvažujme formuli lineární aritmetiky: x 1 + x 2 2 x 1 1 x 2 1, zde vidíme, že první podmínka je redundantní. Obecně: ve formuli a 0 x 0 + j=1n a j x j b j=0n (l j x j u j ) je podmínka a 0 x 0 + j=1n a j x j b redundantní, jestliže: j aj>0 a j u j + j aj<0 a j l j b. Jinými slovy, když při dosazení extrémních hodnot proměnným součet nepřevýší konstantu b, pak ani pro jiné přípustné ohodnocení proměnných nepřevýší konstantu b. 2. Uvažujme formuli lineární aritmetiky: 2x 1 + x 2 2 x 2 4 x 1 3, zde je vidět, že z první a druhé nerovnosti plyne x 1-1. Obecně: když a 0 > 0, pak x 0 (b - j j>0 aj>0 a j l j - j aj<0 a j u j ) / a 0, podobně, když a 0 < 0, pak x 0 (b - j aj>0 a j l j - j j>0 aj<0 a j u j ) / a 0 27 / Rozhodovací procedury a verifikace, 11. přednáška
Předzpracování pro celočíselné formule Používají se dvě jednoduché úpravy: V každé podmínce vstupní formule nejprve vynásobíme všechny koeficienty a konstanty podmínky nejmenším společným násobkem jmenovatelů všech koeficientů a konstant podmínky. Obdržíme formuli, kde všechny konstanty a koeficienty jsou celočíselné (předpokládá racionální konstanty a koeficienty ve vstupním zadání). Poté je možné zavést neostré nerovnosti místo ostrých: Podmínka i=1n a i x i < b může být nahrazena podmínkou i=1n a i x i b 1. Speciální případ představují 0-1 formule (proměnné mohou nabývat hodnoty 0 nebo 1): Uvažujme formuli: 5x 1 3x 2 4, z této podmínky lze odvodit, že x 1 =1 x 2 =1, tedy můžeme přidat podmínku x 1 x 2. Uvažujme formuli: x 1 + x 2 1 x 2 1, z podmínek lze odvodit x 1 =0. 28 / Rozhodovací procedury a verifikace, 11. přednáška