Transformed uses of the StIneq type into their long version so that I can remove StIneq (was only used in a few places anyway)

This commit is contained in:
Neil Brown 2007-12-12 14:03:07 +00:00
parent 961e1837de
commit 83ee41c75c

View File

@ -84,7 +84,7 @@ solveConstraints p ineq
normalise' e = let g = foldl1 gcd (elems e) in
if (((e ! 0) `mod` g) /= 0) then Nothing else Just $ amap (\x -> x `div` g) e
solve :: EqualityProblem -> StIneq EqualityProblem
solve :: EqualityProblem -> StateT InequalityProblem Maybe EqualityProblem
solve [] = return []
solve p = (solveUnits p >>* removeRedundant) >>= liftF checkFalsifiable >>= solveNext >>= solve
@ -112,7 +112,7 @@ solveConstraints p ineq
where
substIn' eq = changeAllButOneDifferent (ind,0) id $ arrayZipWith (+) eq (amap (* (eq ! ind)) arr)
solveUnits :: EqualityProblem -> StIneq EqualityProblem
solveUnits :: EqualityProblem -> StateT InequalityProblem Maybe EqualityProblem
solveUnits p = case findFirstUnit p of
(Nothing,p') -> return p' -- p' should equal p anyway
(Just (eq,ind),p') -> modify change >> solveUnits (change p')
@ -128,7 +128,7 @@ solveConstraints p ineq
cmpAbsSnd :: (a,Integer) -> (a,Integer) -> Ordering
cmpAbsSnd (_,x) (_,y) = compare (abs x) (abs y)
solveNext :: EqualityProblem -> StIneq EqualityProblem
solveNext :: EqualityProblem -> StateT InequalityProblem Maybe EqualityProblem
solveNext [] = return []
solveNext (e:es) = -- We transform the kth variable into sigma, effectively
-- So once we have x_k = ... (in terms of sigma) we add a_k * RHS