GraphLogic.hs revision 1bc5dccbf0083a620ae1181c717fea75e4af5e5c
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederModule : $Header$
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederDescription : Logic for manipulating the graph in the Central GUI
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederCopyright : (c) Jorina Freya Gerken, Till Mossakowski, Uni Bremen 2002-2006
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederMaintainer : till@informatik.uni-bremen.de
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederStability : provisional
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : non-portable (imports Logic)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder , remakeGraph
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder , performProofAction
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , openProofStatus
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maeder , saveProofStatus
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maeder , openTranslateGraph
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maeder , showReferencedLibrary
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , getSignatureOfNode
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , getTheoryOfNode
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , getLocalAxOfNode
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , translateTheoryOfNode
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maeder , displaySubsortGraph
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich , displayConceptGraph
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maeder , lookupTheoryOfNode
01e383014b555bbcf639c0ca60c5810b3eff83c0Christian Maeder , getSublogicOfNode
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till Mossakowski , showOriginOfNode
df29370ae8d8b41587957f6bcdcb43a3f1927e47Christian Maeder , showProofStatusOfNode
bd54a9917cd87169b8e40bcc5616c537fed85815Christian Maeder , proveAtNode
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , showJustSubtree
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich , showIDOfEdge
8c7a54ad8bf776a530ecf907a373d42415cf4faeChristian Maeder , getNumberOfNode
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski , showMorphismOfEdge
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder , showOriginOfEdge
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder , checkconservativityOfEdge
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder , showProofStatusOfThm
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder , convertNodes
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder , convertEdges
2e2094a642e3775b0d76b890556407941d3a53b6Christian Maeder , hideShowNames
e8db9a65830cf71504e33c6f441a67b4d184a3caChristian Maeder , translateGraph
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder , showLibGraph
8410667510a76409aca9bb24ff0eda0420088274Christian Maederimport Logic.Logic(conservativityCheck)
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maederimport Logic.Coerce(coerceSign, coerceMorphism)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maederimport Syntax.AS_Library(LIB_NAME, getModTime, getLIB_ID)
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maederimport Static.DGToSpec(dgToSpec, computeTheory)
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maederimport Static.AnalysisLibrary(anaLibExt, anaLib)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maederimport Static.DGTranslation(libEnv_translation)
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maederimport Proofs.InferBasic(basicInferenceNode)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederimport Proofs.StatusUtils(lookupHistory, removeContraryChanges)
f13d1e86e58da53680e78043e8df182eed867efbChristian Maederimport GUI.Utils(listBox, createTextSaveDisplay)
cdd280437686b1e2e25e3761d4adf3d4a0a2d11cKlaus Luettichimport GUI.Taxonomy (displayConceptGraph,displaySubsortGraph)
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maederimport GUI.DGTranslation(getDGLogic)
c6fcd42c6d6d9dae8c7835c24fcb7ce8531a9050Christian Maederimport qualified GUI.HTkUtils (displayTheory,
31c49f2fa23d4ac089f35145d80a224deb6ea7e4Till Mossakowski displayTheoryWithWarning,
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus Luettich createInfoDisplayWithTwoButtons)
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettichimport GraphDisp(deleteArc, deleteNode)
363939beade943a02b31004cea09dec34fa8a6d9Christian Maederimport TextDisplay(createTextDisplay)
363939beade943a02b31004cea09dec34fa8a6d9Christian Maederimport InfoBus(encapsulateWaitTermAct)
8cacad2a09782249243b80985f28e9387019fe40Christian Maederimport DialogWin (useHTk)
363939beade943a02b31004cea09dec34fa8a6d9Christian Maederimport Messages(errorMess)
a7c27282e71cf4505026645f96d4f5cb8a284e32Christian Maederimport qualified HTk
363939beade943a02b31004cea09dec34fa8a6d9Christian Maederimport Configuration(size)
47b0e9f3cb008cb7997f4e3bae26e4d62dcc887aChristian Maederimport Common.Id(nullRange)
431d34c7007a787331c4e5ec997badb0f8190fc7Christian Maederimport Common.DocUtils(showDoc, pretty)
d3ae0072823e2ef0d41d4431fcc768e66489c20eChristian Maederimport Common.ResultT(liftR, runResultT)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederimport qualified Common.OrderedMap as OMap
9e748851c150e1022fb952bab3315e869aaf0214Christian Maederimport qualified Common.InjMap as InjMap
9e748851c150e1022fb952bab3315e869aaf0214Christian Maederimport qualified Common.Lib.Rel as Rel
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport qualified Common.Lib.Graph as Tree
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport Driver.WriteFn(writeShATermFile)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport Driver.ReadFn(libNameToFile, readVerbose)
9e748851c150e1022fb952bab3315e869aaf0214Christian Maederimport System.Directory(getModificationTime)
776a1a086df734581431e6edb4343ed4c8d34d55Christian Maederimport Data.Maybe(fromJust)
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maederimport Data.List(nub,deleteBy,find)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maederimport Data.Graph.Inductive.Graph as Graph(Node, LEdge, LNode, lab', labNode')
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maederimport qualified Data.IntMap as IntMap
c0c2380bced8159ff0297ece14eba948bd236471Christian Maederimport qualified Data.Map as Map
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedernegateChanges :: ([DGRule],[DGChange]) -> ([DGRule],[DGChange])
9e748851c150e1022fb952bab3315e869aaf0214Christian MaedernegateChanges (_, dgChanges) = ([], reverse $ map negateChange dgChanges)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder negateChange :: DGChange -> DGChange
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder negateChange change = case change of
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder InsertNode x -> DeleteNode x
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder DeleteNode x -> InsertNode x
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder InsertEdge x -> DeleteEdge x
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder DeleteEdge x -> InsertEdge x
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder SetNodeLab old (node, new) -> SetNodeLab new (node, old)
ad4889ebb40efae8595b0969dd6ba1162d52bac3Christian Maeder-- | Undo one step of the History
4017ebc0f692820736d796af3110c3b3018c108aChristian Maederundo :: GInfo -> Bool -> IO ()
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederundo gInfo@(GInfo { libEnvIORef = ioRefProofStatus
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maeder , globalHist = gHist
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maeder , graphId = gid
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder , gi_GraphInfo = actGraph
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder }) isUndo = do
4017ebc0f692820736d796af3110c3b3018c108aChristian Maeder (guHist, grHist) <- takeMVar gHist
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder putStrLn $ show guHist
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder putStrLn $ show grHist
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder case if isUndo then guHist else grHist of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder showTemporaryMessage gid actGraph "History is empty..."
88318aafc287e92931dceffbb943d58a9310001dChristian Maeder putMVar gHist (guHist, grHist)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder (lns:gHist') -> do
a3c6d8e0670bf2aa71bc8e2a3b1f45d56dd65e4cChristian Maeder le <- readIORef ioRefProofStatus
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder undoDGraphs gInfo isUndo lns
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder putStrLn $ show $ filter (\ln -> elem ln lns) $ Map.keys le
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder updateDGraphs le $ filter (\ln -> elem ln lns) $ Map.keys le
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder putMVar gHist $ if isUndo then (gHist', (reverse lns):grHist)
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder else ((reverse lns):guHist, gHist')
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederundoDGraphs :: GInfo -> Bool -> [LIB_NAME] -> IO ()
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederundoDGraphs _ _ [] = return ()
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederundoDGraphs g u (ln:r) = do
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder undoDGraph g u ln
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder undoDGraphs g u r
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederundoDGraph :: GInfo -> Bool -> LIB_NAME -> IO ()
0be0db405c49906bd7057255069bf6df53395ac9Klaus LuettichundoDGraph (GInfo { libEnvIORef = ioRefProofStatus
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder , graphId = gid
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder , gi_GraphInfo = actGraph
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder }) isUndo ln = do
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder showTemporaryMessage gid actGraph $ "Undo last change to " ++ show ln ++ "..."
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder le <- readIORef ioRefProofStatus
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder dg = lookupDGraph ln le
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder (phist,rhist) = if isUndo then (proofHistory dg, redoHistory dg)
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder else (redoHistory dg, proofHistory dg)
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder change = negateChanges $ head phist
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder dg'' = (applyProofHistory [change] dg)
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder dg' = case isUndo of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder True -> dg'' { redoHistory = change:rhist
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder , proofHistory = tail phist}
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder False -> dg'' { redoHistory = tail phist
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder , proofHistory = change:rhist}
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder writeIORef ioRefProofStatus $ Map.insert ln dg' le
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederupdateDGraphs :: LibEnv -> [LIB_NAME] -> IO ()
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederupdateDGraphs _ [] = return ()
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaederupdateDGraphs le (ln:r) = do
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder updateDGraph $ lookupDGraph ln le
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder updateDGraphs le r
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian MaederupdateDGraph :: DGraph -> IO ()
89f7631cbfbd1bb99fc152b434bd362a7799d295Christian MaederupdateDGraph dg = case openlock dg of
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder Just lock -> do
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder mRemakeF <- tryTakeMVar lock
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder case mRemakeF of
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder Just remakeF -> do
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder putMVar lock remakeF
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Nothing -> return ()
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Nothing -> return ()
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder-- | reloads the Library of the DevGraph
6b6773cf587b74259178641d811746a235faf056Christian Maederreload :: GInfo -> IO()
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederreload gInfo@(GInfo { libEnvIORef = ioRefProofStatus
2c619a4dfdc1df27573eba98e81ed1ace906941dChristian Maeder , gi_LIB_NAME = ln
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich , gi_hetcatsOpts = opts
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder oldle <- readIORef ioRefProofStatus
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder libdeps = Rel.toList $ Rel.intransKernel $ Rel.transClosure $ Rel.fromList
d272062059eea4d7479e1c6e8517469f02f61287Christian Maeder $ getLibDeps oldle
7c5c311d67e187280877c45bd89dcba9038bc0a3Christian Maeder ioruplibs <- newIORef ([] :: [LIB_NAME])
7c5c311d67e187280877c45bd89dcba9038bc0a3Christian Maeder writeIORef ioruplibs []
7c5c311d67e187280877c45bd89dcba9038bc0a3Christian Maeder reloadLibs ioRefProofStatus opts libdeps ioruplibs ln
7c5c311d67e187280877c45bd89dcba9038bc0a3Christian Maeder remakeGraph gInfo
7c5c311d67e187280877c45bd89dcba9038bc0a3Christian Maeder-- | Creates a list of all LIB_NAME pairs, which have a dependency
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedergetLibDeps :: LibEnv -> [(LIB_NAME, LIB_NAME)]
83394c6b6e6de128e71b67c9251ed7a84485d082Christian MaedergetLibDeps le =
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder concat $ map (\ ln -> getDep ln le) $ Map.keys le
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder-- | Creates a list of LIB_NAME pairs for the fist argument
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedergetDep :: LIB_NAME -> LibEnv -> [(LIB_NAME, LIB_NAME)]
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaedergetDep ln le =
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder map (\ x -> (ln, x)) $ map (\ (_,x,_) -> dgn_libname x) $ IntMap.elems $
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder IntMap.filter (\ (_,x,_) -> isDGRef x) $ Tree.convertToMap $
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder dgBody $ lookupDGraph ln le
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers-- | Reloads a library
010c56c4cf12dd7977ca36efe85219b91e265ee3Christian MaederreloadLib :: IORef LibEnv -> HetcatsOpts -> IORef [LIB_NAME] -> LIB_NAME
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till MossakowskireloadLib iorle opts ioruplibs ln = do
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder mfile <- existsAnSource opts {intype = GuessIn}
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers $ rmSuffix $ libNameToFile opts ln
819e29dba060687cf391e444e0f6ff88c1908cc3Christian Maeder case mfile of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder Nothing -> do
383aa66e5142365fe9b1f88b18c1da5b27cc8c04Christian Maeder Just file -> do
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers le <- readIORef iorle
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder mres <- anaLibExt opts file le'
383aa66e5142365fe9b1f88b18c1da5b27cc8c04Christian Maeder Just (_, newle) -> do
383aa66e5142365fe9b1f88b18c1da5b27cc8c04Christian Maeder uplibs <- readIORef ioruplibs
383aa66e5142365fe9b1f88b18c1da5b27cc8c04Christian Maeder writeIORef ioruplibs $ ln:uplibs
383aa66e5142365fe9b1f88b18c1da5b27cc8c04Christian Maeder writeIORef iorle newle
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder Nothing -> do
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder fail $ "Could not read original development graph from '"++ file
819e29dba060687cf391e444e0f6ff88c1908cc3Christian Maeder-- | Reloads libraries if nessesary
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaederreloadLibs :: IORef LibEnv -> HetcatsOpts -> [(LIB_NAME, LIB_NAME)]
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder -> IORef [LIB_NAME] -> LIB_NAME -> IO Bool
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaederreloadLibs iorle opts deps ioruplibs ln = do
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder uplibs <- readIORef ioruplibs
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder case elem ln uplibs of
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder True -> return True
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder deps' = map (snd) $ filter (\ (ln',_) -> ln == ln') deps
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder res <- mapM (reloadLibs iorle opts deps ioruplibs) deps'
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder libupdate = foldl (\ u r -> if r then True else u) False res
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder case libupdate of
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder reloadLib iorle opts ioruplibs ln
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder le <- readIORef iorle
6fe9628743562678acf97d6730ebcfee5e9e50c2Christian Maeder newln:_ = filter (ln ==) $ Map.keys le
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder mfile <- existsAnSource opts $ rmSuffix $ libNameToFile opts ln
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder case mfile of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder Nothing -> do
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maeder Just file -> do
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder newmt <- getModificationTime file
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder libupdate' = (getModTime $ getLIB_ID newln) < newmt
fb328c4f646dd3dd78a9391c5cb58450a3dd0aa9Klaus Luettich case libupdate' of
fb328c4f646dd3dd78a9391c5cb58450a3dd0aa9Klaus Luettich False -> return False
e96a0bf4040fd789339958c01f145c5057d26db6René Wagner reloadLib iorle opts ioruplibs ln
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder-- | Deletes the old edges and nodes of the Graph and makes new ones
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederremakeGraph :: GInfo -> IO ()
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederremakeGraph (GInfo { libEnvIORef = ioRefProofStatus
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers , conversionMapsIORef = convRef
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder , graphId = gid
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder , gi_LIB_NAME = ln
b9b960bc75e34658e70c4a0231dbc6a6e7373f2dChristian Maeder , gi_GraphInfo = actGraphInfo
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich le <- readIORef ioRefProofStatus
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder (gs,ev_cnt) <- readIORef actGraphInfo
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski dgraph = lookupDGraph ln le
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder Just (_, g) = find (\ (gid', _) -> gid' == gid) gs
383aa66e5142365fe9b1f88b18c1da5b27cc8c04Christian Maeder gs' = deleteBy (\ (gid1,_) (gid2,_) -> gid1 == gid2) (gid,g) gs
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till Mossakowski og = theGraph g
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder -- reads and delets the old nodes and edges
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder mapM_ (deleteArc og) $ map (\ (_,_,_,x) -> x) $ Map.elems $ AGV.edges g
c9acb8681bcc512245b4f0d1a9f2b189c60e10d4Christian Maeder mapM_ (deleteNode og) $ map snd $ Map.elems $ AGV.nodes g
38352346eb1a67ba0f4eab8ad6f718528cf0cde0Christian Maeder -- stores the graph without nodes and edges in the GraphInfo
63e50b4c36074d5fb9de872c4007b688b4bce534Christian Maeder g' = g {theGraph = og, AGV.nodes = Map.empty, AGV.edges = Map.empty}
63e50b4c36074d5fb9de872c4007b688b4bce534Christian Maeder writeIORef actGraphInfo ((gid,g'):gs',ev_cnt)
bd54a9917cd87169b8e40bcc5616c537fed85815Christian Maeder -- creates new nodes and edges
11b55e6fbbc397b9fa41a7d61be53c6f4f027824Christian Maeder newConvMaps <- convertNodes emptyConversionMaps gid actGraphInfo dgraph ln
11b55e6fbbc397b9fa41a7d61be53c6f4f027824Christian Maeder finalConvMaps <- convertEdges newConvMaps gid actGraphInfo dgraph ln
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder -- writes the ConversionMap and redisplays the graph
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder writeIORef convRef finalConvMaps
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder redisplay gid actGraphInfo
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederhideShowNames :: GInfo -> Bool -> IO ()
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederhideShowNames (GInfo {graphId = gid,
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder gi_GraphInfo = actGraphInfo,
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder internalNamesIORef = showInternalNames
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder }) toggle = do
6bf24e5eb644064ad650eb3fd9774483fccbf601Christian Maeder deactivateGraphWindow gid actGraphInfo
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder (intrn::InternalNames) <- readIORef showInternalNames
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder let showThem = if toggle then not $ showNames intrn else showNames intrn
ffd3a0c7339cc3637f022c38e66a7aa9f0cf10d3Rainer Grabbe showItrn s = if showThem then s else ""
e8db9a65830cf71504e33c6f441a67b4d184a3caChristian Maeder mapM_ (\(s,upd) -> upd (\_ -> showItrn s)) $ updater intrn
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder writeIORef showInternalNames $ intrn {showNames = showThem}
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder redisplay gid actGraphInfo
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder activateGraphWindow gid actGraphInfo
dbe752ee940baae7f9f231f29c62284bb0f90a25Christian MaedershowNodes :: GInfo -> IO ()
53818ced114da21321063fff307aa41c1ab31dd3Achim MahnkeshowNodes gInfo@(GInfo {descrIORef = event,
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder graphId = gid,
53818ced114da21321063fff307aa41c1ab31dd3Achim Mahnke gi_GraphInfo = actGraphInfo
53818ced114da21321063fff307aa41c1ab31dd3Achim Mahnke deactivateGraphWindow gid actGraphInfo
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder descr <- readIORef event
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder AGV.Result _ errorMsg <- checkHasHiddenNodes gid descr actGraphInfo
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder case errorMsg of
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich Nothing -> do
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich showTemporaryMessage gid actGraphInfo "Revealing hidden nodes ..."
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder showIt gid descr actGraphInfo
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder hideShowNames gInfo False
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski showTemporaryMessage gid actGraphInfo "No hidden nodes found ..."
4017ebc0f692820736d796af3110c3b3018c108aChristian Maeder activateGraphWindow gid actGraphInfo
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederhideNodes :: GInfo -> IO ()
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian MaederhideNodes (GInfo {descrIORef = event,
83394c6b6e6de128e71b67c9251ed7a84485d082Christian Maeder graphId = gid,
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian Maeder gi_GraphInfo = actGraphInfo
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder deactivateGraphWindow gid actGraphInfo
0c355dd0b739631ee472f9a656e266be27fa4e64Christian Maeder descr' <- readIORef event
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder AGV.Result _ errorMsg <- checkHasHiddenNodes gid descr' actGraphInfo
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian Maeder case errorMsg of
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder Nothing -> do
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder showTemporaryMessage gid actGraphInfo "Nodes already hidden ..."
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder showTemporaryMessage gid actGraphInfo "Hiding unnamed nodes..."
c7ec85d1103173e089aa5048fd7afb2f9b505124Klaus Luettich AGV.Result descr msg <- hideSetOfNodeTypes gid
c7ec85d1103173e089aa5048fd7afb2f9b505124Klaus Luettich [--red nodes are not hidden
c7ec85d1103173e089aa5048fd7afb2f9b505124Klaus Luettich --"open_cons__internal",
c7ec85d1103173e089aa5048fd7afb2f9b505124Klaus Luettich --"locallyEmpty__open_cons__internal",
c7ec85d1103173e089aa5048fd7afb2f9b505124Klaus Luettich --"proven_cons__internal",
b905126bab9454b89041f92b3c50bb9efc85e427Klaus Luettich "locallyEmpty__proven_cons__internal"]
5ea9168eddbfbfe2282ed46dfe107a8962d6727bChristian Maeder True actGraphInfo
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich writeIORef event descr
b905126bab9454b89041f92b3c50bb9efc85e427Klaus Luettich Nothing -> do redisplay gid actGraphInfo
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder Just err -> putStrLn err
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder activateGraphWindow gid actGraphInfo
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedertranslateGraph :: GInfo -> ConvFunc -> LibFunc -> IO ()
e7757995211bd395dc79d26fe017d99375f7d2a6Christian MaedertranslateGraph (GInfo {libEnvIORef = ioRefProofStatus,
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder gi_LIB_NAME = ln,
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder gi_hetcatsOpts = opts
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder }) convGraph showLib = do
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich le <- readIORef ioRefProofStatus
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich openTranslateGraph le ln opts (getDGLogic le) convGraph showLib
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus LuettichshowLibGraph :: GInfo -> LibFunc -> IO ()
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus LuettichshowLibGraph gInfo showLib = do
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich showLib gInfo
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich{- | it tries to perform the given action to the given graph.
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich If part of the given graph is not hidden, then the action can
c4ef79587a902327f36277c45a8d91d1e67bd6d5Klaus Luettich be performed directly; otherwise the graph will be shown completely
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder firstly, and then the action will be performed, and after that the graph
b905126bab9454b89041f92b3c50bb9efc85e427Klaus Luettich will be hidden again.
b905126bab9454b89041f92b3c50bb9efc85e427Klaus LuettichperformProofAction :: GInfo -> IO () -> IO ()
b905126bab9454b89041f92b3c50bb9efc85e427Klaus LuettichperformProofAction gInfo@(GInfo {descrIORef = event,
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder graphId = gid,
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder gi_GraphInfo = actGraphInfo
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder }) proofAction = do
dbe752ee940baae7f9f231f29c62284bb0f90a25Christian Maeder deactivateGraphWindow gid actGraphInfo
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder let actionWithMessage = do
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder showTemporaryMessage gid actGraphInfo
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder "Applying development graph calculus proof rule..."
68aab98a58d1460c77a1573a86c32a891756a420Christian Maeder descr <- readIORef event
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder AGV.Result _ errorMsg <- checkHasHiddenNodes gid descr actGraphInfo
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder case errorMsg of
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maeder Nothing -> do
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maeder showNodes gInfo
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder actionWithMessage
3a7788e09dd23b364a46c9488cbd1522369113dbChristian Maeder hideNodes gInfo
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder Just _ -> actionWithMessage
ef67402074be14deb95e4ff564737d5593144130Klaus Luettich showTemporaryMessage gid actGraphInfo
dbe752ee940baae7f9f231f29c62284bb0f90a25Christian Maeder "Development graph calculus proof rule finished."
ef67402074be14deb95e4ff564737d5593144130Klaus Luettich activateGraphWindow gid actGraphInfo
e7e1ab2ac3f1fded8611bb92ae00e8f3b8c693fbKlaus LuettichsaveProofStatus :: GInfo -> FilePath -> IO ()
ef67402074be14deb95e4ff564737d5593144130Klaus LuettichsaveProofStatus (GInfo {libEnvIORef = ioRefProofStatus,
1323eba62fc519b068f5aaec4f9d2be05ffabea9Klaus Luettich gi_LIB_NAME = ln,
a80c28bb8b7a23ccdf7e08d0fe216fc19cc97273Klaus Luettich gi_hetcatsOpts = opts
d784803f9c752667b4fcf7393d698002bedf3f89Klaus Luettich }) file = encapsulateWaitTermAct $ do
1323eba62fc519b068f5aaec4f9d2be05ffabea9Klaus Luettich proofStatus <- readIORef ioRefProofStatus
1323eba62fc519b068f5aaec4f9d2be05ffabea9Klaus Luettich writeShATermFile file (ln, lookupHistory ln proofStatus)
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder putIfVerbose opts 2 $ "Wrote " ++ file
462d9dc583444aab82732e14a75610684d2dc7e9Christian Maeder-- | implementation of open menu, read in a proof status
5d39c60274aaa76506292d2d9e885fccd27e1eabChristian MaederopenProofStatus :: GInfo -> FilePath -> ConvFunc -> LibFunc
5d39c60274aaa76506292d2d9e885fccd27e1eabChristian Maeder -> IO (Descr, GraphInfo, ConversionMaps)
e7757995211bd395dc79d26fe017d99375f7d2a6Christian MaederopenProofStatus gInfo@(GInfo {libEnvIORef = ioRefProofStatus,
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder conversionMapsIORef = convRef,
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder gi_LIB_NAME = ln,
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder gi_hetcatsOpts = opts
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder }) file convGraph showLib = do
1f8a7f8343f7df719768d2b1d7e3077ee291a1caChristian Maeder mh <- readVerbose opts ln file
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich Nothing -> fail
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich $ "Could not read proof status from file '"
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder ++ file ++ "'"
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich let libfile = libNameToFile opts ln
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder m <- anaLib opts { outtypes = [] } libfile
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder Nothing -> fail
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder $ "Could not read original development graph from '"
2e2094a642e3775b0d76b890556407941d3a53b6Christian Maeder ++ libfile ++ "'"
340706b6c0c6e3dbacdd7003e20e9cab7f9aa765Christian Maeder Just (_, libEnv) -> case Map.lookup ln libEnv of
43bb71dfe7ec405f563864d57c1cacdaa8ce9a80Christian Maeder Nothing -> fail
2e2094a642e3775b0d76b890556407941d3a53b6Christian Maeder $ "Could not get original development graph for '"
340706b6c0c6e3dbacdd7003e20e9cab7f9aa765Christian Maeder ++ showDoc ln "'"
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski Just dg -> do
aa6c527682224a4e1434f80eae8bc2ef67fb6ca6Christian Maeder oldEnv <- readIORef ioRefProofStatus
aa6c527682224a4e1434f80eae8bc2ef67fb6ca6Christian Maeder let proofStatus = Map.insert ln
37951dbd8e5f2418a07f072d9bf551d0c3a1eafcChristian Maeder (applyProofHistory h dg) oldEnv
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder writeIORef ioRefProofStatus proofStatus
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder gInfo' <- copyGInfo gInfo
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder (gid, actGraphInfo, convMaps) <-
aa6c527682224a4e1434f80eae8bc2ef67fb6ca6Christian Maeder convGraph (gInfo' {gi_LIB_NAME = ln})
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder "Proof Status " showLib
c22d75ec3ea1306219d1c09a5b3e8ff04f753ad6Christian Maeder writeIORef convRef convMaps
9c3edf2b283c09d33b2820696886d1ed32fcadc8Christian Maeder redisplay gid actGraphInfo
c22d75ec3ea1306219d1c09a5b3e8ff04f753ad6Christian Maeder return (gid, actGraphInfo, convMaps)
68b77966b2cf7bf2e340bf0fb6b9efc3e6a00467Christian Maeder-- | apply a rule of the development graph calculus
83394c6b6e6de128e71b67c9251ed7a84485d082Christian MaederproofMenu :: GInfo
5bb7eeaca10ea76595229375f907a5a388b7c882Christian Maeder -> (LibEnv -> IO (Res.Result LibEnv))
5bb7eeaca10ea76595229375f907a5a388b7c882Christian MaederproofMenu gInfo@(GInfo { libEnvIORef = ioRefProofStatus
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder , descrIORef = event
5bb7eeaca10ea76595229375f907a5a388b7c882Christian Maeder , conversionMapsIORef = convRef
94d3aa05411444596b44ede4531f05dd7ac20fdfChristian Maeder , graphId = gid
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder , gi_LIB_NAME = ln
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder , gi_GraphInfo = actGraphInfo
ddc9315cc0b1f5dd3d8f99a77f1c75064db33b48Christian Maeder , gi_hetcatsOpts = hOpts
ddc9315cc0b1f5dd3d8f99a77f1c75064db33b48Christian Maeder , proofGUIMVar = guiMVar
5d522dff4d0fabf57dd476d4c3de15d354a89f62Christian Maeder , visibleNodesIORef = ioRefVisibleNodes
5d522dff4d0fabf57dd476d4c3de15d354a89f62Christian Maeder , globalHist = gHist
5d522dff4d0fabf57dd476d4c3de15d354a89f62Christian Maeder }) proofFun = do
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder filled <- tryPutMVar guiMVar Nothing
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder if not filled
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder then readMVar guiMVar >>=
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maeder (maybe (putIfVerbose hOpts 0 "proofMenu: ignored Nothing")
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich putIfVerbose hOpts 4 $
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich "proofMenu: Ignored Proof command; " ++
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich "maybe a proof window is still open?"
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich proofStatus <- readIORef ioRefProofStatus
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich putIfVerbose hOpts 4 "Proof started via \"Proofs\" menu"
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich Res.Result ds res <- proofFun proofStatus
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich putIfVerbose hOpts 4 "Analyzing result of proof"
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich Nothing -> mapM_ (putStrLn . show) ds
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich Just newProofStatus -> do
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich let newGr = lookupDGraph ln newProofStatus
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich history = proofHistory newGr
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich (guHist, grHist) <- takeMVar gHist
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich putMVar gHist $ ((calcGlobalHistory proofStatus newProofStatus):guHist
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich writeIORef ioRefProofStatus newProofStatus
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich descr <- readIORef event
ac43fa22d2d3f91a17674ac164cba3cf39a17795Klaus Luettich convMaps <- readIORef convRef
ac43fa22d2d3f91a17674ac164cba3cf39a17795Klaus Luettich (newDescr,convMapsAux) <- applyChanges gid ln actGraphInfo descr
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers ioRefVisibleNodes convMaps history
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder writeIORef ioRefProofStatus $ Map.insert ln newGr newProofStatus
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers writeIORef event newDescr
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder writeIORef convRef convMapsAux
18c1d987ce5818ecf0bfc8af3f43aed2ce86e1eaChristian Maeder hideShowNames gInfo False
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder mGUIMVar <- tryTakeMVar guiMVar
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder maybe (fail $ "should be filled with Nothing after "++"proof attempt")
1c9a63e4f7c6879f51fe0f32154a9116f2c126dbChristian Maeder (const $ return ())
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaedercalcGlobalHistory :: LibEnv -> LibEnv -> [LIB_NAME]
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaedercalcGlobalHistory old new = let
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder pHist = (\ ln le -> proofHistory $ lookupDGraph ln le)
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder length' = (\ ln le -> length $ pHist ln le)
fb328c4f646dd3dd78a9391c5cb58450a3dd0aa9Klaus Luettich changes = filter (\ ln -> pHist ln old /= pHist ln new) $ Map.keys old
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till Mossakowski in concatMap (\ ln -> replicate (length' ln new - length' ln old) ln) changes
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till MossakowskinodeErr :: Descr -> IO ()
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaedernodeErr descr = error $ "node with descriptor " ++ show descr
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder ++ " has no corresponding node in the development graph"
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaedershowSpec :: Descr -> DGraphAndAGraphNode -> DGraph -> IO ()
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian MaedershowSpec descr dgAndabstrNodeMap dgraph =
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder case InjMap.lookupWithB descr dgAndabstrNodeMap of
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder Nothing -> return ()
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder Just (_, node) -> do
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers let sp = dgToSpec dgraph node
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder sp' = case sp of
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder Res.Result ds Nothing -> show $ vcat $ map pretty ds
e96a0bf4040fd789339958c01f145c5057d26db6René Wagner Res.Result _ m -> showDoc m ""
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder createTextDisplay "Show spec" sp' [size(80,25)]
abf2487c3aece95c371ea89ac64319370dcb6483Klaus Luettich{- | auxiliary method for debugging. shows the number of the given node
abf2487c3aece95c371ea89ac64319370dcb6483Klaus Luettich in the abstraction graph
abf2487c3aece95c371ea89ac64319370dcb6483Klaus LuettichgetNumberOfNode :: Descr -> IO()
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix ReckersgetNumberOfNode descr =
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder let title = "Number of node"
83394c6b6e6de128e71b67c9251ed7a84485d082Christian Maeder-- make the node number consistent, the descritor should be reduced by one
8555737bcc9bf1d0afb6624e4d8668f070bcaba1Christian Maeder in createTextDisplay title (showDoc (descr-1) "") [HTk.size(10,10)]
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder{- | outputs the signature of a node in a window;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederused by the node menu defined in initializeGraph -}
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedergetSignatureOfNode :: Descr -> DGraphAndAGraphNode -> DGraph -> IO()
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus LuettichgetSignatureOfNode descr dgAndabstrNodeMap dgraph =
a80c28bb8b7a23ccdf7e08d0fe216fc19cc97273Klaus Luettich case InjMap.lookupWithB descr dgAndabstrNodeMap of
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Just (_, node) ->
a80c28bb8b7a23ccdf7e08d0fe216fc19cc97273Klaus Luettich let dgnode = lab' (contextDG dgraph node)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder title = "Signature of "++showName (dgn_name dgnode)
83394c6b6e6de128e71b67c9251ed7a84485d082Christian Maeder in createTextDisplay title (showDoc (dgn_sign dgnode) "")
b9625461755578f3eed04676d42a63fd2caebd0cChristian Maeder Nothing -> nodeErr descr
d0652648f9879c67a194f8b03baafe2700c68eb4Christian Maeder fetches the theory from a node inside the IO Monad
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder (added by KL based on code in getTheoryOfNode) -}
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederlookupTheoryOfNode :: IORef LibEnv -> Descr -> DGraphAndAGraphNode ->
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maeder DGraph -> IO (Res.Result (Node,G_theory))
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus LuettichlookupTheoryOfNode proofStatusRef descr dgAndabstrNodeMap _ = do
3e61f574717499939bd8e0ff538ea9e7b72d4e2dKlaus Luettich libEnv <- readIORef proofStatusRef
83394c6b6e6de128e71b67c9251ed7a84485d082Christian Maeder (ln, node) <-
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich maybeToResult nullRange ("Node "++show descr++" not found")
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $ InjMap.lookupWithB descr dgAndabstrNodeMap
83394c6b6e6de128e71b67c9251ed7a84485d082Christian Maeder gth <- computeTheory libEnv ln node
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich return (node, gth)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder{- | outputs the local axioms of a node in a window;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederused by the node menu defined in initializeGraph-}
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedergetLocalAxOfNode :: GInfo -> Descr -> DGraphAndAGraphNode -> DGraph -> IO ()
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedergetLocalAxOfNode _ descr dgAndabstrNodeMap dgraph = do
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder case InjMap.lookupWithB descr dgAndabstrNodeMap of
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Just (_, node) ->
2c619a4dfdc1df27573eba98e81ed1ace906941dChristian Maeder let dgnode = lab' (contextDG dgraph node) in
2c619a4dfdc1df27573eba98e81ed1ace906941dChristian Maeder if isDGRef dgnode then createTextDisplay
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder ("Local Axioms of "++ showName (dgn_name dgnode))
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder "no local axioms (reference node to other library)"
50515239e7e190f4a34ca581dd685d002148fbddChristian Maeder else displayTheory "Local Axioms" node dgraph $ dgn_theory dgnode
50515239e7e190f4a34ca581dd685d002148fbddChristian Maeder Nothing -> nodeErr descr
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder{- | outputs the theory of a node in a window;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederused by the node menu defined in initializeGraph-}
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedergetTheoryOfNode :: GInfo -> Descr -> DGraphAndAGraphNode -> DGraph -> IO ()
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedergetTheoryOfNode gInfo descr dgAndabstrNodeMap dgraph = do
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder r <- lookupTheoryOfNode (libEnvIORef gInfo) descr dgAndabstrNodeMap dgraph
8b4c68db8b465107cabef8b9cd5b6bc216e1b156Till Mossakowski showDiags (gi_hetcatsOpts gInfo) ds
df29370ae8d8b41587957f6bcdcb43a3f1927e47Christian Maeder (Just (n, gth)) ->
5ce19352a9cc47d982819cc889a71cd0a61ac171Christian Maeder (showName $ dgn_name $ lab' (contextDG dgraph n))
5ce19352a9cc47d982819cc889a71cd0a61ac171Christian Maeder (addHasInHidingWarning dgraph n)
23ab8855c58adfbd03a0730584b917b24c603901Christian Maeder _ -> return ()
23ab8855c58adfbd03a0730584b917b24c603901Christian MaederdisplayTheory :: String -> Node -> DGraph -> G_theory -> IO ()
e50e41135ece589f7202bd4ef8d6b97531c2a56eKlaus LuettichdisplayTheory ext node dgraph gth =
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder (showName $ dgn_name $ lab' (contextDG dgraph node))
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder{- | translate the theory of a node in a window;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederused by the node menu defined in initializeGraph-}
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedertranslateTheoryOfNode :: GInfo -> Descr -> DGraphAndAGraphNode -> DGraph
43b4c41fbb07705c9df321221ab9cb9832460407Christian MaedertranslateTheoryOfNode gInfo@(GInfo {gi_hetcatsOpts = opts})
88318aafc287e92931dceffbb943d58a9310001dChristian Maeder descr dgAndabstrNodeMap dgraph = do
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder libEnv <- readIORef $ libEnvIORef gInfo
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder (ln, node) <-
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder maybeToResult nullRange ("Node "++show descr++" not found")
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder $ InjMap.lookupWithB descr dgAndabstrNodeMap
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder th <- computeTheory libEnv ln node
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich return (node,th) ) of
9096f6c6aaded6cd8288656ceccd4c7b3bd0747eChristian Maeder Res.Result [] (Just (node,th)) -> do
9096f6c6aaded6cd8288656ceccd4c7b3bd0747eChristian Maeder Res.Result ds _ <- runResultT(
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich do G_theory lid sign _ sens _ <- return th
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich -- find all comorphism paths starting from lid
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich let paths = findComorphismPaths logicGraph (sublogicOfTh th)
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich -- let the user choose one
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich sel <- lift $ listBox "Choose a logic translation"
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich (map show paths)
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich i <- case sel of
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Just j -> return j
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder _ -> liftR $ fail "no logic translation chosen"
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder Comorphism cid <- return (paths!!i)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder -- adjust lid's
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus Luettich let lidS = sourceLogic cid
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder lidT = targetLogic cid
c72c1e75a969ff4c336e77481c2a8e42603f13eeChristian Maeder sign' <- coerceSign lid lidS "" sign
fdef3358918491badb0e29e42b5d3b5a01950716Christian Maeder sens' <- coerceThSens lid lidS "" sens
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maeder -- translate theory along chosen comorphism
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maeder (sign'',sens1) <-
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maeder liftR $ wrapMapTheory cid (plainSign sign', toNamedList sens')
88318aafc287e92931dceffbb943d58a9310001dChristian Maeder lift $ GUI.HTkUtils.displayTheoryWithWarning
fdef3358918491badb0e29e42b5d3b5a01950716Christian Maeder "Translated Theory"
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder (showName $ dgn_name $ lab' (contextDG dgraph node))
88318aafc287e92931dceffbb943d58a9310001dChristian Maeder (addHasInHidingWarning dgraph node)
7767474aba4fa2dc51a6c68017d3bcef3b773001Christian Maeder (G_theory lidT (mkExtSign sign'') 0 (toThSens sens1) 0)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder showDiags opts ds
340706b6c0c6e3dbacdd7003e20e9cab7f9aa765Christian Maeder Res.Result ds _ -> showDiags opts ds
bf76f4fcf07abaebea587df8135de8356c26a363Till Mossakowski{- | outputs the sublogic of a node in a window;
88318aafc287e92931dceffbb943d58a9310001dChristian Maederused by the node menu defined in initializeGraph -}
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till MossakowskigetSublogicOfNode :: IORef LibEnv -> Descr -> DGraphAndAGraphNode
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder -> DGraph -> IO()
6e049108aa87dc46bcff96fae50a4625df1d9648Klaus LuettichgetSublogicOfNode proofStatusRef descr dgAndabstrNodeMap dgraph = do
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder libEnv <- readIORef proofStatusRef
6e049108aa87dc46bcff96fae50a4625df1d9648Klaus Luettich case InjMap.lookupWithB descr dgAndabstrNodeMap of
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Just (ln, node) ->
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder let dgnode = lab' (contextDG dgraph node)
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich name = if isDGRef dgnode then emptyNodeName
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder else dgn_name dgnode
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder in case computeTheory libEnv ln node of
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich Res.Result _ (Just th) ->
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder let logstr = show $ sublogicOfTh th
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder title = "Sublogic of "++showName name
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder in createTextDisplay title logstr [HTk.size(30,10)]
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder error $ "Could not compute theory for sublogic computation: "
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder ++ concatMap show ds
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Nothing -> nodeErr descr
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich-- | prints the origin of the node
0be0db405c49906bd7057255069bf6df53395ac9Klaus LuettichshowOriginOfNode :: Descr -> DGraphAndAGraphNode -> DGraph -> IO()
0be0db405c49906bd7057255069bf6df53395ac9Klaus LuettichshowOriginOfNode descr dgAndabstrNodeMap dgraph =
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich case InjMap.lookupWithB descr dgAndabstrNodeMap of
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich Just (_, node) ->
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich let dgnode = lab' (contextDG dgraph node) in
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich if isDGRef dgnode then error "showOriginOfNode: no DGNode" else
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich let title = "Origin of node "++ showName (dgn_name dgnode)
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich in createTextDisplay title
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich (showDoc (dgn_origin dgnode) "") [HTk.size(30,10)]
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich Nothing -> nodeErr descr
2e62113845a35e07cb46db05714627c95450f267Klaus Luettich-- | Show proof status of a node
0be0db405c49906bd7057255069bf6df53395ac9Klaus LuettichshowProofStatusOfNode :: GInfo -> Descr -> DGraphAndAGraphNode -> DGraph
0be0db405c49906bd7057255069bf6df53395ac9Klaus LuettichshowProofStatusOfNode _ descr dgAndabstrNodeMap dgraph =
0be0db405c49906bd7057255069bf6df53395ac9Klaus Luettich case InjMap.lookupWithB descr dgAndabstrNodeMap of
438f9bd974c8e668203e636b0f2bc80c589af043Klaus Luettich Just (_, node) ->
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder do let dgnode = lab' (contextDG dgraph node)
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder let stat = showStatusAux dgnode
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder let title = "Proof status of node "++showName (dgn_name dgnode)
88318aafc287e92931dceffbb943d58a9310001dChristian Maeder createTextDisplay title stat [HTk.size(105,55)]
438f9bd974c8e668203e636b0f2bc80c589af043Klaus Luettich Nothing -> nodeErr descr
e62d49c0dc2893da75faad896bd135e2e9a7087bKlaus LuettichshowStatusAux :: DGNodeLab -> String
let goals = OMap.filter (not . isAxiom) sens
(proven,open) = OMap.partition isProvenSenStatus goals
case InjMap.lookupWithB descr dgAndabstrNodeMap of
createTextDisplay "ID of Edge" (show $ dgl_id linklab) [HTk.size(30,10)]
++ "in the development graph") [HTk.size(30,10)]
[HTk.size(100,40)]
++ "in the development graph") [HTk.size(30,10)]
(showDoc (dgl_origin linklab) "") [HTk.size(30,10)]
++ "in the development graph") [HTk.size(30,10)]
createTextSaveDisplay "Proof Status" "proofstatus.txt"
Res.Result _ (Just th1) -> th1
sign2 <- coerceSign lid1 lid "checkconservativityOfEdge.coerceSign" sign1
let Res.Result ds res =
(showRes ++ "\n" ++ myDiags) [HTk.size(50,50)]
++ "in the development graph") [HTk.size(30,10)]
AGV.Result newDescr _ <- addnode descr
{ dgAndabstrNode = InjMap.insert (libname, node) newDescr
do let srcnode = InjMap.lookupWithA (libname,src) (dgAndabstrNode convMaps)
tarnode = InjMap.lookupWithA (libname,tar) (dgAndabstrNode convMaps)
AGV.Result newDescr msg <- addlink descr (getDGLinkType edgelab)
{ dgAndabstrEdge = InjMap.insert (libname,
case InjMap.lookupWithB descr (dgAndabstrNode convMaps) of
case Map.lookup libname libname2dgMap of
case Map.lookup refLibname libname2dgMap of
case InjMap.lookupWithB descr (dgAndabstrNode convMaps) of
case Map.lookup libname libname2dgMap of
AGV.Result eventDescr errorMsg <- hidenodes abstractGraph
case InjMap.lookupWithA (libname, node) (dgAndabstrNode convMaps) of
case InjMap.lookupWithA dgNode (dgAndabstrNode convMaps) of
AGV.Result descr err <-
{ dgAndabstrNode = InjMap.updateBWithA dgNode
AGV.Result descr err <-
{ dgAndabstrNode = InjMap.insert dgNode descr
case InjMap.lookupWithA dgnode (dgAndabstrNode convMaps) of
AGV.Result descr err <- delnode gid abstrNode grInfo
{ dgAndabstrNode = InjMap.delete dgnode abstrNode
case (InjMap.lookupWithA (libname, src) dgAndabstrNodeMap,
InjMap.lookupWithA (libname, tgt) dgAndabstrNodeMap) of
AGV.Result descr err <-
{ dgAndabstrEdge = InjMap.insert dgEdge descr
case (InjMap.lookupWithA dgEdge dgAndabstrEdgeMap) of
do AGV.Result descr err <- dellink gid abstrEdge grInfo
{ dgAndabstrEdge = InjMap.delete dgEdge
-> Res.Result G_sublogics -> ConvFunc -> LibFunc -> IO ()
openTranslateGraph libEnv ln opts (Res.Result diagsSl mSublogic) convGraph
-- (see GUI.DGTranslation.getDGLogic), the process need not to go on.
Res.Result diagsR i <- runResultT ( do
Res.Result diagsTrans (Just newLibEnv) -> do
Res.Result diagsTrans Nothing ->