ProofManagement.hs revision 556f473448dfcceee22afaa89ed7a364489cdbbb
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederModule : $Header$
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian MaederDescription : Goal management GUI.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederCopyright : (c) Rene Wagner, Klaus L�ttich, Uni Bremen 2005
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederMaintainer : luecke@informatik.uni-bremen.de
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederStability : provisional
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederPortability : needs POSIX
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian MaederGoal management GUI for the structured level similar to how 'SPASS.Prove'
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederworks for SPASS.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maedermodule GUI.ProofManagement (proofManagementGUI,GUIMVar) where
ecf557c0b4f953106755a239da2c0b168064d3f4Christian Maederimport qualified Common.Doc as Pretty
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport qualified Common.Result as Result
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport qualified Data.Map as Map
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian Maederimport qualified Common.OrderedMap as OMap
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport qualified Control.Concurrent as Conc
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst Schulzimport Separator
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport XSelection
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport qualified Comorphisms.KnownProvers as KnownProvers
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder-- * Proof Management GUI
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder-- ** some types
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder-- | Type for storing the proof management window
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst Schulztype GUIMVar = Conc.MVar (Maybe Toplevel)
65dce48b81f69e11a36bf1051314a845299446e1Christian Maeder-- ** Defining the view
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder Colors used by the GUI to indicate the status of a goal.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederdata ProverStatusColour
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder -- | Not running
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder deriving (Bounded,Enum,Show)
62eaa2fb831613d8a6e59687f83a45be1041ab17Christian Maederdata SelButtonFrame = SBF { selAllEv :: Event ()
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder , deselAllEv :: Event ()
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder , sbf_btns :: [Button]
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder , sbf_btnFrame :: Frame}
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederdata SelAllListbox = SAL SelButtonFrame (ListBox String)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder Generates a ('ProverStatusColour', 'String') tuple.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederstatusNotRunning :: (ProverStatusColour, String)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederstatusNotRunning = (Black, "No Prover Running")
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder Generates a ('ProverStatusColour', 'String') tuple.
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian MaederstatusRunning :: (ProverStatusColour, String)
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian MaederstatusRunning = (Blue, "Waiting for Prover")
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder{- | Converts a 'ProofState' into a ('ProverStatusColour',
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder 'String') tuple to be displayed by the GUI.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedertoGuiStatus :: ProofState lid sentence
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder -> (ProverStatusColour, String)
67869d63d1725c79e4c07b51acd466a31932b275Christian MaedertoGuiStatus st = if proverRunning st
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder then statusRunning
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder else statusNotRunning
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder Generates a list of 'GUI.HTkUtils.LBGoalView' representations of all goals
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder Uses a status indicator internally.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedergoalsView :: ProofState lid sentence -- ^ current global state
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder -> [LBGoalView] -- ^ resulting ['LBGoalView'] list
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedergoalsView = map toStatus . OMap.toList . goalMap
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder where toStatus (l,st) =
67869d63d1725c79e4c07b51acd466a31932b275Christian Maeder let tStatus = thmStatus st
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder si = if null tStatus
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder then LBIndicatorOpen
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder else indicatorFromBasicProof
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (maximum $ map snd $ tStatus)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder in LBGoalView { statIndicator = si
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder , goalDescription = l}
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder-- ** GUI Implementation
ecf557c0b4f953106755a239da2c0b168064d3f4Christian Maeder-- *** Utility Functions
656f17ae9b7610ff2de1b6eedeeadea0c3bcdc8dChristian Maeder Populates the "Pick Theorem Prover" 'ListBox' with prover names (or possibly
6d4d212092e2edb139e0907a14e87c4df74ff06aChristian Maeder paths to provers).
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian MaederpopulatePathsListBox :: ListBox String
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian MaederpopulatePathsListBox lb prvs = do
083a5256468076d5a9bfeb22a6e97076c224252eChristian MaederpopulateAxiomsList ::
083a5256468076d5a9bfeb22a6e97076c224252eChristian Maeder (Logic lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
083a5256468076d5a9bfeb22a6e97076c224252eChristian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1) =>
083a5256468076d5a9bfeb22a6e97076c224252eChristian Maeder ListBox String
083a5256468076d5a9bfeb22a6e97076c224252eChristian Maeder -> ProofState lid1 sentence1
083a5256468076d5a9bfeb22a6e97076c224252eChristian MaederpopulateAxiomsList lbAxs s =
083a5256468076d5a9bfeb22a6e97076c224252eChristian Maeder do aM' <- axiomMap s
392b67dbb9414475750ac2a977348de77354c600Christian Maeder lbAxs # HTk.value (map (\(k,sen) -> if (wasTheorem sen) then "(Th) "++k
de66af0f4b27f08f81c7ca9c573ef9cdf7ca7a07Christian MaedersetSelectedProver :: ListBox String
de66af0f4b27f08f81c7ca9c573ef9cdf7ca7a07Christian Maeder -> ProofState lid1 sentence1
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian MaedersetSelectedProver lb st = do
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder let ind = case selectedProver st of
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder Just sp -> findIndex (==sp) $ Map.keys (proversMap st)
083a5256468076d5a9bfeb22a6e97076c224252eChristian Maeder Nothing -> Nothing
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder maybe (return ()) (\i -> selection i lb >> return ()) ind
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder-- *** Callbacks
6d4d212092e2edb139e0907a14e87c4df74ff06aChristian Maeder Updates the display of the status of the selected goals.
656f17ae9b7610ff2de1b6eedeeadea0c3bcdc8dChristian MaederupdateDisplay :: ProofState lid sentence -- ^ current global state
6d4d212092e2edb139e0907a14e87c4df74ff06aChristian Maeder -- ^ set to 'True' if you want the 'ListBox' to be updated
maybe [] (map ((OMap.keys (goalMap s))!!)) sel})
where fil str = map ((OMap.keys str)!!)
goalsText s' = show $ Pretty.vsep $
AS_Anno.mapNamed (simplify_sen lid1 sig1)) $
(thName ++ "-goals.txt") (goalsText sens')
Just (Map.keys (proversMap s) !! index))
-> KnownProvers.KnownProversMap -- ^ map of known provers
-- must be filled with Nothing and is filled with Nothing after closing the window; while the window is open it is filled with the Toplevel
-> IO (Result.Result G_theory)
-- KnownProvers.showKnownProvers knownProvers
stateMVar <- Conc.newMVar initState
lockMVar <- Conc.newMVar ()
Conc.tryTakeMVar guiMVar >>= (\ mmt ->
(maybe (Conc.putMVar guiMVar $ Just main)
-- HBox for the upper part (goals on the left, options/results on the right)
-- right frame (options/results)
pathsLb <- newListBox pathsFrame [HTk.value $ ([]::[String]), bg "white",
(\ sp -> find (==sp) $ Map.keys (proversMap s'))
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
s <- Conc.takeMVar stateMVar
(findIndices isOpenGoal $ OMap.toList $ goalMap s)
Conc.putMVar stateMVar s'
s <- Conc.takeMVar stateMVar
let axiomList = OMap.toList aM
Conc.putMVar stateMVar s'
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
Conc.modifyMVar_ stateMVar updateStatusSublogic
s <- Conc.readMVar stateMVar
Conc.modifyMVar_ stateMVar (\ s ->
s <- Conc.readMVar stateMVar
Result.Result ds ms'' <- (fineGrainedSelectionF prGuiAcs) prState
Conc.tryTakeMVar stateMVar -- ensure that MVar is empty
Conc.putMVar stateMVar s'''
s <- Conc.takeMVar stateMVar
Result.Result ds ms'' <- (proveF prGuiAcs) prState
Conc.putMVar stateMVar s'''
mv <- Conc.tryTakeMVar lockMVar
Conc.tryPutMVar lockMVar ()
s <- Conc.readMVar stateMVar
s <- Conc.readMVar stateMVar
+> (closeWindow >>> Conc.takeMVar lockMVar)
Conc.tryTakeMVar guiMVar >>= (\ mmt ->
(const $ Conc.putMVar guiMVar Nothing))
s <- Conc.takeMVar stateMVar
(Map.union sensT gMap) startThId)