Changeset 24
- Timestamp:
- 07/27/08 00:25:57 (2 years ago)
- Files:
-
- fort/IConstr.hs (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
fort/IConstr.hs
r23 r24 38 38 vecC = Vec Map.empty 39 39 vec0 = vecC 0 40 vec1 = vecC 1 40 41 vecV v = Vec (Map.singleton v 1) 0 41 42 vecCV c v … … 57 58 vecMinus a b = mergeVecs (-) a b 58 59 59 vecFromCoefs c coefs = foldr vecPlus (vecC c) $ map (\(c,v) -> vecCV c v) coefs 60 vecFromCoefs coefs = foldr vecPlus (vec0) $ map (\(c,v) -> vecScale c v) coefs 61 vecFromCoefs' coefs = foldr vecPlus (vec0) $ map (\(c,v) -> vecCV c v) coefs 60 62 61 63 vecConst (Vec _ c) = c … … 333 335 return () 334 336 335 ctxL E [] [] = return ()336 ctxL E(i:is) (j:js) = do337 ctxLT [i] [j] = insertIE (vecPlus i vec1) LE j 338 ctxLT (i:is) (j:js) = do 337 339 insertEQ i j 338 ctxL Eis js340 ctxLT is js 339 341 +++ do 340 insertIE iLE j341 ctxL E_ _ = error "context dimension mismatch in ctxLE"342 insertIE (vecPlus i vec1) LE j 343 ctxLT _ _ = error "context dimension mismatch in ctxLE" 342 344 343 345 … … 363 365 -- do i=1,n 364 366 -- m[2,j]=m[i,2] 367 -- ie, is there any read at [j',i'] that depends on write at [j,i] and [j,i] < [j',i'] 365 368 -- This means the following: 366 369 -- ranges as usual: 1<=i,j<=n … … 372 375 let one = vecC 1 373 376 betweens [i,j,i1,j1] one n 374 ctxL E[j,i] [j1,i1]377 ctxLT [j,i] [j1,i1] 375 378 insertEQ i (vecC 2) 376 379 insertEQ (vecC 2) j 380 381 -- the problem from Omega test paper by Pugh. 382 -- 7x + 12y + 31z = 17 383 -- 3x + 5y + 14z = 7 384 -- 1 <= x <= 40 385 -- -50 <= y <= 50 386 -- Should be solvable. 387 otprob :: SolverM String () 388 otprob = do 389 let [x,y,z] = map vecV ["x","y","z"] 390 between x (vec1) (vecC 40) 391 between y (vecC (-50)) (vecC 50) 392 insertEQ (vecFromCoefs [(7,x),(12,y),(31,z)]) (vecC 17) 393 insertEQ (vecFromCoefs [(3,x),(5,y),(14,z)]) (vecC 7) 377 394 378 395 --------------------------------------------------------------------------------
