DGTranslation.hs revision 1842453990fed8a1bd7a5ac792d7982c1d2bfcd5
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder{- |
c63ebf815c8a874525cf18670ad74847f7fc7b26Christian MaederModule : $Header$
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederCopyright : (c) Heng Jiang, Uni Bremen 2004-2006
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
43b4c41fbb07705c9df321221ab9cb9832460407Christian MaederMaintainer : jiang@tzi.de
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederStability : provisional
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : non-portable (Logic)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maederdisplay the logic graph
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-}
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maedermodule GUI.DGTranslation (getDGLogic) where
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-- data structure
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederimport Logic.Grothendieck
68d10d143f29fcff3c637ba24f90e983995ceae6Christian Maederimport Logic.Coerce
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Logic.Logic
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Logic.Comorphism
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Syntax.AS_Library
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Static.GTheory
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maederimport Static.DevGraph
68d10d143f29fcff3c637ba24f90e983995ceae6Christian Maederimport Static.DGTranslation (showFromTo)
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maeder
01e383014b555bbcf639c0ca60c5810b3eff83c0Christian Maederimport qualified Data.Map as Map
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till Mossakowskiimport Common.Result as Res
9dac90ec2be2a72e03893095461960d483fe2fc2Christian Maederimport Data.Graph.Inductive.Graph as Graph
a6082d6cfdfbdc6a4e70430bb25638dfa4f0db9bHeng Jiangimport Data.Maybe
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder-- | get the maximal sublogic of a graph.
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder-- | each DGraph and each node will be tested, in order to find
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder-- | the maximal sublogic of th Graph.
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder-- | All edges and nodes will be searched also in the meantime, so as to test,
a1ed34933c266ce85066acb0d7b20c90cb8eb213Christian Maeder-- | whether the GMorphism of edges is homogeneous, and the logics of nodes are
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder-- | equal.
8410667510a76409aca9bb24ff0eda0420088274Christian MaedergetDGLogic :: LibEnv -> Res.Result G_sublogics
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaedergetDGLogic libEnv =
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder let sublogicsMap = map (getSublogicFromDGraph libEnv)
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder (Map.keys libEnv)
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich in foldr comResSublogics (Res.Result [] Nothing) sublogicsMap
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maeder
ad270004874ce1d0697fb30d7309f180553bb315Christian MaedergetSublogicFromDGraph :: LibEnv -> LIB_NAME -> Res.Result G_sublogics
4d56f2fa72e4aec20eb827c11ed49c8cbb7014bdChristian MaedergetSublogicFromDGraph le ln =
4cb215739e9ab13447fa21162482ebe485b47455Christian Maeder let edgesList = labEdgesDG gc
8ef75f1cc0437656bf622cec5ac9e8ea221da8f2Christian Maeder nodesList = labNodesDG gc
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich slList1 = map testAndGetSublogicFromEdge edgesList
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder slList2 = map (getSubLogicsFromNodes $ getFirstLogic nodesList)
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder nodesList
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder in foldr comResSublogics (Res.Result [] Nothing) (slList1 ++ slList2)
55adfe57a4de1f36adc3e3bfc16f342e44a7d444Christian Maeder
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder where
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder gc = lookupDGraph ln le
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder testAndGetSublogicFromEdge :: LEdge DGLinkLab -> Res.Result G_sublogics
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder testAndGetSublogicFromEdge (from, to,
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder DGLink gm@(GMorphism cid' lsign _ lmorphism _) _ _ _)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder =
7cc09dd93962a2155c34d209d1d4cd7d7b838264Christian Maeder if isHomogeneous gm then
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder Result [] (comSublogics g_mor g_sign)
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder else Result [Res.mkDiag Res.Error
f041c9a6bda23de33a38490e35b831ae18d96b45Christian Maeder ("the edge " ++ (showFromTo from to gc) ++
7cc09dd93962a2155c34d209d1d4cd7d7b838264Christian Maeder " is not homogeneous.") () ] Nothing
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder where g_mor = G_sublogics (targetLogic cid') $ minSublogic lmorphism
c3053d57f642ca507cdf79512e604437c4546cb9Christian Maeder g_sign = G_sublogics (sourceLogic cid') $ minSublogic lsign
dcbd32289a7bdf1e6edd06c6ab0698c6a9dbf37aChristian Maeder
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder getSubLogicsFromNodes :: AnyLogic -> LNode DGNodeLab
dcbd32289a7bdf1e6edd06c6ab0698c6a9dbf37aChristian Maeder -> Res.Result G_sublogics
2c9df69accd8924e7cef3bf8f686626958499c7aChristian Maeder getSubLogicsFromNodes logic (_, lnode) =
c2fcc35abb03cf0b4ca4b050efeb10827f38c322Christian Maeder case dgn_theory lnode of
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder th@(G_theory lid _ _ _ _) ->
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder if Logic lid == logic then
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder Res.Result [] (Just $ sublogicOfTh th)
4ed0007ac9caea5b468f202521352d153481423cChristian Maeder else Res.Result [Res.mkDiag Res.Error
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder ("the node " ++ (getDGNodeName lnode) ++
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder " has a different logic \"" ++ (show lid) ++
0206ab93ef846e4e0885996d052b9b73b9dc66b0Christian Maeder "\" as the logic of Graph \"" ++ (show logic) ++
f13d1e86e58da53680e78043e8df182eed867efbChristian Maeder " is not homogeneous.") () ] Nothing
c2a4d8ae266aa37cc922eba97077520229a19902Christian Maeder
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder getFirstLogic :: [LNode DGNodeLab] -> AnyLogic
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder getFirstLogic list =
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder case dgn_theory $ snd $ head list of
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder G_theory lid _ _ _ _ ->
757e6c79ec40491d45dc72c82b5eb59a386634b0Jian Chun Wang Logic lid
ecf76bc89d9a2ecd7ac7310d30654b9a79d97d62Klaus Luettich
ecf76bc89d9a2ecd7ac7310d30654b9a79d97d62Klaus Luettich
ecf76bc89d9a2ecd7ac7310d30654b9a79d97d62Klaus LuettichcomResSublogics :: Res.Result G_sublogics
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich -> Res.Result G_sublogics
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich -> Res.Result G_sublogics
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus LuettichcomResSublogics (Res.Result diags1 msubl1@(Just subl1))
8c812cd83569e973f10cf69a342424ceabc07af9Christian Maeder (Res.Result diags2 msubl2) =
8cacad2a09782249243b80985f28e9387019fe40Christian Maeder case msubl2 of
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder Nothing -> Res.Result (diags1 ++ diags2) msubl1
a7c27282e71cf4505026645f96d4f5cb8a284e32Christian Maeder Just subl2 ->
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder Res.Result (diags1 ++ diags2) $ comSublogics subl1 subl2
8a28707e9155465c6f2236a06eac6580a65c7025Christian MaedercomResSublogics (Res.Result diags1 Nothing) (Res.Result diags2 _) =
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus Luettich Result (diags1 ++ diags2) Nothing
797ccd67cb8ae127be097cd43448801b673e3b69Christian Maeder
797ccd67cb8ae127be097cd43448801b673e3b69Christian MaedercomSublogics :: G_sublogics -> G_sublogics -> Maybe G_sublogics
431d34c7007a787331c4e5ec997badb0f8190fc7Christian MaedercomSublogics (G_sublogics lid1 l1) (G_sublogics lid2 l2) =
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder case coerceSublogic lid1 lid2 "coerce Sublogic" l1 of
d3ae0072823e2ef0d41d4431fcc768e66489c20eChristian Maeder Just sl -> Just (G_sublogics lid2 (join sl l2))
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder Nothing -> Nothing
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder