GtkDisprove.hs revision 7c84f8fd92ed59eb2b9a674e6b1ea93c0f945006
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiModule : $Header$
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiDescription : Gtk Module to enable disproving Theorems
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiCopyright : (c) Simon Ulbricht, Uni Bremen 2010
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiLicense : GPLv2 or higher, see LICENSE.txt
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiMaintainer : tekknix@informatik.uni-bremen.de
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiStability : provisional
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiPortability : portable
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiThis module provides a disproving module that checks consistency of inverted
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskimodule GUI.GtkDisprove (disproveAtNode) where
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskiimport GUI.GtkUtils as GtkUtils
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskiimport qualified GUI.Glade.NodeChecker as ConsistencyChecker
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maederimport Interfaces.GenericATPState (guiDefaultTimeLimit)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskiimport qualified Common.OrderedMap as OMap
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskiimport Control.Concurrent (forkIO, killThread)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskiimport qualified Data.Map as Map
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskishowDisproveGUI :: GInfo -> LibEnv -> DGraph -> LNode DGNodeLab -> IO ()
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskishowDisproveGUI gi le dg (i,lbl) = case globalTheory lbl of
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Nothing -> error "GtkDisprove.showDisproveGUI"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Just gt@(G_theory _ _ _ sens _) -> let
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski fgoal g = let th = negate_th gt g
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski l = lbl { dgn_theory = th }
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski l' = l { globalTheory = computeLabelTheory le dg (i, l) }
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski in FNode { name = g, node = (i,l'), sublogic = sublogicOfTh th,
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski cStatus = ConsistencyStatus CSUnchecked "" }
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski fgoals = map fgoal $ OMap.keys $ OMap.filter (not . isAxiom) sens
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski wait <- newEmptyMVar
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski showDisproveWindow wait (libName gi) le dg gt fgoals
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski res <- takeMVar wait
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskinegate_th :: G_theory -> String -> G_theory
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskinegate_th g_th goal = case g_th of
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski G_theory lid1 (ExtSign sign symb) i1 sens i2 ->
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski let axs = OMap.filter isAxiom sens
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder negSen = case OMap.lookup goal sens of
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Nothing -> error "GtkDisprove.disproveThmSingle(1)"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski case negation lid1 $ sentence sen of
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Nothing -> error "GtkDisprove.disproveThmSingle(2)"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Just sen' -> sen { sentence = sen', isAxiom = True }
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski sens' = OMap.insert goal negSen axs
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski in G_theory lid1 (ExtSign sign symb) i1 sens' i2
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskidisproveAtNode :: GInfo -> Int -> DGraph -> IO ()
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskidisproveAtNode gInfo descr dgraph = do
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski let iSt = intState gInfo
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski ost <- readIORef iSt
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski case i_state ost of
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Nothing -> return ()
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Just ist -> do
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski let le = i_libEnv ist
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski dgn = labDG dgraph descr
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski showDisproveGUI gInfo le dgraph (descr, dgn)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski-- | Displays a GUI to set TimeoutLimit and select the ConsistencyChecker
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski-- and holds the functionality to call the ConsistencyChecker for the
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski-- (previously negated) selected Theorems.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski-- TODO proveAtNode anschauen, nach hasLock (..), tryLockLocal,
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski -- MVar auf LNode DGNodeLab
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski-- TODO rueckgabe von G_theory (Result ..) und einbingung in GraphLogic
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskishowDisproveWindow :: MVar (Result G_theory) -> LibName -> LibEnv
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski -> DGraph -> G_theory -> [FNode] -> IO ()
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskishowDisproveWindow res ln le dg g_th fgoals = postGUIAsync $ do
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski xml <- getGladeXML ConsistencyChecker.get
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski -- get objects
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski window <- xmlGetWidget xml castToWindow "NodeChecker"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnClose <- xmlGetWidget xml castToButton "btnClose"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnResults <- xmlGetWidget xml castToButton "btnResults"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski -- get goals view and buttons
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski trvGoals <- xmlGetWidget xml castToTreeView "trvNodes"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnNodesAll <- xmlGetWidget xml castToButton "btnNodesAll"
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder btnNodesNone <- xmlGetWidget xml castToButton "btnNodesNone"
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder btnNodesInvert <- xmlGetWidget xml castToButton "btnNodesInvert"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnNodesUnchecked <- xmlGetWidget xml castToButton "btnNodesUnchecked"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnNodesTimeout <- xmlGetWidget xml castToButton "btnNodesTimeout"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski cbInclThms <- xmlGetWidget xml castToCheckButton "cbInclThms"
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder -- get checker view and buttons
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski cbComorphism <- xmlGetWidget xml castToComboBox "cbComorphism"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski lblSublogic <- xmlGetWidget xml castToLabel "lblSublogic"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski sbTimeout <- xmlGetWidget xml castToSpinButton "sbTimeout"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnCheck <- xmlGetWidget xml castToButton "btnCheck"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski btnStop <- xmlGetWidget xml castToButton "btnStop"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski trvFinder <- xmlGetWidget xml castToTreeView "trvFinder"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski windowSetTitle window "Consistency Checker"
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski spinButtonSetValue sbTimeout $ fromIntegral guiDefaultTimeLimit
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski let widgets = [ toWidget sbTimeout
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget cbComorphism
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget lblSublogic ]
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski checkWidgets = widgets ++ [ toWidget btnClose
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget btnNodesAll
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget btnNodesNone
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget btnNodesInvert
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget btnNodesUnchecked
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski , toWidget btnNodesTimeout
es = Map.findWithDefault (error
"GtkDisprove.showDisproveWindow") n' t
s = OMap.ele es