[tried to debug HypoSpace
martin.hofmann@uni-bamberg.de**20081203143936
 unsuccessful attempt to debug HypoSpace, at least the code is shorter and cleaner now
] hunk ./src/Data/HypoSpace.hs 4
-    HSpace, initHSpace,setupHSpace, insert, delete, 
-    bestHypos
+    HSpace, initHSpace,setupHSpace, 
+    insert, delete, -- should not be visible outside 
+    bestHypos, propagate
hunk ./src/Data/HypoSpace.hs 14
-import Data.Rules (Rule, rule, Rules, rules, RatingData, Rateable(..))
-import qualified Data.Rules as R (fold, map)
+import Data.Rules (RatingData, Rateable(..))
+import qualified Data.Rules as R 
hunk ./src/Data/HypoSpace.hs 18
+import qualified Data.Fragments as F
hunk ./src/Data/HypoSpace.hs 21
-import Data.Hypotheses (Hypo, hypo, fold, Hypos, open, clsd, develop, Call)
-
-import qualified Data.Hypotheses as Hs
-
-import Data.Fragments (asFrag)
-import qualified Data.Fragments as F
+import Data.Hypotheses (Hypo, Hypos, open, develop, Call)
hunk ./src/Data/HypoSpace.hs 23
-import qualified Data.Set as S
hunk ./src/Data/HypoSpace.hs 25
-import Data.Maybe (maybeToList)
+import Data.Maybe (fromMaybe)
hunk ./src/Data/HypoSpace.hs 29
-  
-import Terms            
+import Data.List (foldl', elem) 
+import Debug.Trace
hunk ./src/Data/HypoSpace.hs 32
+import Data.Initialiser
hunk ./src/Data/HypoSpace.hs 55
+
+alterRateHyposMap :: (Maybe Hypos -> Maybe Hypos)
+                     -> Maybe RatingData
+                     -> HSpace
+                     -> HSpace
+alterRateHyposMap f r hsp@(HSpace m _ _ )  = 
+    case r of
+        Just r' -> hsp{rateHyposMap = M.alter f r' m}
+        Nothing -> hsp
+        
+alterRuleHyposMap :: (Maybe Hypos -> Maybe Hypos)   -- ^alter with function
+                     -> RuleFrags                   -- ^at each ruleFrag (position/key)
+                     -> HSpace                      -- ^in HypoSpace
+                     -> HSpace                      -- ^yielding resulting HypoSpace
+alterRuleHyposMap fun frgs hsp@(HSpace _ m _ )  = 
+    hsp{ruleHyposMap = foldl' (flip (M.alter fun)) m (F.toList frgs)}
+    
+alterHypoRateMap :: (Hypo -> M.Map Hypo RatingData 
+                    -> M.Map Hypo RatingData)
+                    -> Hypo
+                    -> HSpace
+                    -> HSpace
+alterHypoRateMap f h hsp@(HSpace _ _ m )  = 
+    let hsp' = hsp{hypoRateMap = f h m} in 
+    trace ("alterhypoRate" ++ show hsp') $  hsp'
+    
hunk ./src/Data/HypoSpace.hs 84
-    { rateHyposMap  = M.empty
+    { rateHyposMap = M.empty
hunk ./src/Data/HypoSpace.hs 86
-    , hypoRateMap = M.empty
+    , hypoRateMap  = M.empty
hunk ./src/Data/HypoSpace.hs 95
-insert h (HSpace pri rhm hrm) = HSpace
-    { rateHyposMap  = M.alter (Hs.insert h) (rate h) pri 
-    , ruleHyposMap  = F.fold (M.alter (Hs.insert h)) rhm (open h)  
-    , hypoRateMap   = M.insert h (rate h) hrm
-    }
-    
-   
+insert h hsp =  
+    trace "INS-rateHypos" alterRateHyposMap (H.mbInsert h) (Just (rate h)) $!
+    trace "INS-ruleHypos" alterRuleHyposMap (H.mbInsert h) (open h) $!
+    trace "INS-HypoRate"  alterHypoRateMap  (flip M.insert (rate h)) h $!
+    hsp
+
hunk ./src/Data/HypoSpace.hs 104
-delete h hsp@(HSpace pri rhm hrm) = HSpace
-    { rateHyposMap   = case (M.lookup h hrm) of 
-                      Just r  -> M.alter  (Hs.delete h) r pri
-                      Nothing -> pri
-    , ruleHyposMap = F.fold (M.alter (Hs.delete h)) rhm (open h)
-    , hypoRateMap  = M.delete h hrm
-    }
-    
-replace :: Hypo -> Hypo -> HSpace -> HSpace       
-replace ho hn = (insert hn).(delete ho)
-
--- | /O(m log n)/ where m is the number of affected hypotheses and n the number 
---   of total rules
---update :: RuleFrag -> RuleFrag -> HSpace -> HSpace
---update ro rn hsp   = ins $ del hsp
---    
---    where
---    del = \sp -> Hs.fold delete sp affectedHs
---    ins = \sp -> Hs.fold insert sp modifiedHs
---    affectedHs = case M.lookup  ro (ruleHyposMap hsp) of 
---                    Just hs -> hs
---                    Nothing -> Hs.empty
---    -- get all affected Hypos 
---    modifiedHs = Hs.map (modify ro rn) affectedHs
---    -- update the rules in each hypo     
+delete h hsp@(HSpace _ _ hrm) = 
+    trace "DEL-rateHypos" $ alterRateHyposMap (H.mbDelete h) (M.lookup h hrm) $
+    trace "DEL-ruleHypos" $ alterRuleHyposMap (H.mbDelete h) (open h)$
+    trace "DEL-HypoRate"  $ alterHypoRateMap M.delete h $
+    hsp 
hunk ./src/Data/HypoSpace.hs 110
+    
+replace :: Hypo -> Maybe Hypo -> HSpace -> HSpace       
+replace ho hn = (maybeInsert hn).(delete ho)
+    where 
+    maybeInsert h = 
+        case h of
+            Just h' -> insert h'
+            Nothing -> id
+    
hunk ./src/Data/HypoSpace.hs 123
-propagate pdata@(ro,_,_) hsp   = ins $ del hsp
-    
+propagate pdata@(ro,_,_) hsp   =  
+    foldl' (flip devAndRep) hsp affectedHs
hunk ./src/Data/HypoSpace.hs 126
-    del = \sp -> fold delete sp affectedHs
-    ins = \sp -> fold insert sp modifiedHs
-    affectedHs = case M.lookup  ro (ruleHyposMap hsp) of 
-                    Just hs -> hs
-                    Nothing -> Hs.empty
-    -- get all affected Hypos 
-    modifiedHs = Hs.map' (develop pdata) affectedHs
-    -- update the rules in each hypo     
+    devAndRep  = (develop pdata) >>= flip replace  
+    affectedHs = 
+        case M.lookup ro (ruleHyposMap hsp) of
+            Just hs -> H.toList hs 
+            Nothing -> []
hunk ./src/Data/HypoSpace.hs 151
-    show hsp = showString "HSpace {\nrateHyposMap =\n" .
+    show hsp = showString "HSpace {\n\trateHyposMap =" .
hunk ./src/Data/HypoSpace.hs 153
-               showString "\nruleHyposMap =\n" .
+               showString "\n\truleHyposMap =" .
hunk ./src/Data/HypoSpace.hs 155
-               showString "\nhypoRateMap =\n" .
+               showString "\n\thypoRateMap =" .
hunk ./src/Data/HypoSpace.hs 159
+
+revhsp0 = initHSpace hypor04
+revhsp1 = insert hypor14 revhsp0
+revhsp2 = insert hypor24 revhsp1
+revhsp3 = insert hypor34 revhsp2
+revhsp4 = insert hypor34 revhsp3
+
+test1 = propagate pd1424 $ propagate pd0414 revhsp4
+
+hyposrevall = insert hypor44 $ insert hypor34 $ insert hypor24 $ insert hypor14 $  initHSpace hypor04
hunk ./src/Data/Hypotheses.hs 10
+    mbDelete, mbInsert,