HetLogicGraph.hs revision eb0e19a83d8e3eaeb936c197555b20d37129022c
5cbcb38f40d3eb0c2e66773c30cc58fa1171ffc9Aivaras JakubauskasModule : $Header$
9aa31241d1e4f592974e7e3eada9899291dd5283Aivaras JakubauskasCopyright : (c) Klaus L�ttich and Uni Bremen 2007
660f8ced2f63a740680b8ed79528a37109ba6a12Aivaras JakubauskasLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
660f8ced2f63a740680b8ed79528a37109ba6a12Aivaras JakubauskasMaintainer : till@tzi.de
5cbcb38f40d3eb0c2e66773c30cc58fa1171ffc9Aivaras JakubauskasStability : unstable
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederPortability : non-portable
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederAssembles the computation of or the pre-computed het Sublogic Graph.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedermodule Comorphisms.HetLogicGraph ( hetSublogicGraph,size) where
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederimport qualified Common.Lib.Rel as Rel
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederimport Logic.Prover (prover_sublogic)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederimport qualified Data.Map as Map
9aa31241d1e4f592974e7e3eada9899291dd5283Aivaras Jakubauskasimport qualified Data.Set as Set
9aa31241d1e4f592974e7e3eada9899291dd5283Aivaras Jakubauskasimport Data.Maybe (fromJust,catMaybes)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder initial version of a logic graph based on ticket #336
5cbcb38f40d3eb0c2e66773c30cc58fa1171ffc9Aivaras JakubauskashetSublogicGraph :: HetSublogicGraph
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederhetSublogicGraph = addHomogeneousInclusions $
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder reduceToWellSupported $
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder hsg_union imageHsg $ HetSublogicGraph
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder { sublogicNodes = initialInterestingSublogics
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder , comorphismEdges = topComorphisms}
where initialInterestingSublogics = Map.union
in Map.union mp $
Map.fromList (top_gsl :
insP = uncurry Map.insert
, Map.insert (show srcGsl, show trgGsl) acm emp)
imageAndPreImage :: Map.Map String G_sublogics
iterComor emptyHetSublogicGraph Map.empty initialInterSubl
| Map.null queue = hsg
case Map.deleteFindMin queue of
(Map.insert k gsl alreadyTried)
newInter = foldr Map.delete
(Map.keys alreadyTried')
(Map.union newInter q')
Map.elems $ comorphisms logicGraph
HetSublogicGraph { sublogicNodes = Map.union (sublogicNodes hsg1)
, comorphismEdges = Map.union (comorphismEdges hsg1)
(Map.findWithDefault (error "") e m1))) $
( Map.Map String G_sublogics, -- srcLogic
Map.Map String G_sublogics, -- trgLogic
in Map.insert (show gsl) gsl
Map.insert (gslStr (targetLogic cid) mp2 k)
(Set.map (gslStr (sourceLogic cid) mp1) v)
(Map.findWithDefault (error ("not found: "++
show (Map.size mp) ++
Map.keys mp)++
( Map.Map String G_sublogics, -- srcLogic
Map.Map String G_sublogics, -- trgLogic
( Map.Map String G_sublogics, -- srcLogic
Map.Map String G_sublogics, -- trgLogic
(map (\x -> Map.findWithDefault (error "") x mp1)
. Set.elems)
(Map.lookup (show gsl) preImageMap)
preImage func = foldl ins Map.empty
-> (Map.Map String sublogics1,
Map.Map String sublogics2,
let insName mp sl = Map.insert (show sl) sl mp
mp_subl1 = foldl insName Map.empty $ all_sublogics $ sourceLogic cid
mp_subl2 = foldl insName Map.empty $ all_sublogics $ targetLogic cid
Map.findWithDefault (error "never ever happens") subl1Str mp_subl1
in (mp_subl1,mp_subl2,preImageMaybe mapSubl (Map.keys mp_subl1))
-> (Map.Map String sublogics1,
Map.Map String sublogics2,
-> (Map.Map String sublogics1,
Map.Map String sublogics2,
(mp_subl1,mp_subl2,Map.map shrink preImageMap)
where shrink st = Set.fromList $ map show $ shrink' [] $
map (\e -> Map.findWithDefault (error "never happens")
e mp_subl1) $ Set.elems st
hsg { sublogicNodes = Map.insert (show trg) trg $
Map.insert (show src) src $ sublogicNodes hsg
, comorphismEdges = Map.insert (show src,show trg) acm $
Map.filterWithKey (\ (s,t) _ -> s/=t) $
where wellSupN = Map.filter isWellSupN $ sublogicNodes hsg
wellSupE = Map.filterWithKey isWellSupE $ comorphismEdges hsg
hsg {comorphismEdges = Map.union homogeneousIncls $
where homogeneousIncls = Map.unions $
map toMap $ Rel.partSet sameLogic $
toMap s = Map.fromList $ map toIncComor $
[ (x,y) | x <- Set.toList s
, y <- Set.toList s