From 6c0fd01d0e5d11d3930f9aef1d6cbdeff41962da Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 19 Jan 2023 14:01:17 +0100 Subject: [PATCH 01/69] fix issues --- CMDL/DataTypes.hs | 4 ++++ CMDL/Interface.hs | 22 ++++++++++++++++------ Common/ProverTools.hs | 11 +++++++---- Common/Utils.hs | 12 ++++++------ Logic/Grothendieck.hs | 2 +- Proofs/AbstractState.hs | 33 +++++++++++++++++++++++++++++---- 6 files changed, 63 insertions(+), 21 deletions(-) diff --git a/CMDL/DataTypes.hs b/CMDL/DataTypes.hs index 6b7e916a82..13d9359fae 100644 --- a/CMDL/DataTypes.hs +++ b/CMDL/DataTypes.hs @@ -44,6 +44,8 @@ import Driver.Options import Network.Socket +import Proofs.AbstractState (G_cons_checker) + import System.IO (Handle) data CmdlGoalAxiom = @@ -70,6 +72,7 @@ data CmdlState = CmdlState , output :: CmdlMessage -- ^ output of interface , hetsOpts :: HetcatsOpts -- ^ hets command options , errorCode :: Int + , consCheckers :: [G_cons_checker] } data ProveCmdType = Prove | Disprove | ConsCheck @@ -91,6 +94,7 @@ emptyCmdlState opts = CmdlState , connections = [] , hetsOpts = opts , errorCode = 0 + , consCheckers = [] } data CmdlPrompterState = CmdlPrompterState diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index a00b6e0de9..c77efac802 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -19,7 +19,8 @@ module CMDL.Interface where import System.Console.Haskeline import Interfaces.DataTypes import Comorphisms.LogicGraph (logicGraph) -import Proofs.AbstractState (getConsCheckers, sublogicOfTheory, getCcName ) +import Proofs.AbstractState (getAllConsCheckers, sublogicOfTheory, getCcName + , getListOfConsCheckers, usableCC) import Logic.Grothendieck #endif @@ -81,10 +82,13 @@ cmdlComplete st (left, _) = do case elements pS of Element z _ : _ -> do - consCheckList <- getConsCheckers $ findComorphismPaths - logicGraph $ sublogicOfTheory z - let shortConsCList = nub $ map (\ (y, _) -> getCcName y) - consCheckList + let fullConsCheckerList = map fst $ getAllConsCheckers + $ findComorphismPaths logicGraph $ sublogicOfTheory z + stateConsCheckList = consCheckers state + filteredConsCheckerList = + filter (\cc -> elem cc stateConsCheckList) fullConsCheckList + shortConsCList = nub $ map getCcName filteredConsCheckList + showCmdComplete state shortConsCList comps left [] -> showCmdComplete state [] comps left Nothing -> showCmdComplete state [] comps left @@ -172,11 +176,17 @@ shellLoop st isTerminal = liftIO $ writeIORef st newState' shellLoop st isTerminal +saveConsCheckersInState :: CmdlState -> IO CmdlState +saveConsCheckersInState state = do + consCheckerList <- filterM usableCC getListOfConsCheckers + return $ state { consCheckers = consCheckerList } + -- | The function runs hets in a shell cmdlRunShell :: CmdlState -> IO CmdlState cmdlRunShell state = do isTerminal <- hIsTerminalDevice stdin - st <- newIORef state + st' <- saveConsCheckersInState state + st <- newIORef st' #ifdef HASKELINE runInputT (shellSettings st) $ shellLoop st isTerminal #else diff --git a/Common/ProverTools.hs b/Common/ProverTools.hs index afc2aaf1f7..f5102a425f 100644 --- a/Common/ProverTools.hs +++ b/Common/ProverTools.hs @@ -39,11 +39,14 @@ check4FileAux name env = do -- | Checks if a file exists in PATH checkBinary :: String -> IO (Maybe String) -checkBinary name = fmap - (\ l -> if null l +checkBinary name = + fmap + ( \l -> + if null l then Just $ "missing binary in $PATH: " ++ name - else Nothing) - $ check4FileAux name "PATH" + else Nothing + ) + $ check4FileAux name "PATH" -- | Checks if a file exists check4File :: String -- ^ file name diff --git a/Common/Utils.hs b/Common/Utils.hs index 725d3e3a26..a937499ac1 100644 --- a/Common/Utils.hs +++ b/Common/Utils.hs @@ -191,12 +191,12 @@ is normally initially empty. The stop list update function is given a list element a and the current stop list b, and returns 'Nothing' if the element is already in the stop list, else 'Just' b', where b' is a new stop list updated to contain a. -} -nubWith :: (a -> b -> Maybe b) -> b -> [a] -> [a] -nubWith f s es = case es of - [] -> [] +nubWith :: [a] -> (a -> b -> Maybe b) -> b -> [a] -> [a] +nubWith acc f s es = case es of + [] -> reverse acc e : rs -> case f e s of - Just s' -> e : nubWith f s' rs - Nothing -> nubWith f s rs + Just s' -> nubWith (e:acc) f s' rs + Nothing -> nubWith acc f s rs nubOrd :: Ord a => [a] -> [a] nubOrd = nubOrdOn id @@ -204,7 +204,7 @@ nubOrd = nubOrdOn id nubOrdOn :: Ord b => (a -> b) -> [a] -> [a] nubOrdOn g = let f a s = let e = g a in if Set.member e s then Nothing else Just (Set.insert e s) - in nubWith f Set.empty + in nubWith [] f Set.empty -- | safe variant of !! atMaybe :: [a] -> Int -> Maybe a diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index 3d527b78fd..f489d840de 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -890,7 +890,7 @@ findComorphismPaths lg (G_sublogics lid sub) = coMors = Map.elems $ comorphisms lg -- compute possible compositions, but only up to depth 4 iterateComp n l = - if n > 2 || l == newL then newL else iterateComp (n + 1) newL + if n > 0 || l == newL then newL else iterateComp (n + 1) newL where newL = nubOrd $ l ++ concatMap extend l -- extend comorphism list in all directions, but no cylces diff --git a/Proofs/AbstractState.hs b/Proofs/AbstractState.hs index e9770ae576..aab0bffc73 100644 --- a/Proofs/AbstractState.hs +++ b/Proofs/AbstractState.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE ExistentialQuantification, DeriveDataTypeable #-} +{-# LANGUAGE ExistentialQuantification, DeriveDataTypeable, StandaloneDeriving #-} {- | Module : ./Proofs/AbstractState.hs Description : State data structure used by the goal management GUI. @@ -44,10 +44,12 @@ module Proofs.AbstractState , getAllProvers , getUsableProvers , getConsCheckers + , getListOfConsCheckers , getAllConsCheckers , lookupKnownProver , lookupKnownConsChecker , autoProofAtNode + , usableCC ) where import qualified Data.Map as Map @@ -76,6 +78,7 @@ import Logic.Comorphism import Logic.Coerce import Comorphisms.KnownProvers +import Comorphisms.LogicGraph (logicGraph) import Static.GTheory @@ -125,6 +128,9 @@ data G_cons_checker = (ConsChecker sign sentence sublogics morphism proof_tree) deriving (Typeable) +instance Eq G_cons_checker where + G_cons_checker _ cc1 == G_cons_checker _ cc2 = ccName cc1 == ccName cc2 + instance Show G_cons_checker where show _ = "G_cons_checker " @@ -365,9 +371,28 @@ getConsCheckers :: [AnyComorphism] -> IO [(G_cons_checker, AnyComorphism)] getConsCheckers = filterM (usableCC . fst) . getAllConsCheckers getAllConsCheckers :: [AnyComorphism] -> [(G_cons_checker, AnyComorphism)] -getAllConsCheckers = concatMap (\ cm@(Comorphism cid) -> - map (\ cc -> (G_cons_checker (targetLogic cid) cc, cm)) - $ cons_checkers $ targetLogic cid) +getAllConsCheckers lst = + snd $ + foldr + ( \el@(G_cons_checker _ cc, _) (s, l) -> + if not $ Set.member (ccName cc) s + then (Set.insert (ccName cc) s, el : l) + else (s, l) + ) + (Set.empty, []) + $ + concatMap + ( \cm@(Comorphism cid) -> + map + ( \cc -> + (G_cons_checker (targetLogic cid) cc, cm) + ) + $ cons_checkers $ targetLogic cid + ) + $ lst + +getListOfConsCheckers :: [G_cons_checker] +getListOfConsCheckers = concatMap (\(Logic lid) -> map (\cc -> G_cons_checker lid cc) $ cons_checkers lid) (logics logicGraph) lookupKnownConsChecker :: Fail.MonadFail m => ProofState -> m (G_cons_checker, AnyComorphism) From 3b95c46036a3b439589b04d59885100239827fd3 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 19 Jan 2023 14:56:02 +0100 Subject: [PATCH 02/69] forgotten import and typos --- CMDL/Interface.hs | 4 ++-- Proofs/AbstractState.hs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index c77efac802..05791eec1b 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -86,8 +86,8 @@ cmdlComplete st (left, _) = do $ findComorphismPaths logicGraph $ sublogicOfTheory z stateConsCheckList = consCheckers state filteredConsCheckerList = - filter (\cc -> elem cc stateConsCheckList) fullConsCheckList - shortConsCList = nub $ map getCcName filteredConsCheckList + filter (\cc -> elem cc stateConsCheckList) fullConsCheckerList + shortConsCList = nub $ map getCcName filteredConsCheckerList showCmdComplete state shortConsCList comps left [] -> showCmdComplete state [] comps left diff --git a/Proofs/AbstractState.hs b/Proofs/AbstractState.hs index aab0bffc73..961ca20491 100644 --- a/Proofs/AbstractState.hs +++ b/Proofs/AbstractState.hs @@ -53,6 +53,7 @@ module Proofs.AbstractState ) where import qualified Data.Map as Map +import qualified Data.Set as Set import Data.Maybe import Data.Typeable From 023ee89393255bd44cdb290674bec89ddb11a9b9 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 19 Jan 2023 15:51:31 +0100 Subject: [PATCH 03/69] move import out of #ifdef HASKELINE --- CMDL/Interface.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index 05791eec1b..466a81a130 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -19,11 +19,12 @@ module CMDL.Interface where import System.Console.Haskeline import Interfaces.DataTypes import Comorphisms.LogicGraph (logicGraph) -import Proofs.AbstractState (getAllConsCheckers, sublogicOfTheory, getCcName - , getListOfConsCheckers, usableCC) import Logic.Grothendieck #endif +import Proofs.AbstractState (getAllConsCheckers, sublogicOfTheory, getCcName + , getListOfConsCheckers, usableCC) + import System.IO import CMDL.Commands (getCommands) From 9cf4cdc951155ef03dd9d818a45cb471d0427807 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Sat, 4 Feb 2023 13:26:55 +0100 Subject: [PATCH 04/69] v1 of new algo, too small completion result --- CMDL/Interface.hs | 12 +- Hets.cabal | 1 + Logic/Grothendieck.hs | 286 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 297 insertions(+), 2 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index 466a81a130..7b7edea6fc 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -44,6 +44,9 @@ import Data.IORef import Control.Monad import Control.Monad.Trans (MonadIO (..)) +import Debug.Trace +import Text.Printf + #ifdef HASKELINE shellSettings :: IORef CmdlState -> Settings IO shellSettings st = @@ -83,13 +86,18 @@ cmdlComplete st (left, _) = do case elements pS of Element z _ : _ -> do - let fullConsCheckerList = map fst $ getAllConsCheckers - $ findComorphismPaths logicGraph $ sublogicOfTheory z + let paths = findComorphismPathsNewAlgo logicGraph $ sublogicOfTheory z + fullConsCheckerList = map fst $ getAllConsCheckers $ paths stateConsCheckList = consCheckers state filteredConsCheckerList = filter (\cc -> elem cc stateConsCheckList) fullConsCheckerList shortConsCList = nub $ map getCcName filteredConsCheckerList + -- traceM "-- comorphisms logicGraph:" + -- forM_ (Map.elems $ comorphisms logicGraph) (putStrLn . show) + -- traceM $ printf "-- length paths: %d" (length paths) + -- traceM "-- paths:" + -- forM_ paths (putStrLn . show) showCmdComplete state shortConsCList comps left [] -> showCmdComplete state [] comps left Nothing -> showCmdComplete state [] comps left diff --git a/Hets.cabal b/Hets.cabal index cc38cc0c1e..4ce40d5850 100644 --- a/Hets.cabal +++ b/Hets.cabal @@ -90,6 +90,7 @@ common shared-properties , xml >= 1.3.7 && < 1.4 , relation , xeno + , heap cpp-options: -DCASLEXTENSIONS -DRDFLOGIC ghc-options: -freduction-depth=31 diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index f489d840de..e35f689f1a 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -90,6 +90,7 @@ module Logic.Grothendieck , ginclusion , compInclusion , findComorphismPaths + , findComorphismPathsNewAlgo , logicGraph2Graph , findComorphism , isTransportable @@ -107,9 +108,12 @@ import Logic.ExtSign import Logic.Logic import Logic.Modification import Logic.Morphism +-- import Logic.SearchComorphismCompositions import ATerm.Lib +import Debug.Trace + import Common.Doc import Common.DocUtils import Common.ExtSign @@ -129,6 +133,11 @@ import Data.Maybe import Data.Typeable import qualified Data.Map as Map import qualified Data.Set as Set +import qualified Data.HashMap.Strict as HMap +import qualified Data.HashSet as HSet +import qualified Data.Heap as Heap + +import Text.Printf import Text.ParserCombinators.Parsec (Parser, parse, eof, (<|>)) -- for looking up modifications @@ -901,6 +910,11 @@ findComorphismPaths lg (G_sublogics lid sub) = Just c1 -> Just (c1, c : cmps) in mapMaybe addCoMor $ filter (not . (`elem` cmps)) coMors +-- | Find compositions of comorphisms starting from a give logic +-- | use wheted graph of logics to optimize search +findComorphismPathsNewAlgo :: LogicGraph -> G_sublogics -> [AnyComorphism] +findComorphismPathsNewAlgo lg gsubl = findComorphismCompositions lg gsubl + -- | graph representation of the logic graph logicGraph2Graph :: LogicGraph -> Graph (G_sublogics, Maybe AnyComorphism) AnyComorphism @@ -1009,3 +1023,275 @@ lookupSquare com1 com2 lg = maybe (Fail.fail "lookupSquare") return $ do sqL2 <- Map.lookup (com2, com1) $ squares lg return $ nubOrd $ sqL1 ++ map mirrorSquare sqL2 -- maybe adjusted if comparing AnyModifications change + +-- | algo for searching possible comorphism compositions +weight_limit :: Int +weight_limit = 500 + +data SearchNode = SearchNode + { nodeId :: Int, + parentId :: Int, + logicName :: String, + -- way to check logic already used in comorphism composition + logicsInBranch :: HSet.HashSet String, + -- comorphisms composition for current node + cComposition :: Maybe AnyComorphism, + searchNodeWeight :: Int + } + deriving (Show) + +data SearchState = SearchState + { + searchNodes :: HMap.HashMap Int SearchNode, + -- ids of nodes who are currently leaves in search tree + leaves :: HSet.HashSet Int, + -- priority queue of nodes according their distances: higher distance - higher priority + pQueue :: Heap.MaxPrioHeap Int Int, + -- we don't repeat already used comorphism in search tree + usedComorphisms :: HSet.HashSet (String, String), + totalWeightUsed :: Int + } + +initState :: G_sublogics -> SearchState +initState (G_sublogics lid sub) = + SearchState + { leaves = HSet.empty, + searchNodes = + HMap.fromList + [ ( 0, + SearchNode + 0 + (-1) + (language_name lid) + HSet.empty + (Just (Comorphism $ mkIdComorphism lid sub)) + 0 + ) + ], + pQueue = Heap.fromList [(0, 0)], + usedComorphisms = HSet.empty, + totalWeightUsed = 0 + } + +findComorphismCompositions :: LogicGraph -> G_sublogics -> [AnyComorphism] +findComorphismCompositions lg gsubl = + processSearchState lg (initState gsubl) + +processSearchState :: LogicGraph -> SearchState -> [AnyComorphism] +processSearchState lg state@(SearchState ns ls pq uc twu) = case Heap.view pq of + -- Nothing -> trace "-- finish because priority queue is empty" $ getComorphismCompositions ns ls + Nothing -> getComorphismCompositions ns ls + Just ((w, nId), pq') -> + if isComorphismUsed nId ns uc + then -- then trace (printf "-- comorphism used, nId=%d" nId) $ processSearchState lg (state {pQueue = pq'}) + processSearchState lg (state {pQueue = pq'}) + else + let curNode = updateNode lg nId ns + ns' = HMap.insert nId curNode ns + -- remove parent node from leaves and put there current node + ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls + uc' = addIntoUsedComorphisms nId ns uc + -- condition to continue or stop search at this point + twu' = twu + w + in if twu' > weight_limit + then -- then trace "-- finish because of weight limit" $ getComorphismCompositions ns ls + getComorphismCompositions ns ls + else -- trace (printf "-- put node in tree, id=%d, parent=%d, name=%s" nId (parentId curNode) (logicName curNode)) $ + processSearchState lg $ + processNeighbours + nId + ( state + { leaves = ls', + searchNodes = ns', + pQueue = pq', + usedComorphisms = uc', + totalWeightUsed = twu' + } + ) + +getComorphismCompositions :: + HMap.HashMap Int SearchNode -> -- nodes of search graph + HSet.HashSet Int -> -- leaves in this graph + [AnyComorphism] +getComorphismCompositions sNodes lvs = + -- trace (printf "-- getComorphismCompositions\n\tsNodes.keys: %s\n\tlvs: %s" (show $ HMap.keys sNodes) (show $ HSet.toList lvs)) $ + let res = + map + ( \i -> + fromJust $ + cComposition $ + fromMaybe + ( error $ + printf "getComorphismComositions, incorrect i=%d key for HashMap" i + ) + $ HMap.lookup i sNodes + ) + $ HSet.toList $ lvs + in res + +isComorphismUsed :: + Int -> -- node id + HMap.HashMap Int SearchNode -> -- nodes + HSet.HashSet (String, String) -> -- set of used comorphisms + Bool +isComorphismUsed nId sNodes ucs = + let curNode = + fromMaybe (error $ printf "isComorphismUsed, incorrect nId=%d key for HashMap" nId) $ + HMap.lookup nId sNodes + pId = parentId curNode + pNode = + fromMaybe (error $ printf "isComorphismUsed, incorrect pId=%d key for HashMap" pId) $ + HMap.lookup pId sNodes + lName = logicName curNode + pName = logicName pNode + in if pId == (-1) + then False + else HSet.member (pName, lName) ucs + +addIntoUsedComorphisms :: + Int -> -- node id + HMap.HashMap Int SearchNode -> -- nodes + HSet.HashSet (String, String) -> -- set of used comorphisms + HSet.HashSet (String, String) -- new set of used comorphisms +addIntoUsedComorphisms nId sNodes ucs = + let curNode = + fromMaybe (error $ printf "addIntoUsedComorphisms, incorrect nId=%d key for HashMap" nId) $ + HMap.lookup nId sNodes + pId = parentId curNode + lName = logicName curNode + pNode = + fromMaybe (error $ printf "addIntoUsedComorphisms, incorrect pId=%d key for HashMap" pId) $ + HMap.lookup pId sNodes + pName = logicName pNode + in if pId == (-1) + then ucs + else HSet.insert (pName, lName) ucs + +-- update fields logicsInBranch and cComposition +updateNode :: LogicGraph -> Int -> HMap.HashMap Int SearchNode -> SearchNode +updateNode lg nId sNodes = + let node = + fromMaybe (error $ printf "updateNode, incorrect nId=%d key for HashMap" nId) $ + HMap.lookup nId sNodes + in if parentId node == (-1) + then node + else + let parentNode = + fromMaybe (error $ printf "updateNode, incorrect (parentId node)=$d key for HashMap" (parentId node)) $ + HMap.lookup (parentId node) sNodes + usedLogics = logicsInBranch parentNode + cc = + compComorphism (fromJust $ cComposition parentNode) $ + getComorphism lg (logicName parentNode) (logicName node) + in node + { logicsInBranch = HSet.insert (logicName parentNode) usedLogics, + cComposition = cc + } + +getComorphism :: LogicGraph -> String -> String -> AnyComorphism +getComorphism lg l1Name l2Name = + let comorphismName = l1Name ++ "2" ++ l2Name + comorphism = fromMaybe (error (printf "getComorphism, incorrect comorphismName=%s key for HashMap" comorphismName)) $ Map.lookup comorphismName (comorphisms lg) + in comorphism + +processNeighbours :: Int -> SearchState -> SearchState +processNeighbours nId state@(SearchState ns _ pq _ _) = + -- trace (printf "-- processNeighbours, nId=%d" nId) $ + let nNodes = HMap.size ns + curNode = + fromMaybe (error $ printf "processNeighbours, incorrect nId=%d key for HashMap" nId) $ + HMap.lookup nId ns + lName = logicName curNode + -- select children nodes + children = + filter (\(name, _) -> not . or $ [name == lName, HSet.member name $ logicsInBranch curNode]) $ + fromMaybe [] $ HMap.lookup lName weightedGraphOfLogics + -- create SearchNodes of children + childrenNodes = map (\((name, w), i) -> SearchNode i nId name HSet.empty Nothing w) $ zip children [nNodes .. nNodes + (length children) - 1] + -- update map of nodes by adding newly created nodes + ns' = foldl (\_ns sn -> HMap.insert (nodeId sn) sn _ns) ns childrenNodes + -- update priority queue + pq' = foldl (\_pq sn -> Heap.insert (searchNodeWeight sn, nodeId sn) _pq) pq childrenNodes + in state {searchNodes = ns', pQueue = pq'} + +-- | hardcoded graph with weights +weightedGraphOfLogics :: HMap.HashMap String [(String, Int)] +weightedGraphOfLogics = + HMap.fromList + [ ( "CASL", + [ ("CoCASL", 5), + ("CspCASL", 5), + ("ExtModal", 5), + ("HasCASL", 5), + ("Hybrid", 5), + ("Modal", 5), + ("VSE", 5), + ("VSEImport", 5), + ("VSERefine", 5), + ("Propositional", 4), + ("OWL", 4), + ("Isabelle", 2), + ("NNF", 1), + ("PCFOL", 1), + ("PCFOLTopSort", 1), + ("Prenex", 1), + ("Skolem", 1), + ("SoftFOL", 1), + ("SoftFOLInduction", 1), + ("SoftFOLInduction2", 1), + ("SubCFOL", 1), + ("SubCFOLNoMembershipOrCast", 1), + ("SubCFOLSubsortBottoms", 1), + ("TPTP_FOF", 1) + ] + ), + ( "HasCASL", + [ ("IsabelleDeprecated", 5), + ("IsabelleOption", 2), + ("HasCASLNoSubtypes", 1), + ("HasCASLPrograms", 1), + ("THFP_P", 1) + ] + ), + ( "OWL2", + [("NeSyPatterns", 5), ("CommonLogic", 4), ("CASL", 2)] + ), + ("CASL_DL", [("CASL", 4)]), + ( "Propositional", + [ ("CommonLogic", 4), + ("OWL2", 4), + ("QBF", 4), + ("CASL", 2) + ] + ), + ("CoCASL", [("Isabelle", 2), ("CoPCFOL", 1), ("CoSubCFOL", 1)]), + ("SoftFOL", [("CommonLogic", 4)]), + ("THFP_P", [("HasCASL", 3), ("THFP", 3)]), + ("CspCASL", [("Modal", 3), ("CspCASL_Failure", 2), ("CspCASL_Trace", 2)]), + ("CommonLogic", [("Isabelle", 2) -- ("ModuleElimination", 2) -- + ]), + ("THFP", [("THF0", 2)]), + ("Adl", [("CASL", 1)]), + ("CLFol", [("CFOL", 1)]), + ("CLFull", [("CFOL", 1)]), + ("CLImp", [("CFOL", 1)]), + ("CLSeq", [("CLSeq", 1)]), + ("CSMOF", [("CSMOF", 1)]), + ("DFOL", [("CASL", 1)]), + ("DMU", [("DMU", 1)]), + ( "ExtModal", + [ ("CASL", 1), + ("ExtModalNoSubsorts", 1), + ("ExtModalTotal", 1), + ("HasCASL", 1), + ("OWL", 1) + ] + ), + ("HolLight", [("Isabelle", 1)]), + ("Hybrid", [("CASL", 1)]), + ("Maude", [("CASL", 1)]), + ("Modal", [("CASL", 1)]), + ("QBF", [("Propositional", 1)]), + ("QVTR", [("QVTR", 1)]), + ("RelScheme", [("CASL", 1)]) + ] \ No newline at end of file From 2bb89ccf6c660e9f0108e0753a220b555713e477 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Mon, 6 Feb 2023 15:12:45 +0100 Subject: [PATCH 05/69] revised algo --- CMDL/Interface.hs | 2 +- Logic/Grothendieck.hs | 503 +++++++++++++++++++++++------------------- 2 files changed, 276 insertions(+), 229 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index 7b7edea6fc..d3fd8d3ce9 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -86,7 +86,7 @@ cmdlComplete st (left, _) = do case elements pS of Element z _ : _ -> do - let paths = findComorphismPathsNewAlgo logicGraph $ sublogicOfTheory z + let paths = findComorphismPaths logicGraph $ sublogicOfTheory z fullConsCheckerList = map fst $ getAllConsCheckers $ paths stateConsCheckList = consCheckers state filteredConsCheckerList = diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index e35f689f1a..616c9d3df2 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -90,7 +90,6 @@ module Logic.Grothendieck , ginclusion , compInclusion , findComorphismPaths - , findComorphismPathsNewAlgo , logicGraph2Graph , findComorphism , isTransportable @@ -891,29 +890,29 @@ compInclusion :: LogicGraph -> GMorphism -> GMorphism -> Result GMorphism compInclusion = genCompInclusion . inclusionAux False -- | Find all (composites of) comorphisms starting from a given logic -findComorphismPaths :: LogicGraph -> G_sublogics -> [AnyComorphism] -findComorphismPaths lg (G_sublogics lid sub) = - nubOrd $ map fst $ iterateComp (0 :: Int) [(idc, [idc])] - where - idc = Comorphism (mkIdComorphism lid sub) - coMors = Map.elems $ comorphisms lg - -- compute possible compositions, but only up to depth 4 - iterateComp n l = - if n > 0 || l == newL then newL else iterateComp (n + 1) newL - where - newL = nubOrd $ l ++ concatMap extend l - -- extend comorphism list in all directions, but no cylces - extend (coMor, cmps) = - let addCoMor c = - case compComorphism coMor c of - Nothing -> Nothing - Just c1 -> Just (c1, c : cmps) - in mapMaybe addCoMor $ filter (not . (`elem` cmps)) coMors +-- findComorphismPaths :: LogicGraph -> G_sublogics -> [AnyComorphism] +-- findComorphismPaths lg (G_sublogics lid sub) = +-- nubOrd $ map fst $ iterateComp (0 :: Int) [(idc, [idc])] +-- where +-- idc = Comorphism (mkIdComorphism lid sub) +-- coMors = Map.elems $ comorphisms lg +-- -- compute possible compositions, but only up to depth 4 +-- iterateComp n l = +-- if n > 0 || l == newL then newL else iterateComp (n + 1) newL +-- where +-- newL = nubOrd $ l ++ concatMap extend l +-- -- extend comorphism list in all directions, but no cylces +-- extend (coMor, cmps) = +-- let addCoMor c = +-- case compComorphism coMor c of +-- Nothing -> Nothing +-- Just c1 -> Just (c1, c : cmps) +-- in mapMaybe addCoMor $ filter (not . (`elem` cmps)) coMors -- | Find compositions of comorphisms starting from a give logic -- | use wheted graph of logics to optimize search -findComorphismPathsNewAlgo :: LogicGraph -> G_sublogics -> [AnyComorphism] -findComorphismPathsNewAlgo lg gsubl = findComorphismCompositions lg gsubl +findComorphismPaths :: LogicGraph -> G_sublogics -> [AnyComorphism] +findComorphismPaths lg gsubl = nubOrd $ findComorphismCompositions lg gsubl -- | graph representation of the logic graph logicGraph2Graph :: LogicGraph @@ -1024,18 +1023,26 @@ lookupSquare com1 com2 lg = maybe (Fail.fail "lookupSquare") return $ do return $ nubOrd $ sqL1 ++ map mirrorSquare sqL2 -- maybe adjusted if comparing AnyModifications change --- | algo for searching possible comorphism compositions +-- | algo for searching comorphism paths weight_limit :: Int -weight_limit = 500 +weight_limit = 3000 + +times_logic_in_branch :: Int +times_logic_in_branch = 3 data SearchNode = SearchNode { nodeId :: Int, parentId :: Int, logicName :: String, - -- way to check logic already used in comorphism composition - logicsInBranch :: HSet.HashSet String, - -- comorphisms composition for current node - cComposition :: Maybe AnyComorphism, + -- to check wether comorphism already used in branch + usedComorphisms :: HSet.HashSet String, + -- number of time particular logic is used in branch + timesLogicUsed :: HMap.HashMap String Int, + -- all comorphism composition in current branch, latest one in the head of the list + cCompositions :: [AnyComorphism], + -- name of comorphism though wich we get this node from parent + comName :: String, + -- weight of node in priority queue according to corresponding comorphism searchNodeWeight :: Int } deriving (Show) @@ -1047,13 +1054,13 @@ data SearchState = SearchState leaves :: HSet.HashSet Int, -- priority queue of nodes according their distances: higher distance - higher priority pQueue :: Heap.MaxPrioHeap Int Int, - -- we don't repeat already used comorphism in search tree - usedComorphisms :: HSet.HashSet (String, String), + -- map logic map to comorphis with it as source logic + logicToComorphisms :: HMap.HashMap String [String], totalWeightUsed :: Int } -initState :: G_sublogics -> SearchState -initState (G_sublogics lid sub) = +initState :: LogicGraph -> G_sublogics -> SearchState +initState lg (G_sublogics lid sub) = SearchState { leaves = HSet.empty, searchNodes = @@ -1064,50 +1071,68 @@ initState (G_sublogics lid sub) = (-1) (language_name lid) HSet.empty - (Just (Comorphism $ mkIdComorphism lid sub)) + HMap.empty + [Comorphism $ mkIdComorphism lid sub] + [] 0 ) ], pQueue = Heap.fromList [(0, 0)], - usedComorphisms = HSet.empty, + logicToComorphisms = mapLogicsToComorphisms lg, totalWeightUsed = 0 } findComorphismCompositions :: LogicGraph -> G_sublogics -> [AnyComorphism] findComorphismCompositions lg gsubl = - processSearchState lg (initState gsubl) + processSearchState lg (initState lg gsubl) processSearchState :: LogicGraph -> SearchState -> [AnyComorphism] -processSearchState lg state@(SearchState ns ls pq uc twu) = case Heap.view pq of - -- Nothing -> trace "-- finish because priority queue is empty" $ getComorphismCompositions ns ls - Nothing -> getComorphismCompositions ns ls +processSearchState lg state@(SearchState ns ls pq _ twu) = case Heap.view pq of + Nothing -> trace "-- processSearchState, finish because priority queue is empty" $ getComorphismCompositions ns ls + -- Nothing -> getComorphismCompositions ns ls Just ((w, nId), pq') -> - if isComorphismUsed nId ns uc - then -- then trace (printf "-- comorphism used, nId=%d" nId) $ processSearchState lg (state {pQueue = pq'}) - processSearchState lg (state {pQueue = pq'}) - else - let curNode = updateNode lg nId ns - ns' = HMap.insert nId curNode ns - -- remove parent node from leaves and put there current node - ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls - uc' = addIntoUsedComorphisms nId ns uc - -- condition to continue or stop search at this point - twu' = twu + w - in if twu' > weight_limit - then -- then trace "-- finish because of weight limit" $ getComorphismCompositions ns ls - getComorphismCompositions ns ls - else -- trace (printf "-- put node in tree, id=%d, parent=%d, name=%s" nId (parentId curNode) (logicName curNode)) $ - processSearchState lg $ - processNeighbours - nId - ( state - { leaves = ls', - searchNodes = ns', - pQueue = pq', - usedComorphisms = uc', - totalWeightUsed = twu' - } - ) + -- trace (printf "-- processSearchState, add node with id=%d, weight=%d, parentId=%d, comorphism=%s" nId w (parentId $ ns HMap.! nId) (comName $ ns HMap.! nId)) $ + let curNode = + fromMaybe + ( error $ + printf "processSearchState, incorrect nId=%d" nId + ) + $ HMap.lookup nId ns + tlu = HMap.lookupDefault 0 (logicName curNode) (timesLogicUsed curNode) + in if tlu > times_logic_in_branch + then processSearchState lg $ state {pQueue = pq'} + else + let ns' = updateNode curNode ns + -- remove parent node from leaves and put there current node + ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls + -- condition to continue or stop search at this point + twu' = twu + w + in if twu' > weight_limit + then trace "-- processSearchState, finish because of weight limit" $ getComorphismCompositions ns ls + else -- getComorphismCompositions ns ls + -- trace (printf "-- put node in tree, id=%d, parent=%d, name=%s" nId (parentId curNode) (logicName curNode)) $ + + processSearchState lg $ + processNeighbours + lg + nId + ( state + { searchNodes = ns', + leaves = ls', + pQueue = pq', + totalWeightUsed = twu' + } + ) + + +-- | some updates on node when it is added to search tree from priority queue +-- | currently, change field timesLogicUsed +updateNode :: SearchNode -> HMap.HashMap Int SearchNode -> HMap.HashMap Int SearchNode +updateNode sn ns = + let nId = nodeId sn + tlu = HMap.lookupDefault 0 (logicName sn) (timesLogicUsed sn) + sn' = sn { timesLogicUsed = HMap.insert (logicName sn) (tlu + 1) (timesLogicUsed sn) } + in HMap.insert nId sn' ns getComorphismCompositions :: HMap.HashMap Int SearchNode -> -- nodes of search graph @@ -1116,182 +1141,204 @@ getComorphismCompositions :: getComorphismCompositions sNodes lvs = -- trace (printf "-- getComorphismCompositions\n\tsNodes.keys: %s\n\tlvs: %s" (show $ HMap.keys sNodes) (show $ HSet.toList lvs)) $ let res = - map - ( \i -> - fromJust $ - cComposition $ - fromMaybe - ( error $ - printf "getComorphismComositions, incorrect i=%d key for HashMap" i - ) - $ HMap.lookup i sNodes - ) - $ HSet.toList $ lvs + concat $ + map + ( \i -> + let leaf = HMap.lookup i sNodes + in --trace (printf "-- leaf: %s" (show leaf)) $ + reverse $ + cCompositions $ + fromMaybe + ( error $ + printf "getComorphismComositions, incorrect i=%d key for HashMap" i + ) + $ leaf + ) + $ HSet.toList $ lvs in res -isComorphismUsed :: - Int -> -- node id - HMap.HashMap Int SearchNode -> -- nodes - HSet.HashSet (String, String) -> -- set of used comorphisms - Bool -isComorphismUsed nId sNodes ucs = - let curNode = - fromMaybe (error $ printf "isComorphismUsed, incorrect nId=%d key for HashMap" nId) $ - HMap.lookup nId sNodes - pId = parentId curNode - pNode = - fromMaybe (error $ printf "isComorphismUsed, incorrect pId=%d key for HashMap" pId) $ - HMap.lookup pId sNodes - lName = logicName curNode - pName = logicName pNode - in if pId == (-1) - then False - else HSet.member (pName, lName) ucs - -addIntoUsedComorphisms :: - Int -> -- node id - HMap.HashMap Int SearchNode -> -- nodes - HSet.HashSet (String, String) -> -- set of used comorphisms - HSet.HashSet (String, String) -- new set of used comorphisms -addIntoUsedComorphisms nId sNodes ucs = - let curNode = - fromMaybe (error $ printf "addIntoUsedComorphisms, incorrect nId=%d key for HashMap" nId) $ - HMap.lookup nId sNodes - pId = parentId curNode - lName = logicName curNode - pNode = - fromMaybe (error $ printf "addIntoUsedComorphisms, incorrect pId=%d key for HashMap" pId) $ - HMap.lookup pId sNodes - pName = logicName pNode - in if pId == (-1) - then ucs - else HSet.insert (pName, lName) ucs - --- update fields logicsInBranch and cComposition -updateNode :: LogicGraph -> Int -> HMap.HashMap Int SearchNode -> SearchNode -updateNode lg nId sNodes = - let node = - fromMaybe (error $ printf "updateNode, incorrect nId=%d key for HashMap" nId) $ - HMap.lookup nId sNodes - in if parentId node == (-1) - then node - else - let parentNode = - fromMaybe (error $ printf "updateNode, incorrect (parentId node)=$d key for HashMap" (parentId node)) $ - HMap.lookup (parentId node) sNodes - usedLogics = logicsInBranch parentNode - cc = - compComorphism (fromJust $ cComposition parentNode) $ - getComorphism lg (logicName parentNode) (logicName node) - in node - { logicsInBranch = HSet.insert (logicName parentNode) usedLogics, - cComposition = cc - } - -getComorphism :: LogicGraph -> String -> String -> AnyComorphism -getComorphism lg l1Name l2Name = - let comorphismName = l1Name ++ "2" ++ l2Name - comorphism = fromMaybe (error (printf "getComorphism, incorrect comorphismName=%s key for HashMap" comorphismName)) $ Map.lookup comorphismName (comorphisms lg) - in comorphism - -processNeighbours :: Int -> SearchState -> SearchState -processNeighbours nId state@(SearchState ns _ pq _ _) = +getComorphism :: LogicGraph -> String -> AnyComorphism +getComorphism lg cn = + fromMaybe (error (printf "getComorphism, incorrect comorphismName=%s key for HashMap" cn)) $ + Map.lookup cn (comorphisms lg) + +getTargetLogicName :: AnyComorphism -> String +getTargetLogicName (Comorphism cid) = language_name $ targetLogic cid + +-- | given node in tree generate candidate nodes and put them in priority queue +processNeighbours :: LogicGraph -> Int -> SearchState -> SearchState +processNeighbours lg nId state@(SearchState ns _ pq ltcs _) = -- trace (printf "-- processNeighbours, nId=%d" nId) $ let nNodes = HMap.size ns curNode = fromMaybe (error $ printf "processNeighbours, incorrect nId=%d key for HashMap" nId) $ HMap.lookup nId ns lName = logicName curNode - -- select children nodes - children = - filter (\(name, _) -> not . or $ [name == lName, HSet.member name $ logicsInBranch curNode]) $ - fromMaybe [] $ HMap.lookup lName weightedGraphOfLogics - -- create SearchNodes of children - childrenNodes = map (\((name, w), i) -> SearchNode i nId name HSet.empty Nothing w) $ zip children [nNodes .. nNodes + (length children) - 1] - -- update map of nodes by adding newly created nodes + comCandidates = HMap.lookupDefault [] lName ltcs + comCandidates' = filter (\name -> not $ HSet.member name (usedComorphisms curNode)) comCandidates + childrenNodes = + -- trace (printf "-- processNeighbours, add nodes with id range [%d, %d]" nNodes (nNodes + (length comCandidates') - 1)) $ + catMaybes $ + map + ( \(name, i) -> + let c = getComorphism lg name + targetLogicName = getTargetLogicName c + tlu = HMap.lookupDefault 0 (targetLogicName) (timesLogicUsed curNode) + newComposition = + compComorphism (head $ cCompositions curNode) c + in if (isJust newComposition && tlu <= times_logic_in_branch) + then + Just $ + SearchNode + { nodeId = i, + parentId = nId, + logicName = targetLogicName, + usedComorphisms = HSet.insert name (usedComorphisms curNode), + timesLogicUsed = HMap.empty, + cCompositions = (fromJust newComposition) : (cCompositions curNode), + comName = name, + searchNodeWeight = HMap.lookupDefault 1 name comorphismWeight + } + else Nothing + ) + -- second list is new ids for SearchNodes + $ zip comCandidates' [nNodes .. nNodes + (length comCandidates') - 1] + + -- update map of nodes ns' = foldl (\_ns sn -> HMap.insert (nodeId sn) sn _ns) ns childrenNodes -- update priority queue pq' = foldl (\_pq sn -> Heap.insert (searchNodeWeight sn, nodeId sn) _pq) pq childrenNodes in state {searchNodes = ns', pQueue = pq'} --- | hardcoded graph with weights -weightedGraphOfLogics :: HMap.HashMap String [(String, Int)] -weightedGraphOfLogics = +mapLogicsToComorphisms :: LogicGraph -> HMap.HashMap String [String] +mapLogicsToComorphisms lg = + foldr + ( \(cName, Comorphism cId) acc -> + let sourceLogicName = language_name $ sourceLogic cId + l = HMap.lookupDefault [] sourceLogicName acc + in HMap.insert sourceLogicName (cName : l) acc + ) + HMap.empty + $ Map.toList $ comorphisms lg + +-- | simple BFS algo +max_tree_depth :: Int +max_tree_depth = 1 + +simpleBFS :: LogicGraph -> G_sublogics -> [AnyComorphism] +simpleBFS lg (G_sublogics lid sub) = + let + lName = language_name lid + idc = Comorphism $ mkIdComorphism lid sub + in simpleBFS' lg (mapLogicsToComorphisms lg) 0 [(lName, HSet.empty, [idc])] + +simpleBFS' :: + LogicGraph -> + HMap.HashMap String [String] -> + Int -> + [(String, HSet.HashSet String, [AnyComorphism])] -> -- state of tree level or list of nodes + [AnyComorphism] +simpleBFS' lg l2cs lvlN lvlState = + if lvlN >= max_tree_depth + then nubOrd $ concat $ map (\(_, _, coms) -> coms) lvlState + else + let newLvl = + map + ( \(lName, ucs, cComps) -> + let cs = + filter (\cName -> not $ HSet.member cName ucs) $ + HMap.lookupDefault [] lName l2cs + + lvlElem = + map + ( \cName -> + let c = getComorphism lg cName + tlName = getTargetLogicName c + mComposition = compComorphism (head cComps) c + ucs' = HSet.insert cName ucs + in if (isJust mComposition) + then [(tlName, ucs', (fromJust mComposition) : cComps)] + else [] + ) + cs + in concat lvlElem + ) + lvlState + in simpleBFS' lg l2cs (lvlN + 1) $ concat newLvl + +-- | assign weights to comorphisms +comorphismWeight :: HMap.HashMap String Int +comorphismWeight = HMap.fromList - [ ( "CASL", - [ ("CoCASL", 5), - ("CspCASL", 5), - ("ExtModal", 5), - ("HasCASL", 5), - ("Hybrid", 5), - ("Modal", 5), - ("VSE", 5), - ("VSEImport", 5), - ("VSERefine", 5), - ("Propositional", 4), - ("OWL", 4), - ("Isabelle", 2), - ("NNF", 1), - ("PCFOL", 1), - ("PCFOLTopSort", 1), - ("Prenex", 1), - ("Skolem", 1), - ("SoftFOL", 1), - ("SoftFOLInduction", 1), - ("SoftFOLInduction2", 1), - ("SubCFOL", 1), - ("SubCFOLNoMembershipOrCast", 1), - ("SubCFOLSubsortBottoms", 1), - ("TPTP_FOF", 1) - ] - ), - ( "HasCASL", - [ ("IsabelleDeprecated", 5), - ("IsabelleOption", 2), - ("HasCASLNoSubtypes", 1), - ("HasCASLPrograms", 1), - ("THFP_P", 1) - ] - ), - ( "OWL2", - [("NeSyPatterns", 5), ("CommonLogic", 4), ("CASL", 2)] - ), - ("CASL_DL", [("CASL", 4)]), - ( "Propositional", - [ ("CommonLogic", 4), - ("OWL2", 4), - ("QBF", 4), - ("CASL", 2) - ] - ), - ("CoCASL", [("Isabelle", 2), ("CoPCFOL", 1), ("CoSubCFOL", 1)]), - ("SoftFOL", [("CommonLogic", 4)]), - ("THFP_P", [("HasCASL", 3), ("THFP", 3)]), - ("CspCASL", [("Modal", 3), ("CspCASL_Failure", 2), ("CspCASL_Trace", 2)]), - ("CommonLogic", [("Isabelle", 2) -- ("ModuleElimination", 2) -- - ]), - ("THFP", [("THF0", 2)]), - ("Adl", [("CASL", 1)]), - ("CLFol", [("CFOL", 1)]), - ("CLFull", [("CFOL", 1)]), - ("CLImp", [("CFOL", 1)]), - ("CLSeq", [("CLSeq", 1)]), - ("CSMOF", [("CSMOF", 1)]), - ("DFOL", [("CASL", 1)]), - ("DMU", [("DMU", 1)]), - ( "ExtModal", - [ ("CASL", 1), - ("ExtModalNoSubsorts", 1), - ("ExtModalTotal", 1), - ("HasCASL", 1), - ("OWL", 1) - ] - ), - ("HolLight", [("Isabelle", 1)]), - ("Hybrid", [("CASL", 1)]), - ("Maude", [("CASL", 1)]), - ("Modal", [("CASL", 1)]), - ("QBF", [("Propositional", 1)]), - ("QVTR", [("QVTR", 1)]), - ("RelScheme", [("CASL", 1)]) - ] \ No newline at end of file + [ ("CASL2CoCASL", 6), + ("CASL2CspCASL", 6), + ("CASL2ExtModal", 6), + ("CASL2HasCASL", 6), + ("CASL2Hybrid", 6), + ("CASL2Modal", 6), + ("CASL2VSE", 6), + ("CASL2VSEImport", 6), + ("CASL2VSERefine", 6), + ("HasCASL2IsabelleDeprecated", 6), + ("OWL22NeSyPatterns", 6), + ("CASL_DL2CASL", 5), + ("CASL2Propositional", 5), + ("CASL2OWL", 5), + ("OWL22CommonLogic", 5), + ("Propositional2CommonLogic", 5), + ("Propositional2OWL2", 5), + ("Propositional2QBF", 5), + ("SoftFOL2CommonLogic", 5), + ("THFP_P2HasCASL", 4), + ("CspCASL2Modal", 4), + ("OWL22CASL", 3), + ("Propositional2CASL", 3), + ("CoCASL2Isabelle", 3), + ("CommonLogic2Isabelle", 3), + ("CASL2Isabelle", 3), + ("CommonLogicModuleElimination", 3), + ("CspCASL2CspCASL_Failure", 3), + ("CspCASL2CspCASL_Trace", 3), + ("HasCASL2IsabelleOption", 3), + ("THFP2THF0", 3), + ("THFP_P2THFP", 3), + ("Adl2CASL", 2), + ("CASL2NNF", 2), + ("CASL2PCFOL", 2), + ("CASL2PCFOLTopSort", 3), + ("CASL2Prenex", 2), + ("CASL2Skolem", 2), + ("CASL2SoftFOL", 2), + ("CASL2SoftFOLInduction", 2), + ("CASL2SoftFOLInduction2", 2), + ("CASL2SubCFOL", 2), + ("CASL2SubCFOLNoMembershipOrCast", 2), + ("CASL2SubCFOLSubsortBottoms", 2), + ("CASL2TPTP_FOF", 2), + ("CLFol2CFOL", 2), + ("CLFull2CFOL", 2), + ("CLImp2CFOL", 2), + ("CLSeq2CFOL", 2), + ("CoCASL2CoPCFOL", 2), + ("CoCASL2CoSubCFOL", 2), + ("CSMOF2CASL", 2), + ("DFOL2CASL", 2), + ("DMU2OWL2", 2), + ("ExtModal2CASL", 2), + ("ExtModal2ExtModalNoSubsorts", 2), + ("ExtModal2ExtModalTotal", 2), + ("ExtModal2HasCASL", 2), + ("ExtModal2OWL", 2), + ("ExtModal2OWL", 2), + ("HasCASL2HasCASLPrograms", 2), + ("HasCASL2THFP_P", 2), + ("HolLight2Isabelle", 2), + ("Hybrid2CASL", 2), + ("Maude2CASL", 2), + ("Modal2CASL", 2), + ("MonadicTranslation", 2), + ("NormalisingTranslation", 2), + ("QBF2Propositional", 2), + ("QVTR2CASL", 2), + ("RelScheme2CASL", 2) + ] From 720be12c796776662f144ff96605e3c4afc1d69c Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Tue, 7 Feb 2023 15:16:30 +0100 Subject: [PATCH 06/69] final working version --- CMDL/Interface.hs | 2 +- Logic/Grothendieck.hs | 179 ++++++++++++++++++++++-------------------- 2 files changed, 96 insertions(+), 85 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index d3fd8d3ce9..1eabc35764 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -97,7 +97,7 @@ cmdlComplete st (left, _) = do -- forM_ (Map.elems $ comorphisms logicGraph) (putStrLn . show) -- traceM $ printf "-- length paths: %d" (length paths) -- traceM "-- paths:" - -- forM_ paths (putStrLn . show) + -- forM_ paths print showCmdComplete state shortConsCList comps left [] -> showCmdComplete state [] comps left Nothing -> showCmdComplete state [] comps left diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index 616c9d3df2..2cf661af14 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -1025,10 +1025,10 @@ lookupSquare com1 com2 lg = maybe (Fail.fail "lookupSquare") return $ do -- | algo for searching comorphism paths weight_limit :: Int -weight_limit = 3000 +weight_limit = 500 times_logic_in_branch :: Int -times_logic_in_branch = 3 +times_logic_in_branch = 10 data SearchNode = SearchNode { nodeId :: Int, @@ -1042,8 +1042,8 @@ data SearchNode = SearchNode cCompositions :: [AnyComorphism], -- name of comorphism though wich we get this node from parent comName :: String, - -- weight of node in priority queue according to corresponding comorphism - searchNodeWeight :: Int + -- weight of comorphism leading to that node + comWeight :: Int } deriving (Show) @@ -1052,8 +1052,10 @@ data SearchState = SearchState searchNodes :: HMap.HashMap Int SearchNode, -- ids of nodes who are currently leaves in search tree leaves :: HSet.HashSet Int, + -- distances of nodes in priority queues to root node + distance :: HMap.HashMap Int Int, -- priority queue of nodes according their distances: higher distance - higher priority - pQueue :: Heap.MaxPrioHeap Int Int, + pQueue :: Heap.MinPrioHeap Int Int, -- map logic map to comorphis with it as source logic logicToComorphisms :: HMap.HashMap String [String], totalWeightUsed :: Int @@ -1077,6 +1079,7 @@ initState lg (G_sublogics lid sub) = 0 ) ], + distance = HMap.fromList [(0, 0)], pQueue = Heap.fromList [(0, 0)], logicToComorphisms = mapLogicsToComorphisms lg, totalWeightUsed = 0 @@ -1087,10 +1090,10 @@ findComorphismCompositions lg gsubl = processSearchState lg (initState lg gsubl) processSearchState :: LogicGraph -> SearchState -> [AnyComorphism] -processSearchState lg state@(SearchState ns ls pq _ twu) = case Heap.view pq of +processSearchState lg state@(SearchState ns ls _ pq _ twu) = case Heap.view pq of Nothing -> trace "-- processSearchState, finish because priority queue is empty" $ getComorphismCompositions ns ls -- Nothing -> getComorphismCompositions ns ls - Just ((w, nId), pq') -> + Just ((dist, nId), pq') -> -- trace (printf "-- processSearchState, add node with id=%d, weight=%d, parentId=%d, comorphism=%s" nId w (parentId $ ns HMap.! nId) (comName $ ns HMap.! nId)) $ let curNode = fromMaybe @@ -1106,7 +1109,7 @@ processSearchState lg state@(SearchState ns ls pq _ twu) = case Heap.view pq of -- remove parent node from leaves and put there current node ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls -- condition to continue or stop search at this point - twu' = twu + w + twu' = twu + (comWeight curNode) in if twu' > weight_limit then trace "-- processSearchState, finish because of weight limit" $ getComorphismCompositions ns ls else -- getComorphismCompositions ns ls @@ -1116,6 +1119,7 @@ processSearchState lg state@(SearchState ns ls pq _ twu) = case Heap.view pq of processNeighbours lg nId + dist ( state { searchNodes = ns', leaves = ls', @@ -1166,8 +1170,8 @@ getTargetLogicName :: AnyComorphism -> String getTargetLogicName (Comorphism cid) = language_name $ targetLogic cid -- | given node in tree generate candidate nodes and put them in priority queue -processNeighbours :: LogicGraph -> Int -> SearchState -> SearchState -processNeighbours lg nId state@(SearchState ns _ pq ltcs _) = +processNeighbours :: LogicGraph -> Int -> Int -> SearchState -> SearchState +processNeighbours lg nId dist state@(SearchState ns _ ds pq ltcs _) = -- trace (printf "-- processNeighbours, nId=%d" nId) $ let nNodes = HMap.size ns curNode = @@ -1186,6 +1190,7 @@ processNeighbours lg nId state@(SearchState ns _ pq ltcs _) = tlu = HMap.lookupDefault 0 (targetLogicName) (timesLogicUsed curNode) newComposition = compComorphism (head $ cCompositions curNode) c + cw = HMap.lookupDefault (maxWeight + 1) name comorphismWeight in if (isJust newComposition && tlu <= times_logic_in_branch) then Just $ @@ -1197,7 +1202,7 @@ processNeighbours lg nId state@(SearchState ns _ pq ltcs _) = timesLogicUsed = HMap.empty, cCompositions = (fromJust newComposition) : (cCompositions curNode), comName = name, - searchNodeWeight = HMap.lookupDefault 1 name comorphismWeight + comWeight = cw } else Nothing ) @@ -1206,9 +1211,11 @@ processNeighbours lg nId state@(SearchState ns _ pq ltcs _) = -- update map of nodes ns' = foldl (\_ns sn -> HMap.insert (nodeId sn) sn _ns) ns childrenNodes + -- update distances in SearchState + ds' = foldl (\_ds sn -> HMap.insert (nodeId sn) (dist + comWeight sn) _ds) ds childrenNodes -- update priority queue - pq' = foldl (\_pq sn -> Heap.insert (searchNodeWeight sn, nodeId sn) _pq) pq childrenNodes - in state {searchNodes = ns', pQueue = pq'} + pq' = foldl (\_pq sn -> Heap.insert (dist + comWeight sn, nodeId sn) _pq) pq childrenNodes + in state {searchNodes = ns', distance = ds', pQueue = pq'} mapLogicsToComorphisms :: LogicGraph -> HMap.HashMap String [String] mapLogicsToComorphisms lg = @@ -1267,78 +1274,82 @@ simpleBFS' lg l2cs lvlN lvlState = in simpleBFS' lg l2cs (lvlN + 1) $ concat newLvl -- | assign weights to comorphisms + +maxWeight :: Int +maxWeight = 5 + comorphismWeight :: HMap.HashMap String Int comorphismWeight = HMap.fromList - [ ("CASL2CoCASL", 6), - ("CASL2CspCASL", 6), - ("CASL2ExtModal", 6), - ("CASL2HasCASL", 6), - ("CASL2Hybrid", 6), - ("CASL2Modal", 6), - ("CASL2VSE", 6), - ("CASL2VSEImport", 6), - ("CASL2VSERefine", 6), - ("HasCASL2IsabelleDeprecated", 6), - ("OWL22NeSyPatterns", 6), - ("CASL_DL2CASL", 5), - ("CASL2Propositional", 5), - ("CASL2OWL", 5), - ("OWL22CommonLogic", 5), - ("Propositional2CommonLogic", 5), - ("Propositional2OWL2", 5), - ("Propositional2QBF", 5), - ("SoftFOL2CommonLogic", 5), - ("THFP_P2HasCASL", 4), - ("CspCASL2Modal", 4), - ("OWL22CASL", 3), - ("Propositional2CASL", 3), - ("CoCASL2Isabelle", 3), - ("CommonLogic2Isabelle", 3), - ("CASL2Isabelle", 3), - ("CommonLogicModuleElimination", 3), - ("CspCASL2CspCASL_Failure", 3), - ("CspCASL2CspCASL_Trace", 3), - ("HasCASL2IsabelleOption", 3), - ("THFP2THF0", 3), - ("THFP_P2THFP", 3), - ("Adl2CASL", 2), - ("CASL2NNF", 2), - ("CASL2PCFOL", 2), - ("CASL2PCFOLTopSort", 3), - ("CASL2Prenex", 2), - ("CASL2Skolem", 2), - ("CASL2SoftFOL", 2), - ("CASL2SoftFOLInduction", 2), - ("CASL2SoftFOLInduction2", 2), - ("CASL2SubCFOL", 2), - ("CASL2SubCFOLNoMembershipOrCast", 2), - ("CASL2SubCFOLSubsortBottoms", 2), - ("CASL2TPTP_FOF", 2), - ("CLFol2CFOL", 2), - ("CLFull2CFOL", 2), - ("CLImp2CFOL", 2), - ("CLSeq2CFOL", 2), - ("CoCASL2CoPCFOL", 2), - ("CoCASL2CoSubCFOL", 2), - ("CSMOF2CASL", 2), - ("DFOL2CASL", 2), - ("DMU2OWL2", 2), - ("ExtModal2CASL", 2), - ("ExtModal2ExtModalNoSubsorts", 2), - ("ExtModal2ExtModalTotal", 2), - ("ExtModal2HasCASL", 2), - ("ExtModal2OWL", 2), - ("ExtModal2OWL", 2), - ("HasCASL2HasCASLPrograms", 2), - ("HasCASL2THFP_P", 2), - ("HolLight2Isabelle", 2), - ("Hybrid2CASL", 2), - ("Maude2CASL", 2), - ("Modal2CASL", 2), - ("MonadicTranslation", 2), - ("NormalisingTranslation", 2), - ("QBF2Propositional", 2), - ("QVTR2CASL", 2), - ("RelScheme2CASL", 2) + [ ("CASL2CoCASL", 1), + ("CASL2CspCASL", 1), + ("CASL2ExtModal", 1), + ("CASL2HasCASL", 1), + ("CASL2Hybrid", 1), + ("CASL2Modal", 1), + ("CASL2VSE", 1), + ("CASL2VSEImport", 1), + ("CASL2VSERefine", 1), + ("HasCASL2IsabelleDeprecated", 1), + ("OWL22NeSyPatterns", 1), + ("CASL_DL2CASL", 2), + ("CASL2Propositional", 2), + ("CASL2OWL", 2), + ("OWL22CommonLogic", 2), + ("Propositional2CommonLogic", 2), + ("Propositional2OWL2", 2), + ("Propositional2QBF", 2), + ("SoftFOL2CommonLogic", 2), + ("THFP_P2HasCASL", 3), + ("CspCASL2Modal", 3), + ("OWL22CASL", 4), + ("Propositional2CASL", 4), + ("CoCASL2Isabelle", 4), + ("CommonLogic2Isabelle", 4), + ("CASL2Isabelle", 4), + ("CommonLogicModuleElimination", 4), + ("CspCASL2CspCASL_Failure", 4), + ("CspCASL2CspCASL_Trace", 4), + ("HasCASL2IsabelleOption", 4), + ("THFP2THF0", 4), + ("THFP_P2THFP", 4), + ("Adl2CASL", 5), + ("CASL2NNF", 5), + ("CASL2PCFOL", 5), + ("CASL2PCFOLTopSort", 5), + ("CASL2Prenex", 5), + ("CASL2Skolem", 5), + ("CASL2SoftFOL", 5), + ("CASL2SoftFOLInduction", 5), + ("CASL2SoftFOLInduction2", 5), + ("CASL2SubCFOL", 5), + ("CASL2SubCFOLNoMembershipOrCast", 5), + ("CASL2SubCFOLSubsortBottoms", 5), + ("CASL2TPTP_FOF", 5), + ("CLFol2CFOL", 5), + ("CLFull2CFOL", 5), + ("CLImp2CFOL", 5), + ("CLSeq2CFOL", 5), + ("CoCASL2CoPCFOL", 5), + ("CoCASL2CoSubCFOL", 5), + ("CSMOF2CASL", 5), + ("DFOL2CASL", 5), + ("DMU2OWL2", 5), + ("ExtModal2CASL", 5), + ("ExtModal2ExtModalNoSubsorts", 5), + ("ExtModal2ExtModalTotal", 5), + ("ExtModal2HasCASL", 5), + ("ExtModal2OWL", 5), + ("ExtModal2OWL", 5), + ("HasCASL2HasCASLPrograms", 5), + ("HasCASL2THFP_P", 5), + ("HolLight2Isabelle", 5), + ("Hybrid2CASL", 5), + ("Maude2CASL", 5), + ("Modal2CASL", 5), + ("MonadicTranslation", 5), + ("NormalisingTranslation", 5), + ("QBF2Propositional", 5), + ("QVTR2CASL", 5), + ("RelScheme2CASL", 5) ] From 9ce84a3728a01b647f5f910c4bbd937319c28590 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 9 Feb 2023 23:10:13 +0100 Subject: [PATCH 07/69] correct weights and some minor changes --- CMDL/Interface.hs | 2 - Logic/Grothendieck.hs | 299 +++++++++++++++++------------------------- 2 files changed, 120 insertions(+), 181 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index 1eabc35764..d7ef6a4eff 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -93,8 +93,6 @@ cmdlComplete st (left, _) = do filter (\cc -> elem cc stateConsCheckList) fullConsCheckerList shortConsCList = nub $ map getCcName filteredConsCheckerList - -- traceM "-- comorphisms logicGraph:" - -- forM_ (Map.elems $ comorphisms logicGraph) (putStrLn . show) -- traceM $ printf "-- length paths: %d" (length paths) -- traceM "-- paths:" -- forM_ paths print diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index 2cf661af14..f1545bc53d 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -1025,10 +1025,10 @@ lookupSquare com1 com2 lg = maybe (Fail.fail "lookupSquare") return $ do -- | algo for searching comorphism paths weight_limit :: Int -weight_limit = 500 +weight_limit = 4 times_logic_in_branch :: Int -times_logic_in_branch = 10 +times_logic_in_branch = 2 data SearchNode = SearchNode { nodeId :: Int, @@ -1058,7 +1058,9 @@ data SearchState = SearchState pQueue :: Heap.MinPrioHeap Int Int, -- map logic map to comorphis with it as source logic logicToComorphisms :: HMap.HashMap String [String], - totalWeightUsed :: Int + -- this field = + 1. + -- used for proper id generation of children nodes + nextNodeId :: Int } initState :: LogicGraph -> G_sublogics -> SearchState @@ -1082,7 +1084,7 @@ initState lg (G_sublogics lid sub) = distance = HMap.fromList [(0, 0)], pQueue = Heap.fromList [(0, 0)], logicToComorphisms = mapLogicsToComorphisms lg, - totalWeightUsed = 0 + nextNodeId = 1 } findComorphismCompositions :: LogicGraph -> G_sublogics -> [AnyComorphism] @@ -1090,53 +1092,34 @@ findComorphismCompositions lg gsubl = processSearchState lg (initState lg gsubl) processSearchState :: LogicGraph -> SearchState -> [AnyComorphism] -processSearchState lg state@(SearchState ns ls _ pq _ twu) = case Heap.view pq of - Nothing -> trace "-- processSearchState, finish because priority queue is empty" $ getComorphismCompositions ns ls - -- Nothing -> getComorphismCompositions ns ls +processSearchState lg state@(SearchState ns ls _ pq _ _) = case Heap.view pq of + -- Nothing -> trace "-- processSearchState, finish because priority queue is empty" $ getComorphismCompositions ns ls + Nothing -> getComorphismCompositions ns ls Just ((dist, nId), pq') -> - -- trace (printf "-- processSearchState, add node with id=%d, weight=%d, parentId=%d, comorphism=%s" nId w (parentId $ ns HMap.! nId) (comName $ ns HMap.! nId)) $ - let curNode = - fromMaybe - ( error $ - printf "processSearchState, incorrect nId=%d" nId - ) - $ HMap.lookup nId ns - tlu = HMap.lookupDefault 0 (logicName curNode) (timesLogicUsed curNode) - in if tlu > times_logic_in_branch - then processSearchState lg $ state {pQueue = pq'} - else - let ns' = updateNode curNode ns - -- remove parent node from leaves and put there current node - ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls - -- condition to continue or stop search at this point - twu' = twu + (comWeight curNode) - in if twu' > weight_limit - then trace "-- processSearchState, finish because of weight limit" $ getComorphismCompositions ns ls - else -- getComorphismCompositions ns ls - -- trace (printf "-- put node in tree, id=%d, parent=%d, name=%s" nId (parentId curNode) (logicName curNode)) $ - - processSearchState lg $ - processNeighbours - lg - nId - dist - ( state - { searchNodes = ns', - leaves = ls', - pQueue = pq', - totalWeightUsed = twu' - } - ) - - --- | some updates on node when it is added to search tree from priority queue --- | currently, change field timesLogicUsed -updateNode :: SearchNode -> HMap.HashMap Int SearchNode -> HMap.HashMap Int SearchNode -updateNode sn ns = - let nId = nodeId sn - tlu = HMap.lookupDefault 0 (logicName sn) (timesLogicUsed sn) - sn' = sn { timesLogicUsed = HMap.insert (logicName sn) (tlu + 1) (timesLogicUsed sn) } - in HMap.insert nId sn' ns + -- trace (printf "-- processSearchState, add node with id=%d, dist=%d, parentId=%d, comorphism=%s" nId dist (parentId $ ns HMap.! nId) (comName $ ns HMap.! nId)) $ + let curNode = + fromMaybe + ( error $ + printf "processSearchState, incorrect nId=%d" nId + ) + $ HMap.lookup nId ns + -- remove parent node from global map of nodes + -- as we don't need it there anymore so GC can utilize + -- it if required + ns' = HMap.delete (parentId curNode) ns + -- remove parent node from set of leaves and put current node there + ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls + in processSearchState lg $ + processNeighbours + lg + nId + dist + ( state + { searchNodes = ns', + leaves = ls', + pQueue = pq' + } + ) getComorphismCompositions :: HMap.HashMap Int SearchNode -> -- nodes of search graph @@ -1171,51 +1154,54 @@ getTargetLogicName (Comorphism cid) = language_name $ targetLogic cid -- | given node in tree generate candidate nodes and put them in priority queue processNeighbours :: LogicGraph -> Int -> Int -> SearchState -> SearchState -processNeighbours lg nId dist state@(SearchState ns _ ds pq ltcs _) = +processNeighbours lg nId dist state@(SearchState ns _ ds pq ltcs nni) = -- trace (printf "-- processNeighbours, nId=%d" nId) $ - let nNodes = HMap.size ns - curNode = + let curNode = fromMaybe (error $ printf "processNeighbours, incorrect nId=%d key for HashMap" nId) $ HMap.lookup nId ns lName = logicName curNode comCandidates = HMap.lookupDefault [] lName ltcs comCandidates' = filter (\name -> not $ HSet.member name (usedComorphisms curNode)) comCandidates + -- create SearchNodes when possible due to restrictions and add ids later + -- this code can be expressed as map (create_SearchNode) $ filter (can_create_SearchNode?) + -- but implemented this way without map-filter separation childrenNodes = - -- trace (printf "-- processNeighbours, add nodes with id range [%d, %d]" nNodes (nNodes + (length comCandidates') - 1)) $ catMaybes $ map - ( \(name, i) -> + ( \name -> let c = getComorphism lg name targetLogicName = getTargetLogicName c - tlu = HMap.lookupDefault 0 (targetLogicName) (timesLogicUsed curNode) + tlu = HMap.lookupDefault 0 targetLogicName (timesLogicUsed curNode) newComposition = compComorphism (head $ cCompositions curNode) c cw = HMap.lookupDefault (maxWeight + 1) name comorphismWeight - in if (isJust newComposition && tlu <= times_logic_in_branch) + in if (isJust newComposition && tlu <= times_logic_in_branch && cw + dist <= weight_limit) then Just $ SearchNode - { nodeId = i, + { nodeId = -1, -- dummy value for now, changed later in processNeighbours parentId = nId, logicName = targetLogicName, usedComorphisms = HSet.insert name (usedComorphisms curNode), - timesLogicUsed = HMap.empty, + timesLogicUsed = HMap.insert targetLogicName (tlu + 1) (timesLogicUsed curNode), cCompositions = (fromJust newComposition) : (cCompositions curNode), comName = name, comWeight = cw } else Nothing ) - -- second list is new ids for SearchNodes - $ zip comCandidates' [nNodes .. nNodes + (length comCandidates') - 1] + comCandidates' + + -- add ids to SearchNodes + (childrenNodes', next_nni) = foldl (\(acc, i) sn -> (sn{ nodeId = i } : acc, i + 1)) ([], nni) childrenNodes -- update map of nodes - ns' = foldl (\_ns sn -> HMap.insert (nodeId sn) sn _ns) ns childrenNodes + ns' = foldl (\_ns sn -> HMap.insert (nodeId sn) sn _ns) ns childrenNodes' -- update distances in SearchState - ds' = foldl (\_ds sn -> HMap.insert (nodeId sn) (dist + comWeight sn) _ds) ds childrenNodes + ds' = foldl (\_ds sn -> HMap.insert (nodeId sn) (dist + comWeight sn) _ds) ds childrenNodes' -- update priority queue - pq' = foldl (\_pq sn -> Heap.insert (dist + comWeight sn, nodeId sn) _pq) pq childrenNodes - in state {searchNodes = ns', distance = ds', pQueue = pq'} + pq' = foldl (\_pq sn -> Heap.insert (dist + comWeight sn, nodeId sn) _pq) pq childrenNodes' + in state {searchNodes = ns', distance = ds', pQueue = pq', nextNodeId = next_nni} mapLogicsToComorphisms :: LogicGraph -> HMap.HashMap String [String] mapLogicsToComorphisms lg = @@ -1228,51 +1214,6 @@ mapLogicsToComorphisms lg = HMap.empty $ Map.toList $ comorphisms lg --- | simple BFS algo -max_tree_depth :: Int -max_tree_depth = 1 - -simpleBFS :: LogicGraph -> G_sublogics -> [AnyComorphism] -simpleBFS lg (G_sublogics lid sub) = - let - lName = language_name lid - idc = Comorphism $ mkIdComorphism lid sub - in simpleBFS' lg (mapLogicsToComorphisms lg) 0 [(lName, HSet.empty, [idc])] - -simpleBFS' :: - LogicGraph -> - HMap.HashMap String [String] -> - Int -> - [(String, HSet.HashSet String, [AnyComorphism])] -> -- state of tree level or list of nodes - [AnyComorphism] -simpleBFS' lg l2cs lvlN lvlState = - if lvlN >= max_tree_depth - then nubOrd $ concat $ map (\(_, _, coms) -> coms) lvlState - else - let newLvl = - map - ( \(lName, ucs, cComps) -> - let cs = - filter (\cName -> not $ HSet.member cName ucs) $ - HMap.lookupDefault [] lName l2cs - - lvlElem = - map - ( \cName -> - let c = getComorphism lg cName - tlName = getTargetLogicName c - mComposition = compComorphism (head cComps) c - ucs' = HSet.insert cName ucs - in if (isJust mComposition) - then [(tlName, ucs', (fromJust mComposition) : cComps)] - else [] - ) - cs - in concat lvlElem - ) - lvlState - in simpleBFS' lg l2cs (lvlN + 1) $ concat newLvl - -- | assign weights to comorphisms maxWeight :: Int @@ -1281,75 +1222,75 @@ maxWeight = 5 comorphismWeight :: HMap.HashMap String Int comorphismWeight = HMap.fromList - [ ("CASL2CoCASL", 1), - ("CASL2CspCASL", 1), - ("CASL2ExtModal", 1), - ("CASL2HasCASL", 1), - ("CASL2Hybrid", 1), - ("CASL2Modal", 1), - ("CASL2VSE", 1), - ("CASL2VSEImport", 1), - ("CASL2VSERefine", 1), - ("HasCASL2IsabelleDeprecated", 1), - ("OWL22NeSyPatterns", 1), - ("CASL_DL2CASL", 2), - ("CASL2Propositional", 2), - ("CASL2OWL", 2), - ("OWL22CommonLogic", 2), - ("Propositional2CommonLogic", 2), - ("Propositional2OWL2", 2), - ("Propositional2QBF", 2), - ("SoftFOL2CommonLogic", 2), + [ ("CASL2CoCASL", 5), + ("CASL2CspCASL", 5), + ("CASL2ExtModal", 5), + ("CASL2HasCASL", 5), + ("CASL2Hybrid", 5), + ("CASL2Modal", 5), + ("CASL2VSE", 5), + ("CASL2VSEImport", 5), + ("CASL2VSERefine", 5), + ("HasCASL2IsabelleDeprecated", 5), + ("OWL22NeSyPatterns", 5), + ("CASL_DL2CASL", 4), + ("CASL2Propositional", 4), + ("CASL2OWL", 4), + ("OWL22CommonLogic", 4), + ("Propositional2CommonLogic", 4), + ("Propositional2OWL2", 4), + ("Propositional2QBF", 4), + ("SoftFOL2CommonLogic", 4), ("THFP_P2HasCASL", 3), ("CspCASL2Modal", 3), - ("OWL22CASL", 4), - ("Propositional2CASL", 4), - ("CoCASL2Isabelle", 4), - ("CommonLogic2Isabelle", 4), - ("CASL2Isabelle", 4), - ("CommonLogicModuleElimination", 4), - ("CspCASL2CspCASL_Failure", 4), - ("CspCASL2CspCASL_Trace", 4), - ("HasCASL2IsabelleOption", 4), - ("THFP2THF0", 4), - ("THFP_P2THFP", 4), - ("Adl2CASL", 5), - ("CASL2NNF", 5), - ("CASL2PCFOL", 5), - ("CASL2PCFOLTopSort", 5), - ("CASL2Prenex", 5), - ("CASL2Skolem", 5), - ("CASL2SoftFOL", 5), - ("CASL2SoftFOLInduction", 5), - ("CASL2SoftFOLInduction2", 5), - ("CASL2SubCFOL", 5), - ("CASL2SubCFOLNoMembershipOrCast", 5), - ("CASL2SubCFOLSubsortBottoms", 5), - ("CASL2TPTP_FOF", 5), - ("CLFol2CFOL", 5), - ("CLFull2CFOL", 5), - ("CLImp2CFOL", 5), - ("CLSeq2CFOL", 5), - ("CoCASL2CoPCFOL", 5), - ("CoCASL2CoSubCFOL", 5), - ("CSMOF2CASL", 5), - ("DFOL2CASL", 5), - ("DMU2OWL2", 5), - ("ExtModal2CASL", 5), - ("ExtModal2ExtModalNoSubsorts", 5), - ("ExtModal2ExtModalTotal", 5), - ("ExtModal2HasCASL", 5), - ("ExtModal2OWL", 5), - ("ExtModal2OWL", 5), - ("HasCASL2HasCASLPrograms", 5), - ("HasCASL2THFP_P", 5), - ("HolLight2Isabelle", 5), - ("Hybrid2CASL", 5), - ("Maude2CASL", 5), - ("Modal2CASL", 5), - ("MonadicTranslation", 5), - ("NormalisingTranslation", 5), - ("QBF2Propositional", 5), - ("QVTR2CASL", 5), - ("RelScheme2CASL", 5) + ("OWL22CASL", 2), + ("Propositional2CASL", 2), + ("CoCASL2Isabelle", 2), + ("CommonLogic2Isabelle", 2), + ("CASL2Isabelle", 2), + ("CommonLogicModuleElimination", 2), + ("CspCASL2CspCASL_Failure", 2), + ("CspCASL2CspCASL_Trace", 2), + ("HasCASL2IsabelleOption", 2), + ("THFP2THF0", 2), + ("THFP_P2THFP", 2), + ("Adl2CASL", 1), + ("CASL2NNF", 1), + ("CASL2PCFOL", 1), + ("CASL2PCFOLTopSort", 1), + ("CASL2Prenex", 1), + ("CASL2Skolem", 1), + ("CASL2SoftFOL", 1), + ("CASL2SoftFOLInduction", 1), + ("CASL2SoftFOLInduction2", 1), + ("CASL2SubCFOL", 1), + ("CASL2SubCFOLNoMembershipOrCast", 1), + ("CASL2SubCFOLSubsortBottoms", 1), + ("CASL2TPTP_FOF", 1), + ("CLFol2CFOL", 1), + ("CLFull2CFOL", 1), + ("CLImp2CFOL", 1), + ("CLSeq2CFOL", 1), + ("CoCASL2CoPCFOL", 1), + ("CoCASL2CoSubCFOL", 1), + ("CSMOF2CASL", 1), + ("DFOL2CASL", 1), + ("DMU2OWL2", 1), + ("ExtModal2CASL", 1), + ("ExtModal2ExtModalNoSubsorts", 1), + ("ExtModal2ExtModalTotal", 1), + ("ExtModal2HasCASL", 1), + ("ExtModal2OWL", 1), + ("ExtModal2OWL", 1), + ("HasCASL2HasCASLPrograms", 1), + ("HasCASL2THFP_P", 1), + ("HolLight2Isabelle", 1), + ("Hybrid2CASL", 1), + ("Maude2CASL", 1), + ("Modal2CASL", 1), + ("MonadicTranslation", 1), + ("NormalisingTranslation", 1), + ("QBF2Propositional", 1), + ("QVTR2CASL", 1), + ("RelScheme2CASL", 1) ] From 73f3fc6308e94cfccd8275f4d8fa4c7de14c22d7 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 16 Feb 2023 09:43:37 +0100 Subject: [PATCH 08/69] change times_logic_in_branch --- Logic/Grothendieck.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index f1545bc53d..ac839eb34d 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -1028,7 +1028,7 @@ weight_limit :: Int weight_limit = 4 times_logic_in_branch :: Int -times_logic_in_branch = 2 +times_logic_in_branch = 3 data SearchNode = SearchNode { nodeId :: Int, From 888821086eadb3edfbe30c64f7515af7cce84ec9 Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 16 Feb 2023 10:22:54 +0100 Subject: [PATCH 09/69] remove traces --- CMDL/Interface.hs | 7 ------ Logic/Grothendieck.hs | 56 +++++++++++++++++++------------------------ 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/CMDL/Interface.hs b/CMDL/Interface.hs index d7ef6a4eff..74d34248b3 100644 --- a/CMDL/Interface.hs +++ b/CMDL/Interface.hs @@ -44,9 +44,6 @@ import Data.IORef import Control.Monad import Control.Monad.Trans (MonadIO (..)) -import Debug.Trace -import Text.Printf - #ifdef HASKELINE shellSettings :: IORef CmdlState -> Settings IO shellSettings st = @@ -92,10 +89,6 @@ cmdlComplete st (left, _) = do filteredConsCheckerList = filter (\cc -> elem cc stateConsCheckList) fullConsCheckerList shortConsCList = nub $ map getCcName filteredConsCheckerList - - -- traceM $ printf "-- length paths: %d" (length paths) - -- traceM "-- paths:" - -- forM_ paths print showCmdComplete state shortConsCList comps left [] -> showCmdComplete state [] comps left Nothing -> showCmdComplete state [] comps left diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index ac839eb34d..cb1adcaaec 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -107,12 +107,9 @@ import Logic.ExtSign import Logic.Logic import Logic.Modification import Logic.Morphism --- import Logic.SearchComorphismCompositions import ATerm.Lib -import Debug.Trace - import Common.Doc import Common.DocUtils import Common.ExtSign @@ -1093,47 +1090,43 @@ findComorphismCompositions lg gsubl = processSearchState :: LogicGraph -> SearchState -> [AnyComorphism] processSearchState lg state@(SearchState ns ls _ pq _ _) = case Heap.view pq of - -- Nothing -> trace "-- processSearchState, finish because priority queue is empty" $ getComorphismCompositions ns ls Nothing -> getComorphismCompositions ns ls Just ((dist, nId), pq') -> - -- trace (printf "-- processSearchState, add node with id=%d, dist=%d, parentId=%d, comorphism=%s" nId dist (parentId $ ns HMap.! nId) (comName $ ns HMap.! nId)) $ - let curNode = - fromMaybe - ( error $ - printf "processSearchState, incorrect nId=%d" nId - ) - $ HMap.lookup nId ns - -- remove parent node from global map of nodes - -- as we don't need it there anymore so GC can utilize - -- it if required - ns' = HMap.delete (parentId curNode) ns - -- remove parent node from set of leaves and put current node there - ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls - in processSearchState lg $ - processNeighbours - lg - nId - dist - ( state - { searchNodes = ns', - leaves = ls', - pQueue = pq' - } - ) + let curNode = + fromMaybe + ( error $ + printf "processSearchState, incorrect nId=%d" nId + ) + $ HMap.lookup nId ns + -- remove parent node from global map of nodes + -- as we don't need it there anymore so GC can utilize + -- it if required + ns' = HMap.delete (parentId curNode) ns + -- remove parent node from set of leaves and put current node there + ls' = HSet.insert nId $ HSet.delete (parentId curNode) ls + in processSearchState lg $ + processNeighbours + lg + nId + dist + ( state + { searchNodes = ns', + leaves = ls', + pQueue = pq' + } + ) getComorphismCompositions :: HMap.HashMap Int SearchNode -> -- nodes of search graph HSet.HashSet Int -> -- leaves in this graph [AnyComorphism] getComorphismCompositions sNodes lvs = - -- trace (printf "-- getComorphismCompositions\n\tsNodes.keys: %s\n\tlvs: %s" (show $ HMap.keys sNodes) (show $ HSet.toList lvs)) $ let res = concat $ map ( \i -> let leaf = HMap.lookup i sNodes - in --trace (printf "-- leaf: %s" (show leaf)) $ - reverse $ + in reverse $ cCompositions $ fromMaybe ( error $ @@ -1155,7 +1148,6 @@ getTargetLogicName (Comorphism cid) = language_name $ targetLogic cid -- | given node in tree generate candidate nodes and put them in priority queue processNeighbours :: LogicGraph -> Int -> Int -> SearchState -> SearchState processNeighbours lg nId dist state@(SearchState ns _ ds pq ltcs nni) = - -- trace (printf "-- processNeighbours, nId=%d" nId) $ let curNode = fromMaybe (error $ printf "processNeighbours, incorrect nId=%d key for HashMap" nId) $ HMap.lookup nId ns From 4fbf88adf1d0b38da8dda9667d41fb45e2285d8c Mon Sep 17 00:00:00 2001 From: Daniil_S Date: Thu, 16 Feb 2023 10:23:48 +0100 Subject: [PATCH 10/69] remove old findComorphismPaths function --- Logic/Grothendieck.hs | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/Logic/Grothendieck.hs b/Logic/Grothendieck.hs index cb1adcaaec..3dea7f2694 100644 --- a/Logic/Grothendieck.hs +++ b/Logic/Grothendieck.hs @@ -886,26 +886,6 @@ with intermediate inclusion -} compInclusion :: LogicGraph -> GMorphism -> GMorphism -> Result GMorphism compInclusion = genCompInclusion . inclusionAux False --- | Find all (composites of) comorphisms starting from a given logic --- findComorphismPaths :: LogicGraph -> G_sublogics -> [AnyComorphism] --- findComorphismPaths lg (G_sublogics lid sub) = --- nubOrd $ map fst $ iterateComp (0 :: Int) [(idc, [idc])] --- where --- idc = Comorphism (mkIdComorphism lid sub) --- coMors = Map.elems $ comorphisms lg --- -- compute possible compositions, but only up to depth 4 --- iterateComp n l = --- if n > 0 || l == newL then newL else iterateComp (n + 1) newL --- where --- newL = nubOrd $ l ++ concatMap extend l --- -- extend comorphism list in all directions, but no cylces --- extend (coMor, cmps) = --- let addCoMor c = --- case compComorphism coMor c of --- Nothing -> Nothing --- Just c1 -> Just (c1, c : cmps) --- in mapMaybe addCoMor $ filter (not . (`elem` cmps)) coMors - -- | Find compositions of comorphisms starting from a give logic -- | use wheted graph of logics to optimize search findComorphismPaths :: LogicGraph -> G_sublogics -> [AnyComorphism] From 4e1ed1350482c6eeadc89b63da34d117adf80479 Mon Sep 17 00:00:00 2001 From: Till Mossakowski Date: Wed, 22 Feb 2023 12:33:41 +0100 Subject: [PATCH 11/69] pdf of User guide is linked on web page --- doc/UserGuide.pdf | Bin 0 -> 900854 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/UserGuide.pdf diff --git a/doc/UserGuide.pdf b/doc/UserGuide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fda0c876f402f40e7de5db4f479d7be9a0f20d7e GIT binary patch literal 900854 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

  • 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 w>Tg6I(N9a{?yjUjyR*_kf}owXk+JaU`G@ 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

    D8>dl_?c&WNlr+Z+l+m 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 Sar1C3r^!2Lho!K6F@ literal 0 HcmV?d00001 From ed055fea4b971cb16aadfd8828cebb4cd8c8557a Mon Sep 17 00:00:00 2001 From: Neil Mayhew Date: Fri, 3 Mar 2023 15:47:52 -0700 Subject: [PATCH 12/69] Change import for unsafeCoerce# --- atermlib/src/ATerm/AbstractSyntax.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atermlib/src/ATerm/AbstractSyntax.hs b/atermlib/src/ATerm/AbstractSyntax.hs index dca8f91bda..53ab6f64d0 100644 --- a/atermlib/src/ATerm/AbstractSyntax.hs +++ b/atermlib/src/ATerm/AbstractSyntax.hs @@ -30,7 +30,7 @@ import Data.Dynamic import Data.Typeable import Data.Array import System.Mem.StableName -import GHC.Prim +import Unsafe.Coerce import qualified Data.List as List import Data.Maybe From 35fcbfb21141fb1766b884bbacc9bfae3debf30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Wed, 15 Mar 2023 19:26:56 +0100 Subject: [PATCH 13/69] Added requirements --- python/hets-gui/main.py | 18 ++++++++++++++++++ python/hets-gui/requirements.txt | 0 2 files changed, 18 insertions(+) create mode 100644 python/hets-gui/main.py create mode 100644 python/hets-gui/requirements.txt diff --git a/python/hets-gui/main.py b/python/hets-gui/main.py new file mode 100644 index 0000000000..1abf993d02 --- /dev/null +++ b/python/hets-gui/main.py @@ -0,0 +1,18 @@ +# PYTHONPATH=$(realpath ..) python3 main.py + +import gi +gi.require_version("Gtk", "4.0") +from gi.repository import Gtk + +import hets + +def on_activate(app): + win = Gtk.ApplicationWindow(application=app) + btn = Gtk.Button(label="Hello, World!") + btn.connect('clicked', lambda x: win.close()) + win.set_child(btn) + win.present() + +app = Gtk.Application(application_id='org.gtk.Example') +app.connect('activate', on_activate) +app.run(None) diff --git a/python/hets-gui/requirements.txt b/python/hets-gui/requirements.txt new file mode 100644 index 0000000000..e69de29bb2 From ef980e30f568e5c92c8a2bcfddcaf386e63c5ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:03:38 +0200 Subject: [PATCH 14/69] Added edge and node styles --- HetsAPI/InfoCommands.hs | 9 +- HetsAPI/Internal.hs | 73 ++++++- HetsAPI/Python.hs | 1 + python/hets-gui/main.py | 18 -- python/hets-gui/requirements.txt | 0 python/hets/DevGraphEdge.py | 50 ++++- python/hets/DevGraphNode.py | 15 +- python/hets/DevelopmentGraph.py | 7 +- python/hets/__init__.py | 30 +-- python/hets/haskell/Internal.py | 23 ++- python/hets/haskell/Internal.pyi | 33 ++++ python/hets/haskell/Python.py | 2 +- python/hets/haskell/Python.pyi | 3 + python/hetsgui/GuiVertex.py | 4 + python/hetsgui/environment.yml | 14 ++ python/hetsgui/hetsgui.py | 48 +++++ python/hetsgui/layouts.py | 51 +++++ python/hetsgui/ogdf.py | 15 ++ python/hetsgui/requirements.txt | 5 + python/hetsgui/widgets/GraphvizGraphWidget.py | 182 ++++++++++++++++++ python/hetsgui/windows/MainWindow.py | 54 ++++++ 21 files changed, 590 insertions(+), 47 deletions(-) delete mode 100644 python/hets-gui/main.py delete mode 100644 python/hets-gui/requirements.txt create mode 100644 python/hetsgui/GuiVertex.py create mode 100644 python/hetsgui/environment.yml create mode 100644 python/hetsgui/hetsgui.py create mode 100644 python/hetsgui/layouts.py create mode 100644 python/hetsgui/ogdf.py create mode 100644 python/hetsgui/requirements.txt create mode 100644 python/hetsgui/widgets/GraphvizGraphWidget.py create mode 100644 python/hetsgui/windows/MainWindow.py diff --git a/HetsAPI/InfoCommands.hs b/HetsAPI/InfoCommands.hs index aec266e6b1..ae7195e66a 100644 --- a/HetsAPI/InfoCommands.hs +++ b/HetsAPI/InfoCommands.hs @@ -19,12 +19,14 @@ module HetsAPI.InfoCommands ( , getUnprovenGoals , prettySentence , prettySentenceOfTheory + , getDevelopmentGraphNodeType ) where import HetsAPI.DataTypes (TheoryPointer) import Common.LibName (LibName) -import Static.DevGraph (LibEnv, lookupDGraph, labNodesDG, labEdgesDG, DGraph, DGNodeLab, DGLinkLab, getDGNodeName) +import Static.DevGraph (LibEnv, lookupDGraph, labNodesDG, labEdgesDG, DGraph, DGNodeLab, DGLinkLab, getDGNodeName, getRealDGNodeType) +import Static.DgUtils (DGNodeType) import Data.Graph.Inductive (LNode, LEdge) import Static.GTheory (G_theory (..), isProvenSenStatus) import qualified Common.OrderedMap as OMap @@ -92,4 +94,7 @@ prettySentence :: Logic lid sublogics basic_spec sentence symb_items symb_map_it prettySentence = prettySentence' (undefined :: sentence) prettySentenceOfTheory :: G_theory -> Sentence -> String -prettySentenceOfTheory (G_theory lid _ _ _ _ _) = prettySentence lid \ No newline at end of file +prettySentenceOfTheory (G_theory lid _ _ _ _ _) = prettySentence lid + +getDevelopmentGraphNodeType :: DGNodeLab -> DGNodeType +getDevelopmentGraphNodeType = getRealDGNodeType \ No newline at end of file diff --git a/HetsAPI/Internal.hs b/HetsAPI/Internal.hs index d1198c02a2..f405d309c9 100644 --- a/HetsAPI/Internal.hs +++ b/HetsAPI/Internal.hs @@ -9,6 +9,10 @@ module HetsAPI.Internal ( , Result, resultToMaybe, Diagnosis , HetcatsOpts, defaultHetcatsOpts , DGraph, DGNodeLab, DGLinkLab() + , DGNodeType, nodeTypeIsProven, nodeTypeIsProvenConsistent, nodeTypeIsReference + , DevGraphLinkType(..), DevGraphLinkKind(..), getDevGraphLinkType + -- , DGEdgeType, edgeTypeModInc, edgeTypeisInc + -- , DGEdgeTypeModInc, GlobalDef, HetDef, HidingDef, LocalDef, FreeOrCofreeDef, ThmType, thmEdgeType, isProvenEdge, isConservativ, isPending , developmentGraphNodeLabelName , developmentGraphEdgeLabelName , ProofStatus @@ -28,7 +32,7 @@ module HetsAPI.Internal ( , getConsOfStatus , isProvenConsStatusLink , showConsistencyStatus - , getDGNodeName + , isInternalNode , ExtSign , plainSign , nonImportedSymbols @@ -62,14 +66,15 @@ import Common.IRI import Common.LibName (LibName) import Common.Result (Result, resultToMaybe, Diagnosis) import Driver.Options (HetcatsOpts, defaultHetcatsOpts) -import Static.DevGraph (DGraph, DGNodeLab(..), DGLinkLab(..), getNodeConsStatus, getNodeCons, getDGNodeName, globalAnnos, LibEnv) -import Static.DgUtils (ConsStatus(..), getConsOfStatus, isProvenConsStatusLink, NodeName) +import Static.DevGraph (DGraph, DGNodeLab(..), DGLinkLab(..), getNodeConsStatus, getNodeCons, getDGNodeName, globalAnnos, LibEnv, isInternalNode, getRealDGLinkType) +import Static.DgUtils (ConsStatus(..), getConsOfStatus, isProvenConsStatusLink, NodeName, DGNodeType(..), DGEdgeType(..), DGEdgeTypeModInc(..), Scope(..), ThmTypes(..), FreeOrCofree(..)) import Logic.Prover (ProofStatus, GoalStatus, TacticScript) import Proofs.AbstractState (ProofState) import Proofs.ConsistencyCheck (ConsistencyStatus(..), SType) -developmentGraphNodeLabelName :: DGNodeLab -> NodeName -developmentGraphNodeLabelName = dgn_name +developmentGraphNodeLabelName :: DGNodeLab -> String +developmentGraphNodeLabelName = getDGNodeName + developmentGraphEdgeLabelName :: DGLinkLab -> String developmentGraphEdgeLabelName = dglName @@ -94,3 +99,61 @@ literalAnnos = literal_annos prefixMap :: GlobalAnnos -> PrefixMap prefixMap = prefix_map + +nodeTypeIsProven :: DGNodeType -> Bool +nodeTypeIsProven = isProvenNode + +nodeTypeIsProvenConsistent :: DGNodeType -> Bool +nodeTypeIsProvenConsistent = isProvenCons + +nodeTypeIsReference :: DGNodeType -> Bool +nodeTypeIsReference = isRefType + + +data DevGraphLinkKind = LinkKindGlobal | LinkKindLocal | LinkKindHiding | LinkKindFree | LinkKindCofree +data DevGraphLinkType = + DefinitionLink { linkTypeKind :: DevGraphLinkKind, linkTypeIsInclusion :: Bool, linkTypeIsHomogenoeous :: Bool } + | TheoremLink { linkTypeKind :: DevGraphLinkKind, linkTypeIsInclusion :: Bool, linkTypeIsHomogenoeous :: Bool, linkTypeIsProven :: Bool, linkTypeIsConservativ :: Bool } + +getDevGraphLinkType :: DGLinkLab -> DevGraphLinkType +getDevGraphLinkType l = case edgeTypeModInc (getRealDGLinkType l) of + GlobalDef -> DefinitionLink LinkKindGlobal inclusion True + HetDef -> DefinitionLink LinkKindGlobal inclusion False -- TODO: Correct? + HidingDef -> DefinitionLink LinkKindHiding inclusion True + LocalDef -> DefinitionLink LinkKindLocal inclusion True + FreeOrCofreeDef freeOrCofree -> DefinitionLink (case freeOrCofree of + Free -> LinkKindFree + Cofree -> LinkKindCofree) inclusion True + ThmType {thmEdgeType=thmType, isProvenEdge=proven, isConservativ=conservativ, isPending=pending} -> TheoremLink kind inclusion homogeneous proven conservativ + where + (kind, homogeneous) = case thmType of + HidingThm -> (LinkKindHiding, True) + FreeOrCofreeThm freeOrCofree -> case freeOrCofree of + Free -> (LinkKindFree, True) + Cofree -> (LinkKindCofree, True) + GlobalOrLocalThm scope isHomogeneous -> case scope of + Global -> (LinkKindGlobal, isHomogeneous) + Local -> (LinkKindLocal, isHomogeneous) + where + inclusion = isInc . getRealDGLinkType $ l + + +-- edgeTypeModInclusion :: DGEdgeType -> DGEdgeTypeModInc +-- edgeTypeModInclusion = edgeTypeModInc + +-- edgeTypeIsInclusion :: DGEdgeType -> Bool +-- edgeTypeIsInclusion = isInc + + +-- edgeTypeModInclusionTheoremType :: DGEdgeTypeModInc -> ThmTypes +-- edgeTypeModInclusionTheoremType = thmEdgeType + +-- edgeTypeModInclusionIsProvenEdge :: DGEdgeTypeModInc -> Bool +-- edgeTypeModInclusionIsProvenEdge = isProvenEdge + +-- edgeTypeIsConservativ :: DGEdgeTypeModInc -> Bool +-- edgeTypeIsConservativ = isConservativ + +-- isPending :: DGEdgeTypeModInc -> Bool +-- isPending = isPending + diff --git a/HetsAPI/Python.hs b/HetsAPI/Python.hs index 7af5c4ca9f..22c2caa588 100644 --- a/HetsAPI/Python.hs +++ b/HetsAPI/Python.hs @@ -86,6 +86,7 @@ module HetsAPI.Python ( , HI.getLNodesFromDevelopmentGraph , HI.getEdgesFromDevelopmentGraph , HI.getLEdgesFromDevelopmentGraph + , HI.getDevelopmentGraphNodeType , fstOf3 , sndOf3 diff --git a/python/hets-gui/main.py b/python/hets-gui/main.py deleted file mode 100644 index 1abf993d02..0000000000 --- a/python/hets-gui/main.py +++ /dev/null @@ -1,18 +0,0 @@ -# PYTHONPATH=$(realpath ..) python3 main.py - -import gi -gi.require_version("Gtk", "4.0") -from gi.repository import Gtk - -import hets - -def on_activate(app): - win = Gtk.ApplicationWindow(application=app) - btn = Gtk.Button(label="Hello, World!") - btn.connect('clicked', lambda x: win.close()) - win.set_child(btn) - win.present() - -app = Gtk.Application(application_id='org.gtk.Example') -app.connect('activate', on_activate) -app.run(None) diff --git a/python/hets-gui/requirements.txt b/python/hets-gui/requirements.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/python/hets/DevGraphEdge.py b/python/hets/DevGraphEdge.py index 544b5e4bcf..f9ae41ed30 100644 --- a/python/hets/DevGraphEdge.py +++ b/python/hets/DevGraphEdge.py @@ -6,17 +6,29 @@ from typing import Tuple, Optional -from .haskell import DGLinkLab, fstOf3, sndOf3, thd, gmorphismOfEdge, developmentGraphEdgeLabelName +from .haskell import DGLinkLab, fstOf3, sndOf3, thd, gmorphismOfEdge, developmentGraphEdgeLabelName, getDevGraphLinkType, DevGraphLinkType, LinkKindGlobal, LinkKindLocal, LinkKindHiding, LinkKindFree, LinkKindCofree, TheoremLink from .HsWrapper import HsHierarchyElement from .GMorphism import GMorphism +from enum import Enum +class EdgeKind(Enum): + UNKNOWN = -1 + GLOBAL = 0 + LOCAL = 1 + HIDING = 2 + FREE = 3 + COFREE = 4 + class DevGraphEdge(HsHierarchyElement): def __init__(self, hs_edge: Tuple[int, int, DGLinkLab], parent: Optional[HsHierarchyElement]) -> None: super().__init__(parent) self._hs_edge = hs_edge + def _type(self) -> DevGraphLinkType: + return getDevGraphLinkType(self._label()) + def hs_obj(self): return self._hs_edge @@ -34,3 +46,39 @@ def morphism(self) -> GMorphism: def name(self): return developmentGraphEdgeLabelName(self._label()) + + def kind(self) -> EdgeKind: + t = self._type() + k = t.linkTypeKind() + + if isinstance(k, LinkKindGlobal): + return EdgeKind.GLOBAL + elif isinstance(k, LinkKindLocal): + return EdgeKind.LOCAL + elif isinstance(k, LinkKindHiding): + return EdgeKind.HIDING + elif isinstance(k, LinkKindFree): + return EdgeKind.FREE + elif isinstance(k, LinkKindCofree): + return EdgeKind.COFREE + else: + return EdgeKind.UNKNOWN + + def is_homogeneous(self) -> bool: + return self._type().linkTypeIsHomogenoeous() + + +class DefinitionDevGraphEdge(DevGraphEdge): + pass + + +class TheoremDevGraphEdge(DevGraphEdge): + def _type(self) -> TheoremLink: + return super()._type() + + def is_proven(self): + return self._type().linkTypeIsProven() + + def is_conservativ(self): + return self._type().linkTypeIsConservativ() + diff --git a/python/hets/DevGraphNode.py b/python/hets/DevGraphNode.py index 34ce1d7fea..509bbaadc5 100644 --- a/python/hets/DevGraphNode.py +++ b/python/hets/DevGraphNode.py @@ -17,7 +17,8 @@ mkPyProofOptions, proveNodeAndRecord, ConsistencyStatus as HsConsistencyStatus, PyConsChecker, \ defaultConsCheckingOptions, \ PyConsCheckingOptions, checkConsistencyAndRecord, TheoryPointer, globalTheory, recomputeNode, fromJust, \ - developmentGraphNodeLabelName, developmentGraphEdgeLabelName + developmentGraphNodeLabelName, getDevelopmentGraphNodeType, nodeTypeIsReference, nodeTypeIsProven, \ + nodeTypeIsProvenConsistent, isInternalNode from .Theory import Theory @@ -42,6 +43,9 @@ def label(self) -> DGNodeLab: def name(self) -> str: return developmentGraphNodeLabelName(self.label()) + def is_internal(self) -> bool: + return isInternalNode(self.label()) + def _theory_pointer(self) -> TheoryPointer: node = self.hs_obj() graph = self.parent().hs_obj() @@ -144,3 +148,12 @@ def theory(self) -> Theory: self._theory = Theory(theoryOfNode(snd(self._hs_node)), self) return self._theory + + def is_reference_node(self) -> bool: + return nodeTypeIsReference(getDevelopmentGraphNodeType(self.label())) + + def is_proven_node(self) -> bool: + return nodeTypeIsProven(getDevelopmentGraphNodeType(self.label())) + + def is_consistency_proven(self) -> bool: + return nodeTypeIsProvenConsistent(getDevelopmentGraphNodeType(self.label())) diff --git a/python/hets/DevelopmentGraph.py b/python/hets/DevelopmentGraph.py index 50a910c44e..8fe1ab91c8 100644 --- a/python/hets/DevelopmentGraph.py +++ b/python/hets/DevelopmentGraph.py @@ -6,12 +6,12 @@ from typing import List, Optional from .DevGraphNode import DevGraphNode -from .DevGraphEdge import DevGraphEdge +from .DevGraphEdge import DevGraphEdge, DefinitionDevGraphEdge, TheoremDevGraphEdge from .GlobalAnnotations import GlobalAnnotations from .HsWrapper import HsHierarchyElement from .haskell import getLNodesFromDevelopmentGraph, DGraph, Nothing, fromJust, getDGNodeById, \ - getLEdgesFromDevelopmentGraph, globalAnnotations + getLEdgesFromDevelopmentGraph, globalAnnotations, getDevGraphLinkType, thd, DefinitionLink class DevelopmentGraph(HsHierarchyElement): @@ -48,7 +48,8 @@ def nodes(self) -> List[DevGraphNode]: def edges(self) -> List[DevGraphEdge]: if self._edges is None: hs_edges = getLEdgesFromDevelopmentGraph(self._hs_development_graph) - self._edges = [DevGraphEdge(x, self) for x in hs_edges] + + self._edges = [DefinitionDevGraphEdge(x, self) if isinstance(getDevGraphLinkType(thd(x)), DefinitionLink) else TheoremDevGraphEdge(x, self) for x in hs_edges] return self._edges diff --git a/python/hets/__init__.py b/python/hets/__init__.py index 3332b0befa..b5d2dc0b3a 100644 --- a/python/hets/__init__.py +++ b/python/hets/__init__.py @@ -4,18 +4,18 @@ License : GPLv2 or higher, see LICENSE.txt """ -from .Comorphism import * -from .ConsistencyChecker import * -from .ConsistencyStatus import * -from .DevelopmentGraph import * -from .DevGraphEdge import * -from .DevGraphNode import * -from .GMorphism import * -from .Library import * -from .Logic import * -from .ProofState import * -from .ProofStatus import * -from .Prover import * -from .Sentence import * -from .Signature import * -from .Theory import * +from .Comorphism import Comorphism +from .ConsistencyChecker import ConsistencyChecker +from .ConsistencyStatus import ConsistencyStatus +from .DevelopmentGraph import DevelopmentGraph +from .DevGraphEdge import DevGraphEdge, DefinitionDevGraphEdge, TheoremDevGraphEdge, EdgeKind +from .DevGraphNode import DevGraphNode +from .GMorphism import GMorphism +from .Library import Library, load_library +from .Logic import Logic +from .ProofState import ProofState +from .ProofStatus import ProofStatus +from .Prover import Prover +from .Sentence import Sentence +from .Signature import Signature +from .Theory import Theory diff --git a/python/hets/haskell/Internal.py b/python/hets/haskell/Internal.py index edf3be587e..f5f0d9e6e9 100644 --- a/python/hets/haskell/Internal.py +++ b/python/hets/haskell/Internal.py @@ -37,4 +37,25 @@ ProofState, Diagnosis, HetcatsOpts, - defaultHetcatsOpts) + defaultHetcatsOpts, + DGNodeType, + nodeTypeIsProven, + nodeTypeIsProvenConsistent, + nodeTypeIsReference, + isInternalNode, + DevGraphLinkKind, + LinkKindGlobal, + LinkKindLocal, + LinkKindHiding, + LinkKindFree, + LinkKindCofree, + DevGraphLinkType, + DefinitionLink, + linkTypeKind, + linkTypeIsInclusion, + linkTypeIsHomogenoeous, + TheoremLink, + linkTypeIsProven, + linkTypeIsConservativ, + getDevGraphLinkType +) diff --git a/python/hets/haskell/Internal.pyi b/python/hets/haskell/Internal.pyi index 9a6cce95c3..d54b940367 100644 --- a/python/hets/haskell/Internal.pyi +++ b/python/hets/haskell/Internal.pyi @@ -121,3 +121,36 @@ def getLEdgesFromDevelopmentGraph(g: DGraph) -> typing.List[typing.Tuple[int, in class HetcatsOpts: ... def defaultHetcatsOpts() -> HetcatsOpts: ... + +def isInternalNode(x0: DGNodeLab) -> bool: ... + + + +class DGNodeType: ... + +def nodeTypeIsReference(x0: DGNodeType) -> bool: ... + +def nodeTypeIsProven(x0: DGNodeType) -> bool: ... + +def nodeTypeIsProvenConsistent(x0: DGNodeType) -> bool: ... + +class DevGraphLinkKind: ... +class LinkKindGlobal(DevGraphLinkKind): ... +class LinkKindLocal(DevGraphLinkKind): ... +class LinkKindHiding(DevGraphLinkKind): ... +class LinkKindFree(DevGraphLinkKind): ... +class LinkKindCofree(DevGraphLinkKind): ... + +class DevGraphLinkType: + def linkTypeKind(self) -> DevGraphLinkKind: ... + def linkTypeIsInclusion(self) -> bool: ... + def linkTypeIsHomogenoeous(self) -> bool: ... + +class DefinitionLink(DevGraphLinkType): ... + +class TheoremLink(DevGraphLinkType): + def linkTypeIsProven(self) -> bool: ... + def linkTypeIsConservativ(self) -> bool: ... + + +def getDevGraphLinkType(x0: DGLinkLab) -> DevGraphLinkType: ... diff --git a/python/hets/haskell/Python.py b/python/hets/haskell/Python.py index bb486a3f87..7af76d1e04 100644 --- a/python/hets/haskell/Python.py +++ b/python/hets/haskell/Python.py @@ -20,4 +20,4 @@ globalDecomposition, localInference, localDecomposition, compositionProveEdges, conservativity, automaticHideTheoremShift, theoremHideShift, computeColimit, normalForm, triangleCons, freeness, libFlatImports, libFlatDUnions, libFlatRenamings, libFlatHiding, - libFlatHeterogen, qualifyLibEnv ) + libFlatHeterogen, qualifyLibEnv, getDevelopmentGraphNodeType) diff --git a/python/hets/haskell/Python.pyi b/python/hets/haskell/Python.pyi index 3d4e90c1a1..6fbf7fc9b3 100644 --- a/python/hets/haskell/Python.pyi +++ b/python/hets/haskell/Python.pyi @@ -276,3 +276,6 @@ def libFlatHeterogen(name: LibName, env: LibEnv) -> LibEnv: ... def qualifyLibEnv(name: LibName, env: LibEnv) -> LibEnv: ... + + +def getDevelopmentGraphNodeType(x0: DGNodeLab) -> DGNodeType: ... diff --git a/python/hetsgui/GuiVertex.py b/python/hetsgui/GuiVertex.py new file mode 100644 index 0000000000..cb4ba49bb0 --- /dev/null +++ b/python/hetsgui/GuiVertex.py @@ -0,0 +1,4 @@ +class GuiVertex: + def __init__(self, name): + self.name = name + self.size = None diff --git a/python/hetsgui/environment.yml b/python/hetsgui/environment.yml new file mode 100644 index 0000000000..aed7488df4 --- /dev/null +++ b/python/hetsgui/environment.yml @@ -0,0 +1,14 @@ +name: hetsgui +channels: + - defaults + - conda-forge +dependencies: + - python=3.8.10 + - gtk3 + - pip: + - cairo + - PyGObject + - xdot + - numpy + - graphviz + - python-graphviz diff --git a/python/hetsgui/hetsgui.py b/python/hetsgui/hetsgui.py new file mode 100644 index 0000000000..696509080f --- /dev/null +++ b/python/hetsgui/hetsgui.py @@ -0,0 +1,48 @@ +import sys + +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import GLib, Gtk, Gio + +class MyApplication(Gtk.Application): + def __init__(self): + super().__init__( + application_id="eu.hets.hets", + flags=Gio.ApplicationFlags.HANDLES_OPEN) + GLib.set_application_name("Hets") + self.set_option_context_parameter_string("FILE") + + self.connect("open", self.on_open) + + self.window = None + self.file = None + + def do_command_line(self, command_line): + options = command_line.get_options_dict() + # convert GVariantDict -> GVariant -> dict + options = options.end().unpack() + + self.activate() + return 0 + + def on_open(self, a, files, n_files, hint): + if n_files != 1: + print("Expected exactly one file") + return 1 + + self.file = files[0].get_path() + self.do_activate() + + def do_activate(self): + if not self.window: + from windows.MainWindow import MainWindow + print(self.file) + self.window = MainWindow(self.file, application=self) + + self.window.show_all() + self.window.present() + +app = MyApplication() +exit_status = app.run(sys.argv) +sys.exit(exit_status) diff --git a/python/hetsgui/layouts.py b/python/hetsgui/layouts.py new file mode 100644 index 0000000000..6c1d6c7827 --- /dev/null +++ b/python/hetsgui/layouts.py @@ -0,0 +1,51 @@ +from typing import List + +import numpy as np +from graph_tool import ungroup_vector_property, group_vector_property +from graph_tool.topology import topological_sort + +import graph_tool as gt + +from numpy import sqrt + +from grandalf.layouts import SugiyamaLayout +from grandalf.graphs import Vertex, Edge, Graph, graph_core + + +class defaultview(object): + w, h = 10, 10 + xy: List[int] + + +def hierarchical_layout(g: gt.Graph, sizes, shape=None, dim=2, pos=None): + # if pos is None: + pos = g.new_vertex_property("vector") + + vertices: List[gt.Vertex] = list(g.vertices()) + edges: List[gt.Edge] = list(g.edges()) + + V = [Vertex(v) for v in vertices] + + def node(v): + return next(a for a in V if a.data == v) + + E = [Edge(node(e.source()), node(e.target())) for e in edges] + g = Graph(V, E) + + for v in V: + v.view = defaultview() + v.view.w = sizes[v.data][0] + v.view.h = sizes[v.data][1] + + for C in g.C: + sug = SugiyamaLayout(C) + sug.init_all() + sug.draw() + + for v in C.sV: + print("%s: (%d,%d)" % (v.data, v.view.xy[0], v.view.xy[1])) + + v_id = v.data + pos[v_id] = v.view.xy + + return pos diff --git a/python/hetsgui/ogdf.py b/python/hetsgui/ogdf.py new file mode 100644 index 0000000000..f12714fd1f --- /dev/null +++ b/python/hetsgui/ogdf.py @@ -0,0 +1,15 @@ +from ogdf_python import ogdf, cppinclude +cppinclude("ogdf/basic/graph_generators/randomized.h") +cppinclude("ogdf/layered/SugiyamaLayout.h") + +G = ogdf.Graph() +ogdf.setSeed(1) +ogdf.randomPlanarTriconnectedGraph(G, 20, 40) +GA = ogdf.GraphAttributes(G, ogdf.GraphAttributes.all) + +for n in G.nodes: + GA.label[n] = "N%s" % n.index() + +SL = ogdf.SugiyamaLayout() +SL.call(GA) +GA diff --git a/python/hetsgui/requirements.txt b/python/hetsgui/requirements.txt new file mode 100644 index 0000000000..882698e9b9 --- /dev/null +++ b/python/hetsgui/requirements.txt @@ -0,0 +1,5 @@ +pycairo +PyGObject +xdot +numpy +graphviz diff --git a/python/hetsgui/widgets/GraphvizGraphWidget.py b/python/hetsgui/widgets/GraphvizGraphWidget.py new file mode 100644 index 0000000000..fa4e9b4429 --- /dev/null +++ b/python/hetsgui/widgets/GraphvizGraphWidget.py @@ -0,0 +1,182 @@ +from typing import Tuple, List + +import graphviz +from gi.repository import Gtk, Gio +from graphviz import Graph, Digraph +from xdot import DotWidget + +from hets import DevelopmentGraph, DevGraphNode, DevGraphEdge, TheoremDevGraphEdge, EdgeKind + + +def node_shape(node: DevGraphNode) -> str: + if node.is_reference_node(): + return "rectangle" + else: + return "ellipse" + + +def node_color(node: DevGraphNode) -> str: + if node.is_proven_node(): + if node.is_consistency_proven(): + return "green" + else: + return "yellow" + else: + return "coral" + +def edge_color(edge: DevGraphEdge) -> str: + if isinstance(edge, TheoremDevGraphEdge): + if edge.is_proven(): + if edge.is_conservativ(): + color = "green" + else: + color = "yellow" + else: + color = "red" + + color = { + EdgeKind.FREE: "blue", + EdgeKind.COFREE: "blue", + EdgeKind.HIDING: "blue", + + # default + EdgeKind.LOCAL: "black", + EdgeKind.GLOBAL: "black", + + # error + EdgeKind.UNKNOWN: "fuchsia" + }[edge.kind()] + + # Double lines for heterogeneous signature morphisms + if edge.is_homogeneous(): + return color + else: + return f"{color}:invis:{color}" + +def edge_style(edge: DevGraphEdge): + # Note: Double lines are created with a color list. See edge_color + if isinstance(edge, TheoremDevGraphEdge): + return "dashed" + else: + return "" + + +class GraphvizGraphWidget(DotWidget): + def __init__(self, graph: DevelopmentGraph): + super().__init__() + self.development_graph = graph + + self.g = Digraph("G") + + self.render() + + def render(self) -> None: + g = Digraph("G") + + for node in self.development_graph.nodes(): + g.node(str(node.id()), + label="" if node.is_internal() else node.name(), + fillcolor=node_color(node), + shape=node_shape(node), + style="filled") + + for edge in self.development_graph.edges(): + g.edge(str(edge.origin()), str(edge.target()), + style=edge_style(edge), + color=edge_color(edge), + label=edge.name()) + + self.set_dotcode(g.source.encode("utf-8")) + + self.g = g + + def on_draw(self, widget, cr): + cr.set_source_rgb(1, 1, 1) + cr.paint() + + return super().on_draw(widget, cr) + + def on_click(self, element, event): + if element is None: + return True + + if event.button == 3: # on right click + menu = Gtk.Menu() + + action_prove = Gtk.Action('prove-node') + action_prove.connect('activate', self.on_prove_node) + + menu.append(Gtk.MenuItem("Prove", "prove-node")) + + # menuItem2 = Gtk.MenuItem(label="Create edge from" if self.new_edge_first_node_id is None else "Create edge to") + + # def onClick(menuItem): + # if self.new_edge_first_node_id is None: + # self.new_edge_first_node_id = element.id + # return + # + # # Keep the positions of the previous nodes + # g = Digraph() + # g.node_attr["shape"] = "box" + # + # first_node_id_b: bytes = self.new_edge_first_node_id + # first_node_id = first_node_id_b.decode("utf-8") + # second_node_id_b: bytes = element.id + # second_node_id = second_node_id_b.decode("utf-8") + # + # # g.node(str(new_node_id), label=f"New Node #{new_node_id}", group=f"g{new_node_id}") + # g.edge(first_node_id, second_node_id) + # + # for n in self.graph.nodes: + # id = int(n.id.decode("utf-8")) + # if n.id in [first_node_id_b, second_node_id_b]: + # g.node(n.id.decode("utf-8"), label=self.nodes[id], fillcolor='green', style='filled', + # pos=f"{n.x},{n.y}!") + # else: + # g.node(n.id.decode("utf-8"), label=self.nodes[id], + # pos=f"{n.x},{n.y}!") + # + # for o, t in self.edges: + # g.edge(str(o), str(t)) + # + # self.edges.append((int(first_node_id), int(second_node_id))) + # + # print(g.source) + # + # pos_x, pos_y = self.get_current_pos() + # ratio = self.zoom_ratio + # # self.set_filter("fdp") + # self.set_dotcode(g.source.encode("utf-8")) + # self.set_current_pos(pos_x, pos_y) + # self.zoom_image(ratio) + # + # self.g = g + # self.new_edge_first_node_id = None + + # menuItem2.connect("activate", onClick) + + menu.attach_to_widget(self) + # menu.add(menuItem2) + menu.show_all() + menu.popup(None, None, None, None, event.button, event.time) + + + return True + # return super().on_click(element, event) + + def on_area_motion_notify(self, area, event): + return super().on_area_motion_notify(area, event) + + def set_highlight(self, items, search=False): + super().set_highlight(items, search) + + def on_prove_node(self, action, value): + print('Action: {}\nValue: {}'.format(action, value)) + + + + + + + + diff --git a/python/hetsgui/windows/MainWindow.py b/python/hetsgui/windows/MainWindow.py new file mode 100644 index 0000000000..51b814b79f --- /dev/null +++ b/python/hetsgui/windows/MainWindow.py @@ -0,0 +1,54 @@ +import os +import hets + +from typing import List + +from gi.repository import GLib, Gtk, Gdk, Pango, Gio + +from widgets.GraphvizGraphWidget import GraphvizGraphWidget + + +class defaultview(object): + w, h = 10, 10 + xy: List[int] + +class MainWindow(Gtk.ApplicationWindow): + def __init__(self, file: str, **kwargs): + super().__init__(**kwargs) + + self.file = file + self.library = hets.load_library(file) + + self.set_size_request(1200, 600) + + self.box = Gtk.Box(spacing=6) + self.add(self.box) + + w = GraphvizGraphWidget(self.library.development_graph()) + self.box.pack_start(w, True, True, 0) + + + self.set_title(f"{file} - Hets") + + self.connect("button-press-event", self.on_click) + # self.add(w) + + def on_click(self, element, event): + + if event.button == 3: # on right click + a1 = Gio.SimpleAction.new("action", int) + a1.set_enabled(True) + a1.connect("activate", lambda action, value: print(f"Activate1: {action}, {value}")) + + self.add_action(a1) + + menu = Gtk.Menu() + m1 = Gtk.MenuItem(label="Action 1", action_name="win.action", action_target=1) + menu.add(m1) + m2 = Gtk.MenuItem(label="Action 2", action_name="win.action", action_target=2) + menu.add(m2) + + menu.attach_to_widget(self) + menu.show_all() + menu.popup_at_pointer(event) + From ab90daa9f3b6d92b96240a1fe846d22a299efc96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Wed, 14 Jun 2023 09:24:55 +0200 Subject: [PATCH 15/69] Added open file menu option --- python/hetsgui/GuiVertex.py | 4 - python/hetsgui/hetsgui.py | 26 +++++- python/hetsgui/layouts.py | 51 ------------ python/hetsgui/ogdf.py | 15 ---- python/hetsgui/widgets/GraphvizGraphWidget.py | 14 +++- python/hetsgui/windows/MainWindow.py | 83 ++++++++++++++++--- 6 files changed, 106 insertions(+), 87 deletions(-) delete mode 100644 python/hetsgui/GuiVertex.py delete mode 100644 python/hetsgui/layouts.py delete mode 100644 python/hetsgui/ogdf.py diff --git a/python/hetsgui/GuiVertex.py b/python/hetsgui/GuiVertex.py deleted file mode 100644 index cb4ba49bb0..0000000000 --- a/python/hetsgui/GuiVertex.py +++ /dev/null @@ -1,4 +0,0 @@ -class GuiVertex: - def __init__(self, name): - self.name = name - self.size = None diff --git a/python/hetsgui/hetsgui.py b/python/hetsgui/hetsgui.py index 696509080f..3c9d1efbc3 100644 --- a/python/hetsgui/hetsgui.py +++ b/python/hetsgui/hetsgui.py @@ -18,6 +18,25 @@ def __init__(self): self.window = None self.file = None + def _set_menu(self): + file_menu = Gio.Menu() + + menu_entry_open = Gio.MenuItem() + menu_entry_open.set_label("Open") + menu_entry_open.set_action_and_target_value("win.open_file", None) + file_menu.append_item(menu_entry_open) + + menu = Gio.Menu() + menu.append_submenu("File", file_menu) + self.set_menubar(menu) + + def do_startup(self): + Gtk.Application.do_startup(self) + self._set_menu() + + def on_action_open_file(self, action, parameter): + print("Hello World!") + def do_command_line(self, command_line): options = command_line.get_options_dict() # convert GVariantDict -> GVariant -> dict @@ -37,9 +56,12 @@ def on_open(self, a, files, n_files, hint): def do_activate(self): if not self.window: from windows.MainWindow import MainWindow - print(self.file) - self.window = MainWindow(self.file, application=self) + self.window = MainWindow(application=self) + + if self.file: + self.window.open_file(self.file) + print(self.get_app_menu()) self.window.show_all() self.window.present() diff --git a/python/hetsgui/layouts.py b/python/hetsgui/layouts.py deleted file mode 100644 index 6c1d6c7827..0000000000 --- a/python/hetsgui/layouts.py +++ /dev/null @@ -1,51 +0,0 @@ -from typing import List - -import numpy as np -from graph_tool import ungroup_vector_property, group_vector_property -from graph_tool.topology import topological_sort - -import graph_tool as gt - -from numpy import sqrt - -from grandalf.layouts import SugiyamaLayout -from grandalf.graphs import Vertex, Edge, Graph, graph_core - - -class defaultview(object): - w, h = 10, 10 - xy: List[int] - - -def hierarchical_layout(g: gt.Graph, sizes, shape=None, dim=2, pos=None): - # if pos is None: - pos = g.new_vertex_property("vector") - - vertices: List[gt.Vertex] = list(g.vertices()) - edges: List[gt.Edge] = list(g.edges()) - - V = [Vertex(v) for v in vertices] - - def node(v): - return next(a for a in V if a.data == v) - - E = [Edge(node(e.source()), node(e.target())) for e in edges] - g = Graph(V, E) - - for v in V: - v.view = defaultview() - v.view.w = sizes[v.data][0] - v.view.h = sizes[v.data][1] - - for C in g.C: - sug = SugiyamaLayout(C) - sug.init_all() - sug.draw() - - for v in C.sV: - print("%s: (%d,%d)" % (v.data, v.view.xy[0], v.view.xy[1])) - - v_id = v.data - pos[v_id] = v.view.xy - - return pos diff --git a/python/hetsgui/ogdf.py b/python/hetsgui/ogdf.py deleted file mode 100644 index f12714fd1f..0000000000 --- a/python/hetsgui/ogdf.py +++ /dev/null @@ -1,15 +0,0 @@ -from ogdf_python import ogdf, cppinclude -cppinclude("ogdf/basic/graph_generators/randomized.h") -cppinclude("ogdf/layered/SugiyamaLayout.h") - -G = ogdf.Graph() -ogdf.setSeed(1) -ogdf.randomPlanarTriconnectedGraph(G, 20, 40) -GA = ogdf.GraphAttributes(G, ogdf.GraphAttributes.all) - -for n in G.nodes: - GA.label[n] = "N%s" % n.index() - -SL = ogdf.SugiyamaLayout() -SL.call(GA) -GA diff --git a/python/hetsgui/widgets/GraphvizGraphWidget.py b/python/hetsgui/widgets/GraphvizGraphWidget.py index fa4e9b4429..27f8f47d58 100644 --- a/python/hetsgui/widgets/GraphvizGraphWidget.py +++ b/python/hetsgui/widgets/GraphvizGraphWidget.py @@ -1,4 +1,4 @@ -from typing import Tuple, List +from typing import Optional import graphviz from gi.repository import Gtk, Gio @@ -24,6 +24,7 @@ def node_color(node: DevGraphNode) -> str: else: return "coral" + def edge_color(edge: DevGraphEdge) -> str: if isinstance(edge, TheoremDevGraphEdge): if edge.is_proven(): @@ -53,6 +54,7 @@ def edge_color(edge: DevGraphEdge) -> str: else: return f"{color}:invis:{color}" + def edge_style(edge: DevGraphEdge): # Note: Double lines are created with a color list. See edge_color if isinstance(edge, TheoremDevGraphEdge): @@ -62,10 +64,16 @@ def edge_style(edge: DevGraphEdge): class GraphvizGraphWidget(DotWidget): - def __init__(self, graph: DevelopmentGraph): + g: Optional[Digraph] + development_graph: Optional[DevelopmentGraph] + + def __init__(self): super().__init__() - self.development_graph = graph + self.g = None + self.development_graph = None + def load_graph(self, graph: DevelopmentGraph): + self.development_graph = graph self.g = Digraph("G") self.render() diff --git a/python/hetsgui/windows/MainWindow.py b/python/hetsgui/windows/MainWindow.py index 51b814b79f..586353b599 100644 --- a/python/hetsgui/windows/MainWindow.py +++ b/python/hetsgui/windows/MainWindow.py @@ -1,37 +1,96 @@ -import os +import typing + import hets -from typing import List +from typing import List, Callable, Any, Optional from gi.repository import GLib, Gtk, Gdk, Pango, Gio from widgets.GraphvizGraphWidget import GraphvizGraphWidget +T = typing.TypeVar("T") + + class defaultview(object): w, h = 10, 10 xy: List[int] + class MainWindow(Gtk.ApplicationWindow): - def __init__(self, file: str, **kwargs): + ui_box: Gtk.Box + ui_graph: GraphvizGraphWidget + file: Optional[str] + + def __init__(self, **kwargs): super().__init__(**kwargs) + self.file = None + self.library = None + + self.ui_box = Gtk.Box(spacing=6) + self.add(self.ui_box) + + self.ui_graph = GraphvizGraphWidget() + self.ui_box.pack_start(self.ui_graph, True, True, 0) - self.file = file - self.library = hets.load_library(file) self.set_size_request(1200, 600) + self.set_title("Heterogeneous Toolset") - self.box = Gtk.Box(spacing=6) - self.add(self.box) + self.connect("button-press-event", self.on_click) - w = GraphvizGraphWidget(self.library.development_graph()) - self.box.pack_start(w, True, True, 0) + self._action("open_file", self.on_menu_open_file) + def _action(self, name: str, cb) -> Gio.SimpleAction: + action = Gio.SimpleAction.new(name) + action.connect("activate", cb) + self.add_action(action) + return action - self.set_title(f"{file} - Hets") + def open_file(self, file: str): + self.file = file + self.library = hets.load_library(file) - self.connect("button-press-event", self.on_click) - # self.add(w) + if self.ui_graph: + self.ui_graph.load_graph(self.library.development_graph()) + + self.set_title(f"{file} - Heterogeneous Toolset") + + def on_menu_open_file(self, action: Gio.SimpleAction, parameter: str): + dialog = Gtk.FileChooserDialog( + title="Please choose a file", parent=self, action=Gtk.FileChooserAction.OPEN + ) + dialog.add_buttons( + Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, + Gtk.ResponseType.OK, + ) + + filter_text = Gtk.FileFilter() + filter_text.set_name("Text files") + filter_text.add_mime_type("text/plain") + dialog.add_filter(filter_text) + + filter_py = Gtk.FileFilter() + filter_py.set_name("Python files") + filter_py.add_mime_type("text/x-python") + dialog.add_filter(filter_py) + + filter_any = Gtk.FileFilter() + filter_any.set_name("Any files") + filter_any.add_pattern("*") + dialog.add_filter(filter_any) + + response = dialog.run() + file = None + if response == Gtk.ResponseType.OK: + file = dialog.get_filename() + + dialog.destroy() + + if file: + self.open_file(file) def on_click(self, element, event): From fe355de72bd461dbd297ee36b85bb51926ab479c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Thu, 15 Jun 2023 11:16:54 +0200 Subject: [PATCH 16/69] Added menu and corrected edge colors --- HetsAPI/Internal.hs | 32 +-- python/hets/DevGraphEdge.py | 14 +- python/hets/DevGraphNode.py | 6 +- python/hets/Theory.py | 6 + python/hets/haskell/Internal.py | 8 +- python/hets/haskell/Internal.pyi | 6 + python/hetsgui/hetsgui.py | 115 ++++++++++ python/hetsgui/utils.py | 41 ++++ python/hetsgui/widgets/EdgeInfoDialog.py | 24 +++ python/hetsgui/widgets/GraphvizGraphWidget.py | 184 ++++++++-------- python/hetsgui/widgets/NodeInfoDialog.py | 26 +++ python/hetsgui/widgets/ProveDialog.py | 11 + python/hetsgui/windows/MainWindow.py | 201 +++++++++++++++--- 13 files changed, 529 insertions(+), 145 deletions(-) create mode 100644 python/hetsgui/utils.py create mode 100644 python/hetsgui/widgets/EdgeInfoDialog.py create mode 100644 python/hetsgui/widgets/NodeInfoDialog.py create mode 100644 python/hetsgui/widgets/ProveDialog.py diff --git a/HetsAPI/Internal.hs b/HetsAPI/Internal.hs index f405d309c9..a040b3dbed 100644 --- a/HetsAPI/Internal.hs +++ b/HetsAPI/Internal.hs @@ -15,6 +15,7 @@ module HetsAPI.Internal ( -- , DGEdgeTypeModInc, GlobalDef, HetDef, HidingDef, LocalDef, FreeOrCofreeDef, ThmType, thmEdgeType, isProvenEdge, isConservativ, isPending , developmentGraphNodeLabelName , developmentGraphEdgeLabelName + , developmentGraphEdgeLabelId , ProofStatus , GoalStatus , TimeOfDay @@ -52,12 +53,16 @@ module HetsAPI.Internal ( , LibEnv , IRI + + , showGlobalDoc + , showDoc ) where import Data.Maybe (fromJust) import Data.Time (TimeOfDay) +import Common.DocUtils(showGlobalDoc, showDoc) import Common.ExtSign (ExtSign(..)) import Common.Consistency(Conservativity(..), showConsistencyStatus) import Common.GlobalAnnotations @@ -67,7 +72,7 @@ import Common.LibName (LibName) import Common.Result (Result, resultToMaybe, Diagnosis) import Driver.Options (HetcatsOpts, defaultHetcatsOpts) import Static.DevGraph (DGraph, DGNodeLab(..), DGLinkLab(..), getNodeConsStatus, getNodeCons, getDGNodeName, globalAnnos, LibEnv, isInternalNode, getRealDGLinkType) -import Static.DgUtils (ConsStatus(..), getConsOfStatus, isProvenConsStatusLink, NodeName, DGNodeType(..), DGEdgeType(..), DGEdgeTypeModInc(..), Scope(..), ThmTypes(..), FreeOrCofree(..)) +import Static.DgUtils (ConsStatus(..), getConsOfStatus, isProvenConsStatusLink, NodeName, DGNodeType(..), DGEdgeType(..), DGEdgeTypeModInc(..), Scope(..), ThmTypes(..), FreeOrCofree(..), getEdgeNum) import Logic.Prover (ProofStatus, GoalStatus, TacticScript) import Proofs.AbstractState (ProofState) import Proofs.ConsistencyCheck (ConsistencyStatus(..), SType) @@ -79,6 +84,10 @@ developmentGraphNodeLabelName = getDGNodeName developmentGraphEdgeLabelName :: DGLinkLab -> String developmentGraphEdgeLabelName = dglName +developmentGraphEdgeLabelId :: DGLinkLab -> Int +developmentGraphEdgeLabelId = getEdgeNum . dgl_id + + consistencyStatusType :: ConsistencyStatus -> SType consistencyStatusType = sType @@ -136,24 +145,3 @@ getDevGraphLinkType l = case edgeTypeModInc (getRealDGLinkType l) of Local -> (LinkKindLocal, isHomogeneous) where inclusion = isInc . getRealDGLinkType $ l - - --- edgeTypeModInclusion :: DGEdgeType -> DGEdgeTypeModInc --- edgeTypeModInclusion = edgeTypeModInc - --- edgeTypeIsInclusion :: DGEdgeType -> Bool --- edgeTypeIsInclusion = isInc - - --- edgeTypeModInclusionTheoremType :: DGEdgeTypeModInc -> ThmTypes --- edgeTypeModInclusionTheoremType = thmEdgeType - --- edgeTypeModInclusionIsProvenEdge :: DGEdgeTypeModInc -> Bool --- edgeTypeModInclusionIsProvenEdge = isProvenEdge - --- edgeTypeIsConservativ :: DGEdgeTypeModInc -> Bool --- edgeTypeIsConservativ = isConservativ - --- isPending :: DGEdgeTypeModInc -> Bool --- isPending = isPending - diff --git a/python/hets/DevGraphEdge.py b/python/hets/DevGraphEdge.py index f9ae41ed30..68ea1f2ce2 100644 --- a/python/hets/DevGraphEdge.py +++ b/python/hets/DevGraphEdge.py @@ -6,7 +6,9 @@ from typing import Tuple, Optional -from .haskell import DGLinkLab, fstOf3, sndOf3, thd, gmorphismOfEdge, developmentGraphEdgeLabelName, getDevGraphLinkType, DevGraphLinkType, LinkKindGlobal, LinkKindLocal, LinkKindHiding, LinkKindFree, LinkKindCofree, TheoremLink +from .haskell import DGLinkLab, fstOf3, sndOf3, thd, gmorphismOfEdge, developmentGraphEdgeLabelName, \ + developmentGraphEdgeLabelId, getDevGraphLinkType, DevGraphLinkType, LinkKindGlobal, LinkKindLocal, LinkKindHiding, \ + LinkKindFree, LinkKindCofree, TheoremLink, showDoc from .HsWrapper import HsHierarchyElement from .GMorphism import GMorphism from enum import Enum @@ -20,6 +22,7 @@ class EdgeKind(Enum): FREE = 3 COFREE = 4 + class DevGraphEdge(HsHierarchyElement): def __init__(self, hs_edge: Tuple[int, int, DGLinkLab], parent: Optional[HsHierarchyElement]) -> None: super().__init__(parent) @@ -44,9 +47,12 @@ def _label(self) -> DGLinkLab: def morphism(self) -> GMorphism: return GMorphism(gmorphismOfEdge(self._label())) - def name(self): + def name(self) -> str: return developmentGraphEdgeLabelName(self._label()) + def id(self) -> int: + return developmentGraphEdgeLabelId(self._label()) + def kind(self) -> EdgeKind: t = self._type() k = t.linkTypeKind() @@ -67,6 +73,9 @@ def kind(self) -> EdgeKind: def is_homogeneous(self) -> bool: return self._type().linkTypeIsHomogenoeous() + def info(self) -> str: + return showDoc(self._label(), "") + class DefinitionDevGraphEdge(DevGraphEdge): pass @@ -81,4 +90,3 @@ def is_proven(self): def is_conservativ(self): return self._type().linkTypeIsConservativ() - diff --git a/python/hets/DevGraphNode.py b/python/hets/DevGraphNode.py index 509bbaadc5..91aa0e9f45 100644 --- a/python/hets/DevGraphNode.py +++ b/python/hets/DevGraphNode.py @@ -18,7 +18,7 @@ defaultConsCheckingOptions, \ PyConsCheckingOptions, checkConsistencyAndRecord, TheoryPointer, globalTheory, recomputeNode, fromJust, \ developmentGraphNodeLabelName, getDevelopmentGraphNodeType, nodeTypeIsReference, nodeTypeIsProven, \ - nodeTypeIsProvenConsistent, isInternalNode + nodeTypeIsProvenConsistent, isInternalNode, showGlobalDoc from .Theory import Theory @@ -157,3 +157,7 @@ def is_proven_node(self) -> bool: def is_consistency_proven(self) -> bool: return nodeTypeIsProvenConsistent(getDevelopmentGraphNodeType(self.label())) + + def info(self) -> str: + dev_graph = self.parent() + return showGlobalDoc(dev_graph.global_annotations()._hs_global_annos, self.label(), "") diff --git a/python/hets/Theory.py b/python/hets/Theory.py index edec20fe3f..6d6d8bf0bd 100644 --- a/python/hets/Theory.py +++ b/python/hets/Theory.py @@ -43,6 +43,12 @@ def get_usable_provers(self) -> List[Prover]: provers = getUsableProvers(self._hs_theory).act() return list({Prover(fst(p)) for p in provers}) + def get_prover_by_name(self, name: str) -> Optional[Prover]: + matches = list(p for p in self.get_usable_provers() if p.name() == name) + if len(matches) == 1: + return matches[0] + return None + def get_usable_consistency_checkers(self) -> List[ConsistencyChecker]: ccs = getUsableConsistencyCheckers(self._hs_theory).act() return list({ConsistencyChecker(fst(cc)) for cc in ccs}) diff --git a/python/hets/haskell/Internal.py b/python/hets/haskell/Internal.py index f5f0d9e6e9..a4ca1ca000 100644 --- a/python/hets/haskell/Internal.py +++ b/python/hets/haskell/Internal.py @@ -14,6 +14,7 @@ GlobalAnnos, developmentGraphNodeLabelName, developmentGraphEdgeLabelName, + developmentGraphEdgeLabelId, globalAnnotations, precedenceAnnotations, associativityAnnotations, @@ -57,5 +58,8 @@ TheoremLink, linkTypeIsProven, linkTypeIsConservativ, - getDevGraphLinkType -) + getDevGraphLinkType, + showGlobalDoc, + showDoc, + + ) diff --git a/python/hets/haskell/Internal.pyi b/python/hets/haskell/Internal.pyi index d54b940367..a087031186 100644 --- a/python/hets/haskell/Internal.pyi +++ b/python/hets/haskell/Internal.pyi @@ -35,6 +35,8 @@ def developmentGraphNodeLabelName(x0: DGNodeLab) -> str: ... def developmentGraphEdgeLabelName(x0: DGLinkLab) -> str: ... +def developmentGraphEdgeLabelId(x0: DGLinkLab) -> int: ... + def globalAnnotations(x0: DGraph) -> GlobalAnnos: ... @@ -154,3 +156,7 @@ class TheoremLink(DevGraphLinkType): def getDevGraphLinkType(x0: DGLinkLab) -> DevGraphLinkType: ... + +def showGlobalDoc(x0: GlobalAnnos, x1: typing.Any, x2: str) -> str: ... + +def showDoc(x0: typing.Any, x2: str) -> str: ... diff --git a/python/hetsgui/hetsgui.py b/python/hetsgui/hetsgui.py index 3c9d1efbc3..aa4ea5b10c 100644 --- a/python/hetsgui/hetsgui.py +++ b/python/hetsgui/hetsgui.py @@ -26,8 +26,123 @@ def _set_menu(self): menu_entry_open.set_action_and_target_value("win.open_file", None) file_menu.append_item(menu_entry_open) + view_menu = Gio.Menu() + menu_entry_show_hide_names = Gio.MenuItem() + menu_entry_show_hide_names.set_label("Show internal names") + menu_entry_show_hide_names.set_action_and_target_value("win.toggle_show_names", None) + view_menu.append_item(menu_entry_show_hide_names) + + menu_entry_show_hide_nodes = Gio.MenuItem() + menu_entry_show_hide_nodes.set_label("Show unnamed nodes without open proofs") + menu_entry_show_hide_nodes.set_action_and_target_value("win.toggle_show_nodes", None) + view_menu.append_item(menu_entry_show_hide_nodes) + + menu_entry_show_hide_edges = Gio.MenuItem() + menu_entry_show_hide_edges.set_label("Show newly added proven edges") + menu_entry_show_hide_edges.set_action_and_target_value("win.toggle_show_edges", None) + view_menu.append_item(menu_entry_show_hide_edges) + + proof_menu = Gio.Menu() + menu_entry_automatic = Gio.MenuItem() + menu_entry_automatic.set_label("Apply proof rules automatically") + menu_entry_automatic.set_action_and_target_value("win.proofs.automatic", None) + proof_menu.append_item(menu_entry_automatic) + + menu_entry_global_subsume = Gio.MenuItem() + menu_entry_global_subsume.set_label("Global-Subsumption") + menu_entry_global_subsume.set_action_and_target_value("win.proofs.global_subsume", None) + proof_menu.append_item(menu_entry_global_subsume) + + menu_entry_global_decomposition = Gio.MenuItem() + menu_entry_global_decomposition.set_label("Global-Decomposition") + menu_entry_global_decomposition.set_action_and_target_value("win.proofs.global_decomposition", None) + proof_menu.append_item(menu_entry_global_decomposition) + + menu_entry_local_inference = Gio.MenuItem() + menu_entry_local_inference.set_label("Local-Inference") + menu_entry_local_inference.set_action_and_target_value("win.proofs.local_inference", None) + proof_menu.append_item(menu_entry_local_inference) + + menu_entry_local_decomposition = Gio.MenuItem() + menu_entry_local_decomposition.set_label("Local-Decomposition") + menu_entry_local_decomposition.set_action_and_target_value("win.proofs.local_decomposition", None) + proof_menu.append_item(menu_entry_local_decomposition) + + menu_entry_composition_prove_edges = Gio.MenuItem() + menu_entry_composition_prove_edges.set_label("Prove composed edges") + menu_entry_composition_prove_edges.set_action_and_target_value("win.proofs.composition_prove_edges", None) + proof_menu.append_item(menu_entry_composition_prove_edges) + + menu_entry_conservativity = Gio.MenuItem() + menu_entry_conservativity.set_label("Conservativity") + menu_entry_conservativity.set_action_and_target_value("win.proofs.conservativity", None) + proof_menu.append_item(menu_entry_conservativity) + + menu_entry_automatic_hide_theorem_shift = Gio.MenuItem() + menu_entry_automatic_hide_theorem_shift.set_label("Hide-Theorem-Shift") + menu_entry_automatic_hide_theorem_shift.set_action_and_target_value("win.proofs.automatic_hide_theorem_shift", None) + proof_menu.append_item(menu_entry_automatic_hide_theorem_shift) + + menu_entry_theorem_hide_shift = Gio.MenuItem() + menu_entry_theorem_hide_shift.set_label("Theorem-Hide-Shift") + menu_entry_theorem_hide_shift.set_action_and_target_value("win.proofs.theorem_hide_shift", None) + proof_menu.append_item(menu_entry_theorem_hide_shift) + + menu_entry_compute_colimit = Gio.MenuItem() + menu_entry_compute_colimit.set_label("Compute colimit") + menu_entry_compute_colimit.set_action_and_target_value("win.proofs.compute_colimit", None) + proof_menu.append_item(menu_entry_compute_colimit) + + menu_entry_normal_form = Gio.MenuItem() + menu_entry_normal_form.set_label("Compute normal form") + menu_entry_normal_form.set_action_and_target_value("win.proofs.normal_form", None) + proof_menu.append_item(menu_entry_normal_form) + + menu_entry_triangle_cons = Gio.MenuItem() + menu_entry_triangle_cons.set_label("Triangle-Cons") + menu_entry_triangle_cons.set_action_and_target_value("win.proofs.triangle_cons", None) + proof_menu.append_item(menu_entry_triangle_cons) + + menu_entry_freeness = Gio.MenuItem() + menu_entry_freeness.set_label("Freeness") + menu_entry_freeness.set_action_and_target_value("win.proofs.freeness", None) + proof_menu.append_item(menu_entry_freeness) + + menu_entry_lib_flat_imports = Gio.MenuItem() + menu_entry_lib_flat_imports.set_label("Flatten imports") + menu_entry_lib_flat_imports.set_action_and_target_value("win.proofs.lib_flat_imports", None) + proof_menu.append_item(menu_entry_lib_flat_imports) + + menu_entry_lib_flat_d_unions = Gio.MenuItem() + menu_entry_lib_flat_d_unions.set_label("Flatten D-unions") + menu_entry_lib_flat_d_unions.set_action_and_target_value("win.proofs.lib_flat_d_unions", None) + proof_menu.append_item(menu_entry_lib_flat_d_unions) + + menu_entry_lib_flat_renamings = Gio.MenuItem() + menu_entry_lib_flat_renamings.set_label("Flatten renamings") + menu_entry_lib_flat_renamings.set_action_and_target_value("win.proofs.lib_flat_renamings", None) + proof_menu.append_item(menu_entry_lib_flat_renamings) + + menu_entry_lib_flat_hiding = Gio.MenuItem() + menu_entry_lib_flat_hiding.set_label("Flatten hiding") + menu_entry_lib_flat_hiding.set_action_and_target_value("win.proofs.lib_flat_hiding", None) + proof_menu.append_item(menu_entry_lib_flat_hiding) + + menu_entry_lib_flat_heterogen = Gio.MenuItem() + menu_entry_lib_flat_heterogen.set_label("Flatten heterogen") + menu_entry_lib_flat_heterogen.set_action_and_target_value("win.proofs.lib_flat_heterogen", None) + proof_menu.append_item(menu_entry_lib_flat_heterogen) + + menu_entry_qualify_lib_env = Gio.MenuItem() + menu_entry_qualify_lib_env.set_label("Qualify lib env") + menu_entry_qualify_lib_env.set_action_and_target_value("win.proofs.qualify_lib_env", None) + proof_menu.append_item(menu_entry_qualify_lib_env) + + menu = Gio.Menu() menu.append_submenu("File", file_menu) + menu.append_submenu("View", view_menu) + menu.append_submenu("Proofs", proof_menu) self.set_menubar(menu) def do_startup(self): diff --git a/python/hetsgui/utils.py b/python/hetsgui/utils.py new file mode 100644 index 0000000000..7a3c2465e1 --- /dev/null +++ b/python/hetsgui/utils.py @@ -0,0 +1,41 @@ + + + +from typing import Any + +from gi.repository import GLib + +def get_variant(data: Any) -> GLib.Variant: + # Source: https://gitlab.gnome.org/GNOME/gnome-browser-connector/-/blob/master/gnome_browser_connector/helpers.py + # Licenced under GPL-3.0-or-later + + if isinstance(data, str): + return GLib.Variant.new_string(data) + elif isinstance(data, int): + return GLib.Variant.new_int32(data) + elif isinstance(data, (list, tuple, set)): + variant_builder: GLib.VariantBuilder = GLib.VariantBuilder.new(GLib.VariantType.new('av')) + + for value in data: + variant_builder.add_value(GLib.Variant.new_variant(get_variant(value))) + + return variant_builder.end() + elif isinstance(data, dict): + variant_builder = GLib.VariantBuilder.new(GLib.VariantType.new('a{sv}')) + + for key in data: + if data[key] is None: + continue + + key_string = str(key) + + variant_builder.add_value( + GLib.Variant.new_dict_entry( + get_variant(key_string), GLib.Variant.new_variant(get_variant(data[key])) + ) + ) + + return variant_builder.end() + else: + raise Exception(f"Unknown data type: {type(data)}") + diff --git a/python/hetsgui/widgets/EdgeInfoDialog.py b/python/hetsgui/widgets/EdgeInfoDialog.py new file mode 100644 index 0000000000..078d15d862 --- /dev/null +++ b/python/hetsgui/widgets/EdgeInfoDialog.py @@ -0,0 +1,24 @@ +from gi.repository import Gtk + +from hets import DevGraphEdge + + +class EdgeInfoDialog(Gtk.Dialog): + def __init__(self, parent, edge: DevGraphEdge): + super().__init__(transient_for=parent, flags=0) + + self.set_default_size(800, 600) + self.add_buttons("_Close", Gtk.ResponseType.CLOSE) + + title = f"edge {edge.id()} {edge.name()}({edge.origin()} --> {edge.target()})" + self.set_title(title) + + box = self.get_content_area() + text_view = Gtk.TextView() + text_view.set_property('editable', False) + text_view.set_property('monospace', True) + text_buffer = text_view.get_buffer() + text_buffer.set_text(title + "\n" + edge.info()) + + box.add(text_view) + self.show_all() diff --git a/python/hetsgui/widgets/GraphvizGraphWidget.py b/python/hetsgui/widgets/GraphvizGraphWidget.py index 27f8f47d58..d5f3676993 100644 --- a/python/hetsgui/widgets/GraphvizGraphWidget.py +++ b/python/hetsgui/widgets/GraphvizGraphWidget.py @@ -1,11 +1,13 @@ from typing import Optional import graphviz -from gi.repository import Gtk, Gio +import xdot.ui.elements +from gi.repository import Gtk, Gio, GLib, Gdk from graphviz import Graph, Digraph from xdot import DotWidget -from hets import DevelopmentGraph, DevGraphNode, DevGraphEdge, TheoremDevGraphEdge, EdgeKind +from hets import DevelopmentGraph, DevGraphNode, DevGraphEdge, TheoremDevGraphEdge, EdgeKind, DefinitionDevGraphEdge +from utils import get_variant def node_shape(node: DevGraphNode) -> str: @@ -18,9 +20,9 @@ def node_shape(node: DevGraphNode) -> str: def node_color(node: DevGraphNode) -> str: if node.is_proven_node(): if node.is_consistency_proven(): - return "green" + return "limegreen" else: - return "yellow" + return "gold2" else: return "coral" @@ -29,24 +31,25 @@ def edge_color(edge: DevGraphEdge) -> str: if isinstance(edge, TheoremDevGraphEdge): if edge.is_proven(): if edge.is_conservativ(): - color = "green" + color = "limegreen" else: - color = "yellow" + color = "gold2" else: - color = "red" + color = "coral" - color = { - EdgeKind.FREE: "blue", - EdgeKind.COFREE: "blue", - EdgeKind.HIDING: "blue", + else: + color = { + EdgeKind.FREE: "royalblue", + EdgeKind.COFREE: "royalblue", + EdgeKind.HIDING: "royalblue", - # default - EdgeKind.LOCAL: "black", - EdgeKind.GLOBAL: "black", + # default + EdgeKind.LOCAL: "black", + EdgeKind.GLOBAL: "black", - # error - EdgeKind.UNKNOWN: "fuchsia" - }[edge.kind()] + # error + EdgeKind.UNKNOWN: "fuchsia" + }[edge.kind()] # Double lines for heterogeneous signature morphisms if edge.is_homogeneous(): @@ -57,7 +60,7 @@ def edge_color(edge: DevGraphEdge) -> str: def edge_style(edge: DevGraphEdge): # Note: Double lines are created with a color list. See edge_color - if isinstance(edge, TheoremDevGraphEdge): + if (isinstance(edge, TheoremDevGraphEdge) and edge.is_homogeneous() or isinstance(edge, DefinitionDevGraphEdge)) and edge.kind() == EdgeKind.LOCAL: return "dashed" else: return "" @@ -67,6 +70,11 @@ class GraphvizGraphWidget(DotWidget): g: Optional[Digraph] development_graph: Optional[DevelopmentGraph] + # View properties + _show_internal_node_names: bool = False + _show_unnamed_nodes_without_open_proofs: bool = False + _show_newly_added_proven_edges: bool = False + def __init__(self): super().__init__() self.g = None @@ -76,14 +84,38 @@ def load_graph(self, graph: DevelopmentGraph): self.development_graph = graph self.g = Digraph("G") + self.render(False) + + def show_internal_node_names(self): + self._show_internal_node_names = True self.render() - def render(self) -> None: + def hide_internal_node_names(self): + self._show_internal_node_names = False + self.render() + + def show_unnamed_nodes_without_open_proofs(self): + self._show_unnamed_nodes_without_open_proofs = True + self.render() + + def hide_unnamed_nodes_without_open_proofs(self): + self._show_unnamed_nodes_without_open_proofs = False + self.render() + + def show_newly_added_proven_edges(self): + self._show_newly_added_proven_edges = True + self.render() + + def hide_newly_added_proven_edges(self): + self._show_newly_added_proven_edges = False + self.render() + + def render(self, keep_zoom=True) -> None: g = Digraph("G") for node in self.development_graph.nodes(): g.node(str(node.id()), - label="" if node.is_internal() else node.name(), + label="" if node.is_internal() and not self._show_internal_node_names else node.name(), fillcolor=node_color(node), shape=node_shape(node), style="filled") @@ -94,10 +126,40 @@ def render(self) -> None: color=edge_color(edge), label=edge.name()) + zoom_ration, x, y = self.zoom_ratio, self.x, self.y self.set_dotcode(g.source.encode("utf-8")) + if keep_zoom: + self.zoom_ratio, self.x, self.y = zoom_ration, x, y self.g = g + def _menu_for_node(self, node_id: str) -> Gtk.Menu: + menu = Gio.Menu() + + menu_item_prove = Gio.MenuItem() + menu_item_prove.set_label("Prove") + menu_item_prove.set_action_and_target_value("win.node.prove", GLib.Variant.new_string(node_id)) + menu.append_item(menu_item_prove) + + menu_item_info = Gio.MenuItem() + menu_item_info.set_label("Show node info") + menu_item_info.set_action_and_target_value("win.node.show_info", GLib.Variant.new_string(node_id)) + menu.append_item(menu_item_info) + + + return Gtk.Menu.new_from_model(menu) + + def _menu_for_edge(self, src_id: str, dst_id: str) -> Gtk.Menu: + menu = Gio.Menu() + + menu_item_info = Gio.MenuItem() + menu_item_info.set_label("Show edge info") + menu_item_info.set_action_and_target_value("win.edge.show_info", get_variant([src_id, dst_id])) + menu.append_item(menu_item_info) + + + return Gtk.Menu.new_from_model(menu) + def on_draw(self, widget, cr): cr.set_source_rgb(1, 1, 1) cr.paint() @@ -109,65 +171,21 @@ def on_click(self, element, event): return True if event.button == 3: # on right click - menu = Gtk.Menu() - - action_prove = Gtk.Action('prove-node') - action_prove.connect('activate', self.on_prove_node) - - menu.append(Gtk.MenuItem("Prove", "prove-node")) - - # menuItem2 = Gtk.MenuItem(label="Create edge from" if self.new_edge_first_node_id is None else "Create edge to") - - # def onClick(menuItem): - # if self.new_edge_first_node_id is None: - # self.new_edge_first_node_id = element.id - # return - # - # # Keep the positions of the previous nodes - # g = Digraph() - # g.node_attr["shape"] = "box" - # - # first_node_id_b: bytes = self.new_edge_first_node_id - # first_node_id = first_node_id_b.decode("utf-8") - # second_node_id_b: bytes = element.id - # second_node_id = second_node_id_b.decode("utf-8") - # - # # g.node(str(new_node_id), label=f"New Node #{new_node_id}", group=f"g{new_node_id}") - # g.edge(first_node_id, second_node_id) - # - # for n in self.graph.nodes: - # id = int(n.id.decode("utf-8")) - # if n.id in [first_node_id_b, second_node_id_b]: - # g.node(n.id.decode("utf-8"), label=self.nodes[id], fillcolor='green', style='filled', - # pos=f"{n.x},{n.y}!") - # else: - # g.node(n.id.decode("utf-8"), label=self.nodes[id], - # pos=f"{n.x},{n.y}!") - # - # for o, t in self.edges: - # g.edge(str(o), str(t)) - # - # self.edges.append((int(first_node_id), int(second_node_id))) - # - # print(g.source) - # - # pos_x, pos_y = self.get_current_pos() - # ratio = self.zoom_ratio - # # self.set_filter("fdp") - # self.set_dotcode(g.source.encode("utf-8")) - # self.set_current_pos(pos_x, pos_y) - # self.zoom_image(ratio) - # - # self.g = g - # self.new_edge_first_node_id = None - - # menuItem2.connect("activate", onClick) - - menu.attach_to_widget(self) - # menu.add(menuItem2) - menu.show_all() - menu.popup(None, None, None, None, event.button, event.time) + menu = None + if isinstance(element, xdot.ui.elements.Node): + node_id = element.id.decode("utf-8") + + menu = self._menu_for_node(node_id) + if isinstance(element, xdot.ui.elements.Edge): + src_id, dst_id = element.src.id.decode("utf-8"), element.dst.id.decode("utf-8") + + menu = self._menu_for_edge(src_id, dst_id) + if menu: + menu.attach_to_widget(self) + # menu.add(menuItem2) + menu.show_all() + menu.popup(None, None, None, None, event.button, event.time) return True # return super().on_click(element, event) @@ -178,13 +196,3 @@ def on_area_motion_notify(self, area, event): def set_highlight(self, items, search=False): super().set_highlight(items, search) - def on_prove_node(self, action, value): - print('Action: {}\nValue: {}'.format(action, value)) - - - - - - - - diff --git a/python/hetsgui/widgets/NodeInfoDialog.py b/python/hetsgui/widgets/NodeInfoDialog.py new file mode 100644 index 0000000000..934d499373 --- /dev/null +++ b/python/hetsgui/widgets/NodeInfoDialog.py @@ -0,0 +1,26 @@ +from gi.repository import Gtk + +from hets import DevGraphNode + + +class NodeInfoDialog(Gtk.Dialog): + def __init__(self, parent, node: DevGraphNode): + super().__init__(transient_for=parent, flags=0) + + self.set_default_size(800, 600) + self.add_buttons("_Close", Gtk.ResponseType.CLOSE) + + title = "{0} node {1} {2}".format( + ("reference" if node.is_reference_node() else "internal" if node.is_internal() else ""), + node.name(), + node.id()) + self.set_title(title) + + box = self.get_content_area() + text_view = Gtk.TextView() + text_view.set_property('editable', False) + text_buffer = text_view.get_buffer() + text_buffer.set_text(title + "\n" + node.info()) + + box.add(text_view) + self.show_all() diff --git a/python/hetsgui/widgets/ProveDialog.py b/python/hetsgui/widgets/ProveDialog.py new file mode 100644 index 0000000000..83c6655c14 --- /dev/null +++ b/python/hetsgui/widgets/ProveDialog.py @@ -0,0 +1,11 @@ +from gi.repository import Gtk + +from hets import DevGraphNode + +ui = """ + +""" + +class ProveDialog(Gtk.Window): + def __init__(self, node: DevGraphNode): + super().__init__(title=f"Prove {node.name()}") diff --git a/python/hetsgui/windows/MainWindow.py b/python/hetsgui/windows/MainWindow.py index 586353b599..8d107e7cad 100644 --- a/python/hetsgui/windows/MainWindow.py +++ b/python/hetsgui/windows/MainWindow.py @@ -6,7 +6,9 @@ from gi.repository import GLib, Gtk, Gdk, Pango, Gio +from widgets.EdgeInfoDialog import EdgeInfoDialog from widgets.GraphvizGraphWidget import GraphvizGraphWidget +from widgets.NodeInfoDialog import NodeInfoDialog T = typing.TypeVar("T") @@ -21,6 +23,7 @@ class MainWindow(Gtk.ApplicationWindow): ui_box: Gtk.Box ui_graph: GraphvizGraphWidget file: Optional[str] + library: Optional[hets.Library] def __init__(self, **kwargs): super().__init__(**kwargs) @@ -37,16 +40,46 @@ def __init__(self, **kwargs): self.set_size_request(1200, 600) self.set_title("Heterogeneous Toolset") - self.connect("button-press-event", self.on_click) - self._action("open_file", self.on_menu_open_file) - - def _action(self, name: str, cb) -> Gio.SimpleAction: - action = Gio.SimpleAction.new(name) + self._action("node.prove", self.on_prove_node, "s") + self._action("node.show_info", self.on_show_node_info, "s") + self._action("edge.show_info", self.on_show_edge_info, "av") + self._action_toggle("toggle_show_names", self.on_toggle_show_names) + self._action_toggle("toggle_show_nodes", self.on_toggle_show_nodes) + self._action_toggle("toggle_show_edges", self.on_toggle_show_edges) + + self._action("proofs.automatic", self.on_automatic) + self._action("proofs.global_subsume", self.on_global_subsume) + self._action("proofs.global_decomposition", self.on_global_decomposition) + self._action("proofs.local_inference", self.on_local_inference) + self._action("proofs.local_decomposition", self.on_local_decomposition) + self._action("proofs.composition_prove_edges", self.on_composition_prove_edges) + self._action("proofs.conservativity", self.on_conservativity) + self._action("proofs.automatic_hide_theorem_shift", self.on_automatic_hide_theorem_shift) + self._action("proofs.theorem_hide_shift", self.on_theorem_hide_shift) + self._action("proofs.compute_colimit", self.on_compute_colimit) + self._action("proofs.normal_form", self.on_normal_form) + self._action("proofs.triangle_cons", self.on_triangle_cons) + self._action("proofs.freeness", self.on_freeness) + self._action("proofs.lib_flat_imports", self.on_lib_flat_imports) + self._action("proofs.lib_flat_d_unions", self.on_lib_flat_d_unions) + self._action("proofs.lib_flat_renamings", self.on_lib_flat_renamings) + self._action("proofs.lib_flat_hiding", self.on_lib_flat_hiding) + self._action("proofs.lib_flat_heterogen", self.on_lib_flat_heterogen) + self._action("proofs.qualify_lib_env", self.on_qualify_lib_env) + + def _action(self, name: str, cb: Callable[[Gio.SimpleAction, T], Any], param_type_str: Optional[str] = None) -> Gio.SimpleAction: + action = Gio.SimpleAction.new(name, GLib.VariantType(param_type_str) if param_type_str else None) action.connect("activate", cb) self.add_action(action) return action + def _action_toggle(self, name: str, cb: Callable[[Gio.SimpleAction, bool], Any], default: bool = False) -> Gio.SimpleAction: + action = Gio.SimpleAction.new_stateful(name, None, GLib.Variant.new_boolean(default)) + action.connect("change-state", cb) + self.add_action(action) + return action + def open_file(self, file: str): self.file = file self.library = hets.load_library(file) @@ -72,11 +105,6 @@ def on_menu_open_file(self, action: Gio.SimpleAction, parameter: str): filter_text.add_mime_type("text/plain") dialog.add_filter(filter_text) - filter_py = Gtk.FileFilter() - filter_py.set_name("Python files") - filter_py.add_mime_type("text/x-python") - dialog.add_filter(filter_py) - filter_any = Gtk.FileFilter() filter_any.set_name("Any files") filter_any.add_pattern("*") @@ -92,22 +120,137 @@ def on_menu_open_file(self, action: Gio.SimpleAction, parameter: str): if file: self.open_file(file) - def on_click(self, element, event): - - if event.button == 3: # on right click - a1 = Gio.SimpleAction.new("action", int) - a1.set_enabled(True) - a1.connect("activate", lambda action, value: print(f"Activate1: {action}, {value}")) - - self.add_action(a1) - - menu = Gtk.Menu() - m1 = Gtk.MenuItem(label="Action 1", action_name="win.action", action_target=1) - menu.add(m1) - m2 = Gtk.MenuItem(label="Action 2", action_name="win.action", action_target=2) - menu.add(m2) - - menu.attach_to_widget(self) - menu.show_all() - menu.popup_at_pointer(event) - + def on_prove_node(self, action, parameter: GLib.Variant): + node_id = parameter.get_string() + if self.library: + node = [n for n in self.library.development_graph().nodes() if str(n.id()) == node_id][0] + + node.prove(node.theory().get_prover_by_name("Pellet")) + + self.ui_graph.render() + else: + print(f'Action: prove node {node_id}. But no library is loaded!') + + def on_show_node_info(self, action, parameter: GLib.Variant): + node_id = parameter.get_string() + if self.library: + node = [n for n in self.library.development_graph().nodes() if str(n.id()) == node_id][0] + + info_dialog = NodeInfoDialog(self, node) + info_dialog.run() + else: + print(f'Action: Show info for node {node_id}. But no library is loaded!') + + def on_show_edge_info(self, action, parameter: GLib.Variant): + origin_id = parameter.get_child_value(0).get_child_value(0).get_string() + target_id = parameter.get_child_value(1).get_child_value(0).get_string() + if self.library: + edge = [e for e in self.library.development_graph().edges() if str(e.origin()) == origin_id and str(e.target()) == target_id][0] + + info_dialog = EdgeInfoDialog(self, edge) + info_dialog.run() + else: + print(f'Action: Show info for edge {origin_id}->{target_id}. But no library is loaded!') + + def on_toggle_show_names(self, action: Gio.SimpleAction, target: GLib.Variant): + action.set_state(target) + state = target.get_boolean() + + if state: + self.ui_graph.show_internal_node_names() + else: + self.ui_graph.hide_internal_node_names() + + def on_toggle_show_nodes(self, action: Gio.SimpleAction, target: GLib.Variant): + action.set_state(target) + state = target.get_boolean() + + if state: + self.ui_graph.show_unnamed_nodes_without_open_proofs() + else: + self.ui_graph.hide_unnamed_nodes_without_open_proofs() + + def on_toggle_show_edges(self, action: Gio.SimpleAction, target: GLib.Variant): + action.set_state(target) + state = target.get_boolean() + + if state: + self.ui_graph.show_newly_added_proven_edges() + else: + self.ui_graph.hide_newly_added_proven_edges() + + def on_automatic(self, action: Gio.SimpleAction, target): + self.library.automatic() + self.ui_graph.render() + + def on_global_subsume(self, action: Gio.SimpleAction, target): + self.library.global_subsume() + self.ui_graph.render() + + def on_global_decomposition(self, action: Gio.SimpleAction, target): + self.library.global_decomposition() + self.ui_graph.render() + + def on_local_inference(self, action: Gio.SimpleAction, target): + self.library.local_inference() + self.ui_graph.render() + + def on_local_decomposition(self, action: Gio.SimpleAction, target): + self.library.local_decomposition() + self.ui_graph.render() + + def on_composition_prove_edges(self, action: Gio.SimpleAction, target): + self.library.composition_prove_edges() + self.ui_graph.render() + + def on_conservativity(self, action: Gio.SimpleAction, target): + self.library.conservativity() + self.ui_graph.render() + + def on_automatic_hide_theorem_shift(self, action: Gio.SimpleAction, target): + self.library.automatic_hide_theorem_shift() + self.ui_graph.render() + + def on_theorem_hide_shift(self, action: Gio.SimpleAction, target): + self.library.theorem_hide_shift() + self.ui_graph.render() + + def on_compute_colimit(self, action: Gio.SimpleAction, target): + self.library.compute_colimit() + self.ui_graph.render() + + def on_normal_form(self, action: Gio.SimpleAction, target): + self.library.normal_form() + self.ui_graph.render() + + def on_triangle_cons(self, action: Gio.SimpleAction, target): + self.library.triangle_cons() + self.ui_graph.render() + + def on_freeness(self, action: Gio.SimpleAction, target): + self.library.freeness() + self.ui_graph.render() + + def on_lib_flat_imports(self, action: Gio.SimpleAction, target): + self.library.lib_flat_imports() + self.ui_graph.render() + + def on_lib_flat_d_unions(self, action: Gio.SimpleAction, target): + self.library.lib_flat_d_unions() + self.ui_graph.render() + + def on_lib_flat_renamings(self, action: Gio.SimpleAction, target): + self.library.lib_flat_renamings() + self.ui_graph.render() + + def on_lib_flat_hiding(self, action: Gio.SimpleAction, target): + self.library.lib_flat_hiding() + self.ui_graph.render() + + def on_lib_flat_heterogen(self, action: Gio.SimpleAction, target): + self.library.lib_flat_heterogen() + self.ui_graph.render() + + def on_qualify_lib_env(self, action: Gio.SimpleAction, target): + self.library.qualify_lib_env() + self.ui_graph.render() From 6de3f511175e62e92fd0f5ea1fb4953a20a78827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Thu, 6 Jul 2023 10:10:47 +0200 Subject: [PATCH 17/69] Replaced `Reason` datatype for GoalStatus with a plain list of strings --- Common/GtkGoal.hs | 4 ++-- Logic/Prover.hs | 14 ++++---------- Proofs/BatchProcessing.hs | 4 ++-- SoftFOL/MathServMapping.hs | 2 +- SoftFOL/ProveMetis.hs | 4 ++-- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/Common/GtkGoal.hs b/Common/GtkGoal.hs index 5d4b840817..216ff0ad58 100644 --- a/Common/GtkGoal.hs +++ b/Common/GtkGoal.hs @@ -88,8 +88,8 @@ proofStatusToGStatus p = case goalStatus p of Proved False -> GInconsistent Proved True -> GProved Disproved -> GDisproved - Open (Reason s) -> - if any (isInfixOf "timeout" . map toLower) s then GTimeout else GOpen + Open reason -> + if any (isInfixOf "timeout" . map toLower) reason then GTimeout else GOpen -- | Converts a BasicProof into a GStatus basicProofToGStatus :: BasicProof -> GStatus diff --git a/Logic/Prover.hs b/Logic/Prover.hs index a319d450f6..ae6ad3be10 100644 --- a/Logic/Prover.hs +++ b/Logic/Prover.hs @@ -150,24 +150,18 @@ data Theory sign sen proof_tree = data TacticScript = TacticScript String deriving (Eq, Ord, Show, Typeable) -- | failure reason -data Reason = Reason [String] deriving Typeable - -instance Ord Reason where - compare _ _ = EQ - -instance Eq Reason where - a == b = compare a b == EQ +type Reason = [String] -- | enumeration type representing the status of a goal data GoalStatus = - Open Reason -- ^ failure reason + Open { goalStatusOpenReason :: Reason } -- ^ failure reason | Disproved | Proved Bool -- ^ True means consistent; False inconsistent deriving (Eq, Ord, Typeable) instance Show GoalStatus where show gs = case gs of - Open (Reason l) -> unlines $ "Open" : l + Open reason -> unlines $ "Open" : reason Disproved -> "Disproved" Proved c -> "Proved" ++ if c then "" else "(inconsistent)" @@ -177,7 +171,7 @@ isOpenGoal gs = case gs of _ -> False openGoalStatus :: GoalStatus -openGoalStatus = Open $ Reason [] +openGoalStatus = Open [] -- | data type representing the proof status for a goal data ProofStatus proof_tree = ProofStatus diff --git a/Proofs/BatchProcessing.hs b/Proofs/BatchProcessing.hs index 4bff11c0a0..4c70a541de 100644 --- a/Proofs/BatchProcessing.hs +++ b/Proofs/BatchProcessing.hs @@ -221,8 +221,8 @@ genericProveBatch useStOpt tLimit extraOptions inclProvedThs saveProblem_batch let res0 = proofStatus res_cfg res = res0 { proofLines = resultOutput res_cfg, goalStatus = case goalStatus res0 of - Open (Reason l) | err == ATPTLimitExceeded -> - Open (Reason $ "Timeout" : l) + Open reason | err == ATPTLimitExceeded -> + Open ("Timeout" : reason) r -> r } pst' = addToLP g res pst goalsProcessedSoFar' = goalsProcessedSoFar + 1 diff --git a/SoftFOL/MathServMapping.hs b/SoftFOL/MathServMapping.hs index 766fca836a..768f261c76 100644 --- a/SoftFOL/MathServMapping.hs +++ b/SoftFOL/MathServMapping.hs @@ -123,7 +123,7 @@ mapToGoalStatus :: MWStatus -- ^ goal status mapToGoalStatus stat = case foAtpStatus stat of Solved Theorem -> Proved True Solved CounterSatisfiable -> Disproved - s -> Open $ Reason [show s] + s -> Open [show s] {- | Gets the prover name from MathServResponse and extracts the name only diff --git a/SoftFOL/ProveMetis.hs b/SoftFOL/ProveMetis.hs index db30bb2b6c..637e8530f8 100644 --- a/SoftFOL/ProveMetis.hs +++ b/SoftFOL/ProveMetis.hs @@ -153,9 +153,9 @@ runMetis sps cfg saveTPTP thName nGoal = do getGoalStatus :: String -> GoalStatus getGoalStatus l = let ll = lines l in case mapMaybe (stripPrefix "SZS status") ll of - [] -> Open (Reason ll) + [] -> Open ll z@(s : _) -> case words s of w : _ | szsProved w -> Proved True | szsDisproved w -> Disproved - _ -> Open (Reason z) + _ -> Open z From c99ae49c4ad4337b51aa48ad983995b96b7293bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Thu, 6 Jul 2023 10:11:40 +0200 Subject: [PATCH 18/69] Improved prove window Added prove details window --- HetsAPI/DataTypes.hs | 20 +- HetsAPI/InfoCommands.hs | 81 +++- HetsAPI/Internal.hs | 25 +- HetsAPI/ProveCommands.hs | 3 + HetsAPI/Python.hs | 112 +++-- python/Dockerfile | 12 + python/hets/BasicProof.py | 43 ++ python/hets/Comorphism.py | 3 + python/hets/DevGraphEdge.py | 10 +- python/hets/DevGraphNode.py | 6 +- python/hets/DevelopmentGraph.py | 9 +- python/hets/Library.py | 50 +-- python/hets/ProofDetails.py | 94 +++++ python/hets/ProofStatus.py | 35 -- python/hets/Prover.py | 3 + python/hets/Sentence.py | 61 ++- python/hets/Theory.py | 109 ++++- python/hets/__init__.py | 2 +- python/hets/haskell/Internal.py | 6 +- python/hets/haskell/Internal.pyi | 11 + python/hets/haskell/Prelude.py | 2 +- python/hets/haskell/Python.py | 6 +- python/hets/haskell/Python.pyi | 56 ++- python/hets/maybe.py | 12 + python/hetsgui/formatting/Colors.py | 40 ++ python/hetsgui/hets.png | Bin 0 -> 13630 bytes python/hetsgui/hetsgui.py | 39 +- python/hetsgui/widgets/CellRendererLink.py | 15 + python/hetsgui/widgets/GraphvizGraphWidget.py | 106 +++-- python/hetsgui/widgets/NodeInfoDialog.py | 1 + python/hetsgui/widgets/ProveDialog.py | 11 - python/hetsgui/windows/MainWindow.py | 24 +- python/hetsgui/windows/ProofDetailsWindow.py | 150 +++++++ python/hetsgui/windows/ProveWindow.py | 382 ++++++++++++++++++ python/hetsgui/windows/StartUpWindow.py | 42 ++ 35 files changed, 1348 insertions(+), 233 deletions(-) create mode 100644 python/Dockerfile create mode 100644 python/hets/BasicProof.py create mode 100644 python/hets/ProofDetails.py delete mode 100644 python/hets/ProofStatus.py create mode 100644 python/hets/maybe.py create mode 100644 python/hetsgui/formatting/Colors.py create mode 100644 python/hetsgui/hets.png create mode 100644 python/hetsgui/widgets/CellRendererLink.py delete mode 100644 python/hetsgui/widgets/ProveDialog.py create mode 100644 python/hetsgui/windows/ProofDetailsWindow.py create mode 100644 python/hetsgui/windows/ProveWindow.py create mode 100644 python/hetsgui/windows/StartUpWindow.py diff --git a/HetsAPI/DataTypes.hs b/HetsAPI/DataTypes.hs index 3c47425f86..48f3d6dfd1 100644 --- a/HetsAPI/DataTypes.hs +++ b/HetsAPI/DataTypes.hs @@ -5,24 +5,36 @@ License : GPLv2 or higher, see LICENSE.txt -} module HetsAPI.DataTypes ( Sentence - , SentenceByName + , TheorySentence + , TheorySentenceByName , SignatureJSON , SymbolJSON , GenericTransportType , TheoryPointer) where -import qualified Common.OrderedMap as OMap + import Data.ByteString.Lazy(ByteString) +import Data.Graph.Inductive.Graph (LNode) +import Common.AS_Annotation(SenAttr(..)) import Common.LibName (LibName) +import qualified Common.OrderedMap as OMap + +import Logic.Comorphism (AnyComorphism(..)) +import Logic.Prover(ThmStatus(..)) + import Static.DevGraph (LibEnv, DGraph, DGNodeLab) +import Static.GTheory (BasicProof(..)) + -import Data.Graph.Inductive.Graph (LNode) -- | In the API if it is not possible to export the generic type, they are converted to JSON. type GenericTransportType = ByteString + type Sentence = GenericTransportType -type SentenceByName = OMap.OMap String Sentence + +type TheorySentence = SenAttr Sentence (ThmStatus (AnyComorphism, BasicProof)) +type TheorySentenceByName = OMap.OMap String TheorySentence type SignatureJSON = GenericTransportType type SymbolJSON = GenericTransportType diff --git a/HetsAPI/InfoCommands.hs b/HetsAPI/InfoCommands.hs index ae7195e66a..3850d4ebaf 100644 --- a/HetsAPI/InfoCommands.hs +++ b/HetsAPI/InfoCommands.hs @@ -20,25 +20,34 @@ module HetsAPI.InfoCommands ( , prettySentence , prettySentenceOfTheory , getDevelopmentGraphNodeType + , theorySentenceIsAxiom + , theorySentenceWasTheorem + , theorySentenceIsDefined + , theorySentenceGetTheoremStatus + , theorySentencePriority + , theorySentenceContent + , theorySentenceBestProof ) where -import HetsAPI.DataTypes (TheoryPointer) +import Data.Aeson (encode, eitherDecode, Result(..), ToJSON) +import Data.Dynamic +import Data.Graph.Inductive (LNode, LEdge) +import Common.AS_Annotation (SenAttr (..)) +import Common.DocUtils (pretty) import Common.LibName (LibName) -import Static.DevGraph (LibEnv, lookupDGraph, labNodesDG, labEdgesDG, DGraph, DGNodeLab, DGLinkLab, getDGNodeName, getRealDGNodeType) -import Static.DgUtils (DGNodeType) -import Data.Graph.Inductive (LNode, LEdge) -import Static.GTheory (G_theory (..), isProvenSenStatus) import qualified Common.OrderedMap as OMap -import Common.AS_Annotation (sentence, SenAttr (isAxiom)) -import Data.Aeson (encode, eitherDecode, Result(..)) + import Logic.Logic(Logic) -import Common.DocUtils (pretty) +import Logic.Prover(ThmStatus(..)) +import Logic.Comorphism(AnyComorphism(..)) +import HetsAPI.DataTypes (TheoryPointer, TheorySentenceByName, TheorySentence, Sentence) -import Data.Dynamic +import Static.DevGraph (LibEnv, lookupDGraph, labNodesDG, labEdgesDG, DGraph, DGNodeLab, DGLinkLab, getDGNodeName, getRealDGNodeType) +import Static.DgUtils (DGNodeType) +import Static.GTheory (G_theory (..), isProvenSenStatus, BasicProof(..)) -import HetsAPI.DataTypes (SentenceByName, Sentence) -- | @getDevelopmentGraphByName name env@ returns the development graph for the @@ -64,24 +73,51 @@ getEdgesFromDevelopmentGraph = fmap (\(_, _, x) -> x) . labEdgesDG -- getGlobalAnnotations :: DGraph -> GlobalAnnos -getAllSentences :: G_theory -> SentenceByName -getAllSentences (G_theory _ _ _ _ sens _) = OMap.map (encode . sentence) sens +theorySentenceIsAxiom :: SenAttr a (ThmStatus tStatus) -> Bool +theorySentenceIsAxiom = isAxiom -getAllAxioms :: G_theory -> SentenceByName -getAllAxioms (G_theory _ _ _ _ sens _) = OMap.map (encode . sentence) +theorySentenceWasTheorem :: SenAttr a (ThmStatus tStatus) -> Bool +theorySentenceWasTheorem = wasTheorem + +theorySentenceIsDefined :: SenAttr a (ThmStatus tStatus) -> Bool +theorySentenceIsDefined = isDef + +theorySentenceGetTheoremStatus :: SenAttr a (ThmStatus tStatus) -> [tStatus] +theorySentenceGetTheoremStatus = getThmStatus . senAttr + +theorySentencePriority :: SenAttr a (ThmStatus tStatus) -> Maybe String +theorySentencePriority = priority + +theorySentenceContent :: SenAttr a (ThmStatus tStatus) -> a +theorySentenceContent = sentence + +theorySentenceBestProof :: Ord proof => SenAttr a (ThmStatus (c, proof)) -> Maybe proof +theorySentenceBestProof sentence = + if null ts then Nothing else Just $ maximum $ map snd ts + where ts = theorySentenceGetTheoremStatus sentence + + +toTheorySentence :: ToJSON sentence => SenAttr sentence (ThmStatus (AnyComorphism, BasicProof)) -> TheorySentence +toTheorySentence sen = sen { sentence = encode . sentence $ sen } + +getAllSentences :: G_theory -> TheorySentenceByName +getAllSentences (G_theory _ _ _ _ sens _) = OMap.map toTheorySentence sens + +getAllAxioms :: G_theory -> TheorySentenceByName +getAllAxioms (G_theory _ _ _ _ sens _) = OMap.map toTheorySentence $ OMap.filter isAxiom sens -getAllGoals :: G_theory -> SentenceByName -getAllGoals (G_theory _ _ _ _ sens _) = OMap.map (encode . sentence) +getAllGoals :: G_theory -> TheorySentenceByName +getAllGoals (G_theory _ _ _ _ sens _) = OMap.map toTheorySentence $ OMap.filter (not . isAxiom) sens -getProvenGoals :: G_theory -> SentenceByName -getProvenGoals (G_theory _ _ _ _ sens _) = OMap.map (encode . sentence) +getProvenGoals :: G_theory -> TheorySentenceByName +getProvenGoals (G_theory _ _ _ _ sens _) = OMap.map toTheorySentence $ OMap.filter (\sen -> not (isAxiom sen) && isProvenSenStatus sen) sens -getUnprovenGoals :: G_theory -> SentenceByName -getUnprovenGoals (G_theory _ _ _ _ sens _) = OMap.map (encode . sentence) - $ OMap.filter (\sen -> isAxiom sen && isProvenSenStatus sen) sens +getUnprovenGoals :: G_theory -> TheorySentenceByName +getUnprovenGoals (G_theory _ _ _ _ sens _) = OMap.map toTheorySentence + $ OMap.filter (\sen -> not (isAxiom sen) && not (isProvenSenStatus sen)) sens prettySentence' :: Logic lid sublogics basic_spec sentence symb_items symb_map_items sign morphism symbol raw_symbol proof_tree => sentence -> lid -> Sentence -> String @@ -97,4 +133,5 @@ prettySentenceOfTheory :: G_theory -> Sentence -> String prettySentenceOfTheory (G_theory lid _ _ _ _ _) = prettySentence lid getDevelopmentGraphNodeType :: DGNodeLab -> DGNodeType -getDevelopmentGraphNodeType = getRealDGNodeType \ No newline at end of file +getDevelopmentGraphNodeType = getRealDGNodeType + diff --git a/HetsAPI/Internal.hs b/HetsAPI/Internal.hs index a040b3dbed..bf39a00635 100644 --- a/HetsAPI/Internal.hs +++ b/HetsAPI/Internal.hs @@ -16,10 +16,11 @@ module HetsAPI.Internal ( , developmentGraphNodeLabelName , developmentGraphEdgeLabelName , developmentGraphEdgeLabelId - , ProofStatus - , GoalStatus + , ProofStatus(..) + , GoalStatus(..) , TimeOfDay , TacticScript + , tacticScriptContent , ProofState , ConsistencyStatus , consistencyStatusType @@ -73,7 +74,7 @@ import Common.Result (Result, resultToMaybe, Diagnosis) import Driver.Options (HetcatsOpts, defaultHetcatsOpts) import Static.DevGraph (DGraph, DGNodeLab(..), DGLinkLab(..), getNodeConsStatus, getNodeCons, getDGNodeName, globalAnnos, LibEnv, isInternalNode, getRealDGLinkType) import Static.DgUtils (ConsStatus(..), getConsOfStatus, isProvenConsStatusLink, NodeName, DGNodeType(..), DGEdgeType(..), DGEdgeTypeModInc(..), Scope(..), ThmTypes(..), FreeOrCofree(..), getEdgeNum) -import Logic.Prover (ProofStatus, GoalStatus, TacticScript) +import Logic.Prover (ProofStatus(..), GoalStatus(..), TacticScript(..)) import Proofs.AbstractState (ProofState) import Proofs.ConsistencyCheck (ConsistencyStatus(..), SType) @@ -118,22 +119,25 @@ nodeTypeIsProvenConsistent = isProvenCons nodeTypeIsReference :: DGNodeType -> Bool nodeTypeIsReference = isRefType +tacticScriptContent :: TacticScript -> String +tacticScriptContent (TacticScript c) = c + data DevGraphLinkKind = LinkKindGlobal | LinkKindLocal | LinkKindHiding | LinkKindFree | LinkKindCofree data DevGraphLinkType = DefinitionLink { linkTypeKind :: DevGraphLinkKind, linkTypeIsInclusion :: Bool, linkTypeIsHomogenoeous :: Bool } - | TheoremLink { linkTypeKind :: DevGraphLinkKind, linkTypeIsInclusion :: Bool, linkTypeIsHomogenoeous :: Bool, linkTypeIsProven :: Bool, linkTypeIsConservativ :: Bool } + | TheoremLink { linkTypeKind :: DevGraphLinkKind, linkTypeIsInclusion :: Bool, linkTypeIsHomogenoeous :: Bool, linkTypeIsProven :: Bool, linkTypeIsConservativ :: Bool, linkTypeIsPending :: Bool } getDevGraphLinkType :: DGLinkLab -> DevGraphLinkType getDevGraphLinkType l = case edgeTypeModInc (getRealDGLinkType l) of GlobalDef -> DefinitionLink LinkKindGlobal inclusion True - HetDef -> DefinitionLink LinkKindGlobal inclusion False -- TODO: Correct? + HetDef -> DefinitionLink LinkKindGlobal inclusion False HidingDef -> DefinitionLink LinkKindHiding inclusion True LocalDef -> DefinitionLink LinkKindLocal inclusion True FreeOrCofreeDef freeOrCofree -> DefinitionLink (case freeOrCofree of Free -> LinkKindFree Cofree -> LinkKindCofree) inclusion True - ThmType {thmEdgeType=thmType, isProvenEdge=proven, isConservativ=conservativ, isPending=pending} -> TheoremLink kind inclusion homogeneous proven conservativ + ThmType {thmEdgeType=thmType, isProvenEdge=proven, isConservativ=conservativ, isPending=pending} -> TheoremLink kind inclusion homogeneous proven conservativ pending where (kind, homogeneous) = case thmType of HidingThm -> (LinkKindHiding, True) @@ -145,3 +149,12 @@ getDevGraphLinkType l = case edgeTypeModInc (getRealDGLinkType l) of Local -> (LinkKindLocal, isHomogeneous) where inclusion = isInc . getRealDGLinkType $ l + + + + + + + + + diff --git a/HetsAPI/ProveCommands.hs b/HetsAPI/ProveCommands.hs index 281e5c6dd6..515f6f3ae5 100644 --- a/HetsAPI/ProveCommands.hs +++ b/HetsAPI/ProveCommands.hs @@ -23,6 +23,8 @@ module HetsAPI.ProveCommands ( , ConsCheckingOptions(..) , defaultConsCheckingOptions , recomputeNode + + , genericProveBatch ) where import HetsAPI.DataTypes @@ -47,6 +49,7 @@ import Logic.Prover (ProofStatus, ProverKind (..)) import Proofs.AbstractState (G_prover, ProofState, G_proof_tree, autoProofAtNode, G_cons_checker (..), getProverName, getConsCheckers, getCcName) import qualified Proofs.AbstractState as PAS import Proofs.ConsistencyCheck (ConsistencyStatus, SType(..), consistencyCheck, sType) +import Proofs.BatchProcessing (genericProveBatch) import Static.ComputeTheory(updateLabelTheory, recomputeNodeLabel) import Static.DevGraph (LibEnv, DGraph, DGNodeLab, ProofHistory, DGChange(..), dgn_theory, markNodeInconsistent, markNodeConsistent) diff --git a/HetsAPI/Python.hs b/HetsAPI/Python.hs index 22c2caa588..5b302fc50b 100644 --- a/HetsAPI/Python.hs +++ b/HetsAPI/Python.hs @@ -13,8 +13,12 @@ module HetsAPI.Python ( , PyConsChecker , PyConsCheckingOptions(..) , PyGMorphism + , PyBasicProof(..) + , PyTheorySentence(..) + , PyTheorySentenceByName , mkPyProofOptions -- Wrapped with Py* + , theoryOfNode , getUsableProvers , translateTheory @@ -40,6 +44,7 @@ module HetsAPI.Python ( , comorphismOfGMorphism , signatureOfGMorphism , signatureOfTheory + , pyProofStatusOfPyBasicProof , logicNameOfTheory , logicDescriptionOfTheory @@ -53,10 +58,12 @@ module HetsAPI.Python ( , codomainOfGMorphism , isGMorphismInclusion , gMorphismToTransportType + , theorySentenceBestProof -- Unchanged re-export from Hets.ProveCommands , HP.checkConservativityNode , HP.recomputeNode + , HP.genericProveBatch -- Unchanged re-export from Hets.Commands , HC.automatic @@ -87,6 +94,12 @@ module HetsAPI.Python ( , HI.getEdgesFromDevelopmentGraph , HI.getLEdgesFromDevelopmentGraph , HI.getDevelopmentGraphNodeType + , HI.theorySentenceIsAxiom + , HI.theorySentenceWasTheorem + , HI.theorySentenceIsDefined + , HI.theorySentenceGetTheoremStatus + , HI.theorySentencePriority + , HI.theorySentenceContent , fstOf3 , sndOf3 @@ -95,7 +108,8 @@ module HetsAPI.Python ( -- Datatypes , HDT.Sentence - , HDT.SentenceByName + , HDT.TheorySentence + , HDT.TheorySentenceByName , HDT.TheoryPointer , HDT.SignatureJSON , HDT.SymbolJSON @@ -108,10 +122,13 @@ import qualified HetsAPI.Commands as HC import qualified HetsAPI.ProveCommands as HP import qualified HetsAPI.InfoCommands as HI import qualified HetsAPI.DataTypes as HDT +import HetsAPI.DataTypes (TheorySentenceByName, TheorySentence, Sentence) +import Common.AS_Annotation (SenAttr(..)) import Common.DocUtils (pretty) import Common.ExtSign (ExtSign(..)) import Common.LibName (LibName) +import qualified Common.OrderedMap as OMap import Common.Result (Result) import Common.ResultT (ResultT (runResultT)) @@ -122,19 +139,22 @@ import Data.Graph.Inductive (LNode, lab) import qualified Data.Map as Map import qualified Data.Set as Set +import Common.XPath (BasicType(String)) + import Logic.Comorphism (AnyComorphism(..), targetLogic, sourceLogic) import Logic.Grothendieck (GMorphism(..)) import Logic.Logic (sym_of, language_name, description, dom, cod, isInclusion, symmap_of) -import Logic.Prover (ProofStatus(..)) +import Logic.Prover (ProofStatus(..), ThmStatus(..)) + import Static.DevGraph (DGNodeLab (dgn_theory), DGLinkLab(dgl_morphism), LibEnv, DGraph, dgBody) import qualified Static.DevGraph (DGNodeLab(globalTheory)) import qualified Static.GTheory as GT -import Proofs.ConsistencyCheck (ConsistencyStatus) +import Static.GTheory (G_theory, BasicProof(..)) + import qualified Proofs.AbstractState -import Proofs.AbstractState (G_prover, ProofState, G_proof_tree, G_cons_checker) -import HetsAPI.DataTypes (SentenceByName, Sentence) -import Common.XPath (BasicType(String)) -import Static.GTheory (G_theory) +import Proofs.AbstractState (G_prover, ProofState, G_proof_tree(..), G_cons_checker) +import Proofs.ConsistencyCheck (ConsistencyStatus) + fstOf3 :: (a,b,c) -> a fstOf3 (x, _, _) = x @@ -152,7 +172,46 @@ data PyProver = PyProver G_prover data PyConsChecker = PyConsChecker G_cons_checker data PyComorphism = PyComorphism AnyComorphism data PyProofTree = PyProofTree G_proof_tree + +toPyProofTree :: G_proof_tree -> PyProofTree +toPyProofTree = PyProofTree + data PyGMorphism = PyGMorphism GMorphism +data PyBasicProof = PyBasicProof BasicProof + | PyBasicProofGuessed + | PyBasicProofConjectured + | PyBasicProofHandwritten + +instance Eq PyBasicProof where + a == b = fromPyBasicProof a == fromPyBasicProof b + +instance Ord PyBasicProof where + compare a b = compare (fromPyBasicProof a) (fromPyBasicProof b) + +fromPyBasicProof :: PyBasicProof -> BasicProof +fromPyBasicProof pb = case pb of + PyBasicProof b -> b + PyBasicProofGuessed -> Guessed + PyBasicProofConjectured -> Conjectured + PyBasicProofHandwritten -> Handwritten + +toPyBasicProof :: BasicProof -> PyBasicProof +toPyBasicProof b = case b of + BasicProof _ _ -> PyBasicProof b + Guessed -> PyBasicProofGuessed + Conjectured -> PyBasicProofConjectured + Handwritten -> PyBasicProofHandwritten + +type PyTheorySentence = SenAttr Sentence (ThmStatus (PyComorphism, PyBasicProof)) +type PyTheorySentenceByName = OMap.OMap String PyTheorySentence + +toPyTheorySentence :: TheorySentence -> PyTheorySentence +toPyTheorySentence sen = sen {senAttr = ThmStatus (fmap (\(c, p) -> (PyComorphism c, toPyBasicProof p)) $ getThmStatus . senAttr $ sen)} + +pyProofStatusOfPyBasicProof :: PyBasicProof -> Maybe (ProofStatus PyProofTree) +pyProofStatusOfPyBasicProof b = case b of + PyBasicProof (BasicProof lid status) -> Just . toPyProofStatus $ status {proofTree = G_proof_tree lid $ proofTree status } + _ -> Nothing data PyProofOptions = PyProofOptions { proofOptsProver :: Maybe PyProver -- ^ The prover to use. If not set, it is selected automatically @@ -225,12 +284,11 @@ instance Show PyComorphism where show (PyComorphism c) = "PyComorphism "++ show c instance Show PyProofTree where - show (PyProofTree t) = "PyProofTree " ++ show t + show (PyProofTree t) = show t proverName :: PyProver -> String proverName (PyProver p) = Proofs.AbstractState.getProverName p - comorphismName :: PyComorphism -> String comorphismName (PyComorphism c) = show c @@ -260,16 +318,7 @@ getUsableProvers (PyTheory th) = do return $ fmap toPy provers toPyProofStatus :: ProofStatus G_proof_tree -> ProofStatus PyProofTree -toPyProofStatus status = ProofStatus { - goalName = goalName status - , goalStatus = goalStatus status - , usedAxioms = usedAxioms status - , usedProver = usedProver status - , proofTree = PyProofTree (proofTree status) - , usedTime = usedTime status - , tacticScript = tacticScript status - , proofLines = proofLines status - } +toPyProofStatus status = status { proofTree = toPyProofTree (proofTree status) } proveNode :: PyTheory -> PyProofOptions -> IO (Result (PyTheory, [ProofStatus PyProofTree])) proveNode (PyTheory theory) opts = @@ -296,20 +345,24 @@ checkConsistency ptr = HP.checkConsistency ptr . toConsCheckingOptions checkConsistencyAndRecord :: HDT.TheoryPointer -> PyConsCheckingOptions -> IO (ConsistencyStatus, LibEnv) checkConsistencyAndRecord ptr = HP.checkConsistencyAndRecord ptr . toConsCheckingOptions -getAllSentences :: PyTheory -> SentenceByName -getAllSentences (PyTheory theory) = HI.getAllSentences theory -getAllAxioms :: PyTheory -> SentenceByName -getAllAxioms (PyTheory theory) = HI.getAllAxioms theory +getAllSentences :: PyTheory -> PyTheorySentenceByName +getAllSentences (PyTheory theory) = OMap.map toPyTheorySentence $ HI.getAllSentences theory -getAllGoals :: PyTheory -> SentenceByName -getAllGoals (PyTheory theory) = HI.getAllGoals theory +getAllAxioms :: PyTheory -> PyTheorySentenceByName +getAllAxioms (PyTheory theory) = OMap.map toPyTheorySentence $ HI.getAllAxioms theory -getProvenGoals :: PyTheory -> SentenceByName -getProvenGoals (PyTheory theory) = HI.getProvenGoals theory +getAllGoals :: PyTheory -> PyTheorySentenceByName +getAllGoals (PyTheory theory) = OMap.map toPyTheorySentence $ HI.getAllGoals theory -getUnprovenGoals :: PyTheory -> SentenceByName -getUnprovenGoals (PyTheory theory) = HI.getUnprovenGoals theory +getProvenGoals :: PyTheory -> PyTheorySentenceByName +getProvenGoals (PyTheory theory) = OMap.map toPyTheorySentence $ HI.getProvenGoals theory + +getUnprovenGoals :: PyTheory -> PyTheorySentenceByName +getUnprovenGoals (PyTheory theory) = OMap.map toPyTheorySentence $ HI.getUnprovenGoals theory + +theorySentenceBestProof :: PyTheorySentence -> Maybe PyBasicProof +theorySentenceBestProof = HI.theorySentenceBestProof prettySentence :: PyTheory -> Sentence -> String prettySentence (PyTheory theory) = HI.prettySentenceOfTheory theory @@ -369,3 +422,4 @@ gMorphismToTransportType (PyGMorphism (GMorphism {gMorphismComor = cid, gMorphis -- symbolMapOfGMorphism :: PyGMorphism -> Map.Map HDT.SymbolJSON HDT.SymbolJSON -- symbolMapOfGMorphism (PyGMorphism (GMorphism {gMorphismMor = morphism})) = Map.map encode $ Map.mapKeys encode $ symmap_of (targetLogic morphism) morphism + diff --git a/python/Dockerfile b/python/Dockerfile new file mode 100644 index 0000000000..0d697a016b --- /dev/null +++ b/python/Dockerfile @@ -0,0 +1,12 @@ +FROM hets-api + +RUN apt-get update && apt-get upgrade -y +RUN apt-get install curl + +RUN curl -o /tmp/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh +RUN bash /tmp/miniconda.sh -b -p /opt/miniconda/ + +ENV PATH="${PATH}:/opt/miniconda/bin" + +COPY hetsgui/environment.yml /tmp/environment.yml +RUN conda env create -f /tmp/environment.yml --name app diff --git a/python/hets/BasicProof.py b/python/hets/BasicProof.py new file mode 100644 index 0000000000..9e6d3ea0fc --- /dev/null +++ b/python/hets/BasicProof.py @@ -0,0 +1,43 @@ +from typing import Optional + +from .ProofDetails import ProofDetails, ProofKind +from .haskell import PyBasicProof, PyBasicProofGuessed, PyBasicProofConjectured, PyBasicProofHandwritten, \ + pyProofStatusOfPyBasicProof, Just, fromJust + + +class BasicProof: + def __init__(self, hs_basic_proof: PyBasicProof): + self._hs_basic_proof = hs_basic_proof + + def is_guessed(self) -> bool: + return isinstance(self._hs_basic_proof, PyBasicProofGuessed) + + def is_conjectured(self) -> bool: + return isinstance(self._hs_basic_proof, PyBasicProofConjectured) + + def is_handwritten(self) -> bool: + return isinstance(self._hs_basic_proof, PyBasicProofHandwritten) + + def details(self) -> Optional[ProofDetails]: + maybe = pyProofStatusOfPyBasicProof(self._hs_basic_proof) + if isinstance(maybe, Just): + return ProofDetails(fromJust(maybe), self._kind()) + + return None + + def _kind(self) -> Optional[ProofKind]: + if self.is_guessed(): + return ProofKind.GUESSED + elif self.is_conjectured(): + return ProofKind.CONJECTURED + elif self.is_handwritten(): + return ProofKind.HANDWRITTEN + else: + return None + + def kind(self) -> ProofKind: + details = self.details() + if details is None: + return self._kind() + else: + return details.kind() diff --git a/python/hets/Comorphism.py b/python/hets/Comorphism.py index 7f3d4e7f29..139f52e7cc 100644 --- a/python/hets/Comorphism.py +++ b/python/hets/Comorphism.py @@ -19,3 +19,6 @@ def __eq__(self, other): def __hash__(self): return self.name().__hash__() + + def path_length(self) -> int: + return len(self.name().split(";")) diff --git a/python/hets/DevGraphEdge.py b/python/hets/DevGraphEdge.py index 68ea1f2ce2..a458cdf9df 100644 --- a/python/hets/DevGraphEdge.py +++ b/python/hets/DevGraphEdge.py @@ -73,6 +73,9 @@ def kind(self) -> EdgeKind: def is_homogeneous(self) -> bool: return self._type().linkTypeIsHomogenoeous() + def is_inclusion(self) -> bool: + return self._type().linkTypeIsInclusion() + def info(self) -> str: return showDoc(self._label(), "") @@ -85,8 +88,11 @@ class TheoremDevGraphEdge(DevGraphEdge): def _type(self) -> TheoremLink: return super()._type() - def is_proven(self): + def is_proven(self) -> bool: return self._type().linkTypeIsProven() - def is_conservativ(self): + def is_conservativ(self) -> bool: return self._type().linkTypeIsConservativ() + + def is_pending(self) -> bool: + return self._type().linkTypeIsPending() diff --git a/python/hets/DevGraphNode.py b/python/hets/DevGraphNode.py index 91aa0e9f45..91799cf348 100644 --- a/python/hets/DevGraphNode.py +++ b/python/hets/DevGraphNode.py @@ -10,7 +10,7 @@ from .Comorphism import Comorphism from .result import result_or_raise from .ConsistencyChecker import ConsistencyChecker -from .ProofStatus import ProofStatus +from .ProofDetails import ProofDetails from .Prover import Prover from .HsWrapper import HsHierarchyElement from .haskell import snd, theoryOfNode, DGNodeLab, fst, Just, Nothing, PyProver, PyComorphism, defaultProofOptions, \ @@ -63,7 +63,7 @@ def prove(self, goals_to_prove: Optional[List[str]] = None, axioms_to_include: Optional[List[str]] = None, timeout: Optional[int] = None - ) -> List[ProofStatus]: + ) -> List[ProofDetails]: prover_maybe = Just(prover._hs_prover) if prover else Nothing().subst(a=PyProver()) comorphism_maybe = Just(comorphism._hs_comorphism) if comorphism else Nothing().subst(a=PyComorphism()) @@ -86,7 +86,7 @@ def prove(self, self.root().hs_update(new_env) - return goal_statuses + return list(ProofDetails(x) for x in goal_statuses) def check_consistency(self, cons_checker: Optional[ConsistencyChecker] = None, diff --git a/python/hets/DevelopmentGraph.py b/python/hets/DevelopmentGraph.py index 8fe1ab91c8..95262e1cb5 100644 --- a/python/hets/DevelopmentGraph.py +++ b/python/hets/DevelopmentGraph.py @@ -31,7 +31,7 @@ def hs_update(self, new_hs_obj: DGraph): if self._nodes: for node in self._nodes: - hs_node_maybe = getDGNodeById(self._hs_development_graph, node.id()) + hs_node_maybe = getDGNodeById(self._hs_development_graph)(node.id()) if isinstance(hs_node_maybe, Nothing): print(f"Node {node.id} could not be found. Probably, it has been deleted") else: @@ -46,12 +46,9 @@ def nodes(self) -> List[DevGraphNode]: return self._nodes def edges(self) -> List[DevGraphEdge]: - if self._edges is None: - hs_edges = getLEdgesFromDevelopmentGraph(self._hs_development_graph) + hs_edges = getLEdgesFromDevelopmentGraph(self._hs_development_graph) - self._edges = [DefinitionDevGraphEdge(x, self) if isinstance(getDevGraphLinkType(thd(x)), DefinitionLink) else TheoremDevGraphEdge(x, self) for x in hs_edges] - - return self._edges + return [DefinitionDevGraphEdge(x, self) if isinstance(getDevGraphLinkType(thd(x)), DefinitionLink) else TheoremDevGraphEdge(x, self) for x in hs_edges] def global_annotations(self) -> GlobalAnnotations: return GlobalAnnotations(globalAnnotations(self._hs_development_graph)) diff --git a/python/hets/Library.py b/python/hets/Library.py index 86729eabf3..3f0488a5fa 100644 --- a/python/hets/Library.py +++ b/python/hets/Library.py @@ -8,7 +8,7 @@ from .HsWrapper import HsWrapper, HsHierarchyElement from .haskell import defaultHetcatsOpts, loadLibrary as loadHsLibrary, fst, snd, getGraphForLibrary, HetcatsOpts, \ - checkConsistencyAndRecord + checkConsistencyAndRecord, Result, resultToMaybe, Just, fromJust from .DevelopmentGraph import DevelopmentGraph from .result import result_or_raise @@ -93,49 +93,53 @@ def automatic_hide_theorem_shift(self): self.hs_update(new_env) def theorem_hide_shift(self): - new_env = theoremHideShiftHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = theoremHideShiftHs(self._name, self._env) + self.hs_update_result(new_env_r) def compute_colimit(self): - new_env = computeColimitHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = computeColimitHs(self._name, self._env) + self.hs_update_result(new_env_r) def normal_form(self): - new_env = normalFormHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = normalFormHs(self._name, self._env) + self.hs_update_result(new_env_r) def triangle_cons(self): - new_env = triangleConsHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = triangleConsHs(self._name, self._env) + self.hs_update_result(new_env_r) def freeness(self): - new_env = freenessHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = freenessHs(self._name, self._env) + self.hs_update_result(new_env_r) def lib_flat_imports(self): - new_env = libFlatImportsHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = libFlatImportsHs(self._name, self._env) + self.hs_update_result(new_env_r) def lib_flat_d_unions(self): - new_env = libFlatDUnionsHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = libFlatDUnionsHs(self._name, self._env) + self.hs_update_result(new_env_r) def lib_flat_renamings(self): - new_env = libFlatRenamingsHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = libFlatRenamingsHs(self._name, self._env) + self.hs_update_result(new_env_r) def lib_flat_hiding(self): - new_env = libFlatHidingHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = libFlatHidingHs(self._name, self._env) + self.hs_update_result(new_env_r) def lib_flat_heterogen(self): - new_env = libFlatHeterogenHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = libFlatHeterogenHs(self._name, self._env) + self.hs_update_result(new_env_r) def qualify_lib_env(self): - new_env = qualifyLibEnvHs(self._name, self._env) - self.hs_update(new_env) + new_env_r = qualifyLibEnvHs(self._name, self._env) + self.hs_update_result(new_env_r) + def hs_update_result(self, new_env_r: Result): + new_env_m = resultToMaybe(new_env_r) + if isinstance(new_env_m, Just): + self.hs_update(fromJust(new_env_m)) def load_library(path: str, options: HetcatsOpts = defaultHetcatsOpts) -> Library: result = loadHsLibrary(path, options).act() diff --git a/python/hets/ProofDetails.py b/python/hets/ProofDetails.py new file mode 100644 index 0000000000..bec82517c5 --- /dev/null +++ b/python/hets/ProofDetails.py @@ -0,0 +1,94 @@ +""" +Description : Represents `Logic.Prover.ProofStatus` +Copyright : (c) Otto-von-Guericke University of Magdeburg +License : GPLv2 or higher, see LICENSE.txt +""" +from datetime import datetime, timedelta +from enum import Enum + +from .haskell import ProofStatus as ProofStatusHs, GoalStatus, TimeOfDay, tacticScriptContent, Open, Proved, Disproved, show + +from typing import Any, List, Optional + + +class ProofKind(Enum): + UNKNOWN = -1 + OPEN = 1 + PROVEN = 2 + PROVEN_BY_INCONSISTENCY = 3 + DISPROVEN = 4 + TIMED_OUT = 5 + GUESSED = 6 + CONJECTURED = 7 + HANDWRITTEN = 8 + + def to_str(self) -> str: + return { + ProofKind.UNKNOWN: "Unknown", + ProofKind.OPEN: "Open", + ProofKind.PROVEN: "Proven", + ProofKind.PROVEN_BY_INCONSISTENCY: "Proven by inconsistency", + ProofKind.DISPROVEN: "Disproven", + ProofKind.TIMED_OUT: "Timed out", + ProofKind.GUESSED: "Guessed", + ProofKind.CONJECTURED: "Conjectured", + ProofKind.HANDWRITTEN: "Handwritten" + }[self] + + +class ProofDetails: + def __init__(self, hs_proof_status: ProofStatusHs, kind: Optional[ProofKind] = None): + self._hs_proof_status = hs_proof_status + + self._kind = kind + + def goal_name(self) -> str: + return self._hs_proof_status.goalName() + + def goal_status(self) -> GoalStatus: + return self._hs_proof_status.goalStatus() + + def used_axioms(self) -> List[str]: + return list(self._hs_proof_status.usedAxioms()) + + def used_prover(self) -> str: + return self._hs_proof_status.usedProver() + + def used_time(self) -> timedelta: + used_time_str = show(self._hs_proof_status.usedTime()) + print(used_time_str) + if used_time_str.startswith("-"): + # Sometimes the prover returns -1 as time. Return 0 instead. + return timedelta(seconds=-1) + + if "." in used_time_str: + used_time_str = used_time_str.split(".")[0] + + used_time = datetime.strptime(used_time_str, "%H:%M:%S") + + return used_time - datetime.strptime("", "") + + def tactic_script(self) -> str: + return tacticScriptContent(self._hs_proof_status.tacticScript()) + + def proof_tree(self) -> str: + return show(self._hs_proof_status.proofTree()) + + def proof_lines(self) -> List[str]: + return list(self._hs_proof_status.proofLines()) + + def kind(self) -> ProofKind: + if self._kind is not None: + return self._kind + + status = self.goal_status() + + if isinstance(status, Open): + if any("timeout" in reason.lower() for reason in status.goalStatusOpenReason()): + return ProofKind.TIMED_OUT + + return ProofKind.OPEN + if isinstance(status, Disproved): + return ProofKind.DISPROVEN + if isinstance(status, Proved): + return ProofKind.PROVEN diff --git a/python/hets/ProofStatus.py b/python/hets/ProofStatus.py deleted file mode 100644 index aac4f5bc39..0000000000 --- a/python/hets/ProofStatus.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -Description : Represents `Logic.Prover.ProofStatus` -Copyright : (c) Otto-von-Guericke University of Magdeburg -License : GPLv2 or higher, see LICENSE.txt -""" -from .haskell import ProofStatus as ProofStatusHs, GoalStatus, TimeOfDay, TacticScript - -from typing import Any, List - - -class ProofStatus: - def __init__(self, hs_proof_status: ProofStatusHs): - self._hs_proof_status = hs_proof_status - - def goal_name(self) -> str: - return self._hs_proof_status.goalName() - - def goal_status(self) -> GoalStatus: - return self._hs_proof_status.goalStatus() - - def used_axioms(self) -> List[str]: - return self._hs_proof_status.usedAxioms() - - def used_prover(self) -> str: - return self._hs_proof_status.usedProver() - - def used_time(self) -> TimeOfDay: - return self._hs_proof_status.usedTime() - - def tactic_script(self) -> TacticScript: - return self._hs_proof_status.tacticScript() - - def proof_lines(self) -> List[str]: - return self._hs_proof_status.proofLines() - diff --git a/python/hets/Prover.py b/python/hets/Prover.py index 629d92e9f8..d1a38a6a20 100644 --- a/python/hets/Prover.py +++ b/python/hets/Prover.py @@ -22,3 +22,6 @@ def __eq__(self, other): def __hash__(self): return self.name().__hash__() + def __repr__(self): + return f"<{__name__} '{self.name()}'>" + diff --git a/python/hets/Sentence.py b/python/hets/Sentence.py index 8d18278153..40f3912333 100644 --- a/python/hets/Sentence.py +++ b/python/hets/Sentence.py @@ -4,26 +4,73 @@ License : GPLv2 or higher, see LICENSE.txt """ import json -from typing import Tuple, Callable +from typing import Tuple, Callable, List, Optional -from .haskell import fst, show, snd, Sentence as PySentence +from .maybe import maybe_to_optional +from .haskell import fst, snd, PyTheorySentence, Sentence as PySentence, PyBasicProof, theorySentenceIsAxiom, \ + theorySentenceWasTheorem, theorySentenceIsDefined, theorySentenceGetTheoremStatus, theorySentencePriority, \ + theorySentenceContent, Just, fromJust, theorySentenceBestProof from .json_conversion import as_json +from .Comorphism import Comorphism +from .BasicProof import BasicProof +from .ProofDetails import ProofDetails, ProofKind -class Sentence: - def __init__(self, hs_sentence_with_name: Tuple[str, PySentence], hs_pretty_fn: Callable[[PySentence], str]) -> None: +from .HsWrapper import HsHierarchyElement + + +class Sentence(HsHierarchyElement): + def __init__(self, hs_sentence_with_name: Tuple[str, PyTheorySentence], + hs_pretty_fn: Callable[[PySentence], str], + parent: Optional[HsHierarchyElement] = None) -> None: + super().__init__(parent) + self._hs_obj = hs_sentence_with_name self._name = fst(hs_sentence_with_name) self._hs_sentence = snd(hs_sentence_with_name) self._hs_pretty_fn = hs_pretty_fn + def hs_obj(self): + return self._hs_obj + + def hs_update(self, new_hs_obj): + self._hs_obj = new_hs_obj + self._name = fst(new_hs_obj) + self._hs_sentence = snd(new_hs_obj) + def name(self) -> str: return self._name - + def as_json(self) -> dict: - return as_json(self._hs_sentence) + return as_json(theorySentenceContent(self._hs_sentence)) + + def is_axiom(self) -> bool: + return theorySentenceIsAxiom(self._hs_sentence) + + def was_theorem(self) -> bool: + return theorySentenceWasTheorem(self._hs_sentence) + + def is_defined(self) -> bool: + return theorySentenceIsDefined(self._hs_sentence) + + def is_proven(self) -> bool: + return any(b.kind() == ProofKind.PROVEN for _, b in self.theorem_status()) + + def theorem_status(self) -> List[Tuple[Comorphism, BasicProof]]: + return list((Comorphism(fst(x)), BasicProof(snd(x))) for x in theorySentenceGetTheoremStatus(self._hs_sentence)) + + def best_proof(self) -> Optional[BasicProof]: + proof = maybe_to_optional(theorySentenceBestProof(self._hs_sentence)) + return BasicProof(proof) if proof is not None else None + + def priority(self) -> Optional[str]: + priority = theorySentencePriority(self._hs_sentence) + if isinstance(priority, Just): + return fromJust(priority) + + return None def __str__(self) -> str: - return self._hs_pretty_fn(self._hs_sentence) + return self._hs_pretty_fn(theorySentenceContent(self._hs_sentence)) def __repr__(self): return f"<{__name__} object representing sentence {self.name()} = '{str(self)}'>" diff --git a/python/hets/Theory.py b/python/hets/Theory.py index 6d6d8bf0bd..b6629976a8 100644 --- a/python/hets/Theory.py +++ b/python/hets/Theory.py @@ -4,32 +4,31 @@ License : GPLv2 or higher, see LICENSE.txt """ -from typing import List, Optional, Tuple +from typing import List, Optional, Tuple, Dict +from .Comorphism import Comorphism +from .ConsistencyChecker import ConsistencyChecker from .HsWrapper import HsHierarchyElement from .Logic import Logic +from .Prover import Prover +from .Sentence import Sentence from .Signature import Signature -from .haskell import (Just, Nothing, fst, thd, PyTheory, getUsableProvers, getUsableConsistencyCheckers, - proveNodeAndRecord, +from .haskell import (fst, PyTheory, getUsableProvers, getUsableConsistencyCheckers, getAvailableComorphisms, getAllSentences, getAllGoals, getAllAxioms, getProvenGoals, prettySentence, - getUnprovenGoals, OMap, fstOf3, sndOf3, ProofStatus, PyProver, PyComorphism, PyConsChecker, - ConsistencyStatus, defaultProofOptions, PyProofOptions, mkPyProofOptions, TheoryPointer, snd, - defaultConsCheckingOptions, PyConsCheckingOptions, checkConsistencyAndRecord, logicNameOfTheory, + getUnprovenGoals, OMap, snd, + logicNameOfTheory, logicDescriptionOfTheory, signatureOfTheory) -from .result import result_or_raise - -from .Prover import Prover -from .ConsistencyChecker import ConsistencyChecker -from .Comorphism import Comorphism -from .ProofState import ProofState -from .Sentence import Sentence - class Theory(HsHierarchyElement): def __init__(self, hs_theory: PyTheory, parent: Optional[HsHierarchyElement]) -> None: super().__init__(parent) + self._sentences: Optional[List[Sentence]] = None + self._axioms: Optional[List[Sentence]] = None + self._goals: Optional[List[Sentence]] = None + self._proven_goals: Optional[List[Sentence]] = None + self._unproven_goals: Optional[List[Sentence]] = None self._hs_theory = hs_theory self._hs_pretty_sentence = prettySentence(hs_theory) @@ -39,10 +38,60 @@ def hs_obj(self): def hs_update(self, new_hs_obj): self._hs_theory = new_hs_obj + new_sentences = OMap.toList(getAllSentences(self._hs_theory)) + + for name_and_sentence in new_sentences: + name = fst(name_and_sentence) + + if self._sentences: + for sentence in self._sentences: + if sentence.name() == name: + sentence.hs_update(name_and_sentence) + + if self._axioms: + for axiom in self._axioms: + if axiom.name() == name: + axiom.hs_update(name_and_sentence) + + if self._goals: + for goal in self._goals: + if goal.name() == name: + goal.hs_update(name_and_sentence) + + if self._proven_goals: + for proven_goal in self._proven_goals: + if proven_goal.name() == name: + proven_goal.hs_update(name_and_sentence) + + if self._unproven_goals: + for unproven_goal in self._unproven_goals: + if unproven_goal.name() == name: + unproven_goal.hs_update(name_and_sentence) + + # Reset cached proven and unproven goals as they might have changed. + # Previously queried goals are updated and a previously unproven goal is now proven, the instance reflects the + # change. However, the lists should be re-queried to not list proven goals in the unproven list. + self._proven_goals = None + self._unproven_goals = None + def get_usable_provers(self) -> List[Prover]: provers = getUsableProvers(self._hs_theory).act() return list({Prover(fst(p)) for p in provers}) + def get_usable_provers_with_comorphisms(self) -> Dict[Prover, List[Comorphism]]: + provers = getUsableProvers(self._hs_theory).act() + result = dict() + for prover_and_comorphism in provers: + prover = fst(prover_and_comorphism) + comorphism = snd(prover_and_comorphism) + result.setdefault(Prover(prover), []).append(Comorphism(comorphism)) + + return result + + def get_usable_provers_and_comorphisms(self) -> List[Tuple[Prover, Comorphism]]: + provers = getUsableProvers(self._hs_theory).act() + return list((Prover(fst(p)), Comorphism(snd(p))) for p in provers) + def get_prover_by_name(self, name: str) -> Optional[Prover]: matches = list(p for p in self.get_usable_provers() if p.name() == name) if len(matches) == 1: @@ -58,21 +107,36 @@ def get_available_comorphisms(self) -> List[Comorphism]: return [Comorphism(x) for x in comorphisms] def sentences(self) -> List[Sentence]: - sentences = getAllSentences(self._hs_theory) - return [Sentence(x, self._hs_pretty_sentence) for x in OMap.toList(sentences)] + if self._sentences is None: + sentences = getAllSentences(self._hs_theory) + self._sentences = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(sentences)] + + return self._sentences def axioms(self) -> List[Sentence]: - axioms = getAllAxioms(self._hs_theory) - return [Sentence(x, self._hs_pretty_sentence) for x in OMap.toList(axioms)] + if self._axioms is None: + axioms = getAllAxioms(self._hs_theory) + self._axioms = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(axioms)] + + return self._axioms def goals(self) -> List[Sentence]: - return [Sentence(x, self._hs_pretty_sentence) for x in OMap.toList(getAllGoals(self._hs_theory))] + if self._goals is None: + self._goals = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(getAllGoals(self._hs_theory))] + + return self._goals def proven_goals(self) -> List[Sentence]: - return [Sentence(x, self._hs_pretty_sentence) for x in OMap.toList(getProvenGoals(self._hs_theory))] + if self._proven_goals is None: + self._proven_goals = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(getProvenGoals(self._hs_theory))] + + return self._proven_goals def unproven_goals(self) -> List[Sentence]: - return [Sentence(x, self._hs_pretty_sentence) for x in OMap.toList(getUnprovenGoals(self._hs_theory))] + if self._unproven_goals is None: + self._unproven_goals = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(getUnprovenGoals(self._hs_theory))] + + return self._unproven_goals def logic(self) -> Logic: return Logic(logicNameOfTheory(self._hs_theory), logicDescriptionOfTheory(self._hs_theory)) @@ -80,3 +144,6 @@ def logic(self) -> Logic: def signature(self) -> Signature: return Signature(signatureOfTheory(self._hs_theory)) + def sentence_by_name(self, name: str) -> Optional[Sentence]: + return next(iter(s for s in self.sentences() if s.name() == name), None) + diff --git a/python/hets/__init__.py b/python/hets/__init__.py index b5d2dc0b3a..0b94e53332 100644 --- a/python/hets/__init__.py +++ b/python/hets/__init__.py @@ -14,7 +14,7 @@ from .Library import Library, load_library from .Logic import Logic from .ProofState import ProofState -from .ProofStatus import ProofStatus +from .ProofDetails import ProofDetails, ProofKind from .Prover import Prover from .Sentence import Sentence from .Signature import Signature diff --git a/python/hets/haskell/Internal.py b/python/hets/haskell/Internal.py index a4ca1ca000..b81581df38 100644 --- a/python/hets/haskell/Internal.py +++ b/python/hets/haskell/Internal.py @@ -61,5 +61,9 @@ getDevGraphLinkType, showGlobalDoc, showDoc, - + Open, + Proved, + Disproved, + tacticScriptContent, + goalStatusOpenReason ) diff --git a/python/hets/haskell/Internal.pyi b/python/hets/haskell/Internal.pyi index a087031186..4721ad860d 100644 --- a/python/hets/haskell/Internal.pyi +++ b/python/hets/haskell/Internal.pyi @@ -66,12 +66,22 @@ def resultToMaybe(r: Result[a]) -> Maybe[a]: ... class GoalStatus: ... +class Open(GoalStatus): + def goalStatusOpenReason(self) -> typing.List[str]: ... + +class Disproved(GoalStatus): ... + +class Proved(GoalStatus): ... + + class TimeOfDay: ... class TacticScript: ... +def tacticScriptContent(x0: TacticScript) -> str: ... + class ConsistencyStatus: ... @@ -153,6 +163,7 @@ class DefinitionLink(DevGraphLinkType): ... class TheoremLink(DevGraphLinkType): def linkTypeIsProven(self) -> bool: ... def linkTypeIsConservativ(self) -> bool: ... + def linkTypeIsPending(self) -> bool: ... def getDevGraphLinkType(x0: DGLinkLab) -> DevGraphLinkType: ... diff --git a/python/hets/haskell/Prelude.py b/python/hets/haskell/Prelude.py index 7106994846..50d0ab2939 100644 --- a/python/hets/haskell/Prelude.py +++ b/python/hets/haskell/Prelude.py @@ -1,2 +1,2 @@ from .base import * -from hs.Prelude import Just, Nothing, fst, snd, show, String +from hs.Prelude import Just, Nothing, fst, snd, show, String, Maybe diff --git a/python/hets/haskell/Python.py b/python/hets/haskell/Python.py index 7af76d1e04..d4b323f236 100644 --- a/python/hets/haskell/Python.py +++ b/python/hets/haskell/Python.py @@ -20,4 +20,8 @@ globalDecomposition, localInference, localDecomposition, compositionProveEdges, conservativity, automaticHideTheoremShift, theoremHideShift, computeColimit, normalForm, triangleCons, freeness, libFlatImports, libFlatDUnions, libFlatRenamings, libFlatHiding, - libFlatHeterogen, qualifyLibEnv, getDevelopmentGraphNodeType) + libFlatHeterogen, qualifyLibEnv, getDevelopmentGraphNodeType, PyBasicProof, + PyBasicProofGuessed, PyBasicProofConjectured, PyBasicProofHandwritten, PyTheorySentence, + PyTheorySentenceByName, theorySentenceIsAxiom, theorySentenceWasTheorem, + theorySentenceIsDefined, theorySentenceGetTheoremStatus, theorySentenceBestProof, + theorySentencePriority, theorySentenceContent, pyProofStatusOfPyBasicProof) diff --git a/python/hets/haskell/Python.pyi b/python/hets/haskell/Python.pyi index 6fbf7fc9b3..020e357e4d 100644 --- a/python/hets/haskell/Python.pyi +++ b/python/hets/haskell/Python.pyi @@ -13,7 +13,7 @@ c = typing.TypeVar("c") GenericTransportType = typing.Any SignatureJSON = GenericTransportType SymbolJSON = GenericTransportType -SentenceByName = OMap[str, Sentence] +PyTheorySentenceByName = OMap[str, PyTheorySentence] def fstOf3(x0: typing.Tuple[a, b, c]) -> a: ... @@ -48,6 +48,15 @@ class PyProofTree: class PyGMorphism: ... +class PyBasicProof: + ... + +class PyBasicProofGuessed(PyBasicProof): ... +class PyBasicProofConjectured(PyBasicProof): ... +class PyBasicProofHandwritten(PyBasicProof): ... + +def pyProofStatusOfPyBasicProof(x0: PyBasicProof) -> Maybe[ProofStatus[PyProofTree]]: ... + class PyProofOptions: def __init__(self, proofOptsProver: Maybe[PyProver], proofOptsComorphism: Maybe[PyComorphism], @@ -146,19 +155,19 @@ def checkConsistencyAndRecord(x0: TheoryPointer) -> typing.Callable[ [PyConsCheckingOptions], IO[typing.Tuple[ConsistencyStatus, LibEnv]]]: ... -def getAllSentences(x0: PyTheory) -> SentenceByName: ... +def getAllSentences(x0: PyTheory) -> PyTheorySentenceByName: ... -def getAllAxioms(x0: PyTheory) -> SentenceByName: ... +def getAllAxioms(x0: PyTheory) -> PyTheorySentenceByName: ... -def getAllGoals(x0: PyTheory) -> SentenceByName: ... +def getAllGoals(x0: PyTheory) -> PyTheorySentenceByName: ... -def getProvenGoals(x0: PyTheory) -> SentenceByName: ... +def getProvenGoals(x0: PyTheory) -> PyTheorySentenceByName: ... -def getUnprovenGoals(x0: PyTheory) -> SentenceByName: ... +def getUnprovenGoals(x0: PyTheory) -> PyTheorySentenceByName: ... def prettySentence(x0: PyTheory) -> typing.Callable[[Sentence], str]: ... @@ -209,7 +218,18 @@ def gMorphismToTransportType(x0: PyGMorphism) -> GenericTransportType: ... TheoryPointer = typing.Tuple[typing.Any, typing.Any, typing.Any, typing.Any] -class Sentence: ... +class PyTheorySentence: ... + +def theorySentenceIsAxiom(x0: PyTheorySentence) -> bool: ... +def theorySentenceWasTheorem(x0: PyTheorySentence) -> bool: ... +def theorySentenceIsDefined(x0: PyTheorySentence) -> bool: ... +def theorySentenceGetTheoremStatus(x0: PyTheorySentence) -> typing.List[typing.Tuple[PyComorphism, PyBasicProof]]: ... +def theorySentencePriority(x0: PyTheorySentence) -> Maybe[str]: ... +def theorySentenceContent(x0: PyTheorySentence) -> Sentence: ... +def theorySentenceBestProof(x0: PyTheorySentence) -> Maybe[PyBasicProof]: ... + + +Sentence = bytes def recomputeNode(thPtr: TheoryPointer) -> LibEnv: ... @@ -245,37 +265,37 @@ def conservativity(name: LibName, env: LibEnv) -> LibEnv: ... def automaticHideTheoremShift(name: LibName, env: LibEnv) -> LibEnv: ... -def theoremHideShift(name: LibName, env: LibEnv) -> LibEnv: ... +def theoremHideShift(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def computeColimit(name: LibName, env: LibEnv) -> LibEnv: ... +def computeColimit(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def normalForm(name: LibName, env: LibEnv) -> LibEnv: ... +def normalForm(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def triangleCons(name: LibName, env: LibEnv) -> LibEnv: ... +def triangleCons(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def freeness(name: LibName, env: LibEnv) -> LibEnv: ... +def freeness(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def libFlatImports(name: LibName, env: LibEnv) -> LibEnv: ... +def libFlatImports(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def libFlatDUnions(name: LibName, env: LibEnv) -> LibEnv: ... +def libFlatDUnions(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def libFlatRenamings(name: LibName, env: LibEnv) -> LibEnv: ... +def libFlatRenamings(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def libFlatHiding(name: LibName, env: LibEnv) -> LibEnv: ... +def libFlatHiding(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def libFlatHeterogen(name: LibName, env: LibEnv) -> LibEnv: ... +def libFlatHeterogen(name: LibName, env: LibEnv) -> Result[LibEnv]: ... -def qualifyLibEnv(name: LibName, env: LibEnv) -> LibEnv: ... +def qualifyLibEnv(name: LibName, env: LibEnv) -> Result[LibEnv]: ... def getDevelopmentGraphNodeType(x0: DGNodeLab) -> DGNodeType: ... diff --git a/python/hets/maybe.py b/python/hets/maybe.py new file mode 100644 index 0000000000..acc1268175 --- /dev/null +++ b/python/hets/maybe.py @@ -0,0 +1,12 @@ +import typing + +from .haskell import fromJust, Maybe, Just + +T = typing.TypeVar("T") + + +def maybe_to_optional(maybe: typing.Generic[T]) -> typing.Optional[T]: + if isinstance(maybe, Just): + return fromJust(maybe) + + return None diff --git a/python/hetsgui/formatting/Colors.py b/python/hetsgui/formatting/Colors.py new file mode 100644 index 0000000000..3c306889af --- /dev/null +++ b/python/hetsgui/formatting/Colors.py @@ -0,0 +1,40 @@ +from gi.repository import Gdk + +from hets import ProofKind + +PROOF_KIND_BG_COLORS = { + ProofKind.UNKNOWN: "fuchsia", + ProofKind.OPEN: "white", + ProofKind.PROVEN: "limegreen", + ProofKind.PROVEN_BY_INCONSISTENCY: "orange", + ProofKind.DISPROVEN: "coral", + ProofKind.TIMED_OUT: "royalblue", + ProofKind.GUESSED: "darkseagreen", + ProofKind.CONJECTURED: "darkseagreen", + ProofKind.HANDWRITTEN: "darkseagreen" +} + +PROOF_KIND_FG_COLORS = { + ProofKind.UNKNOWN: "fuchsia", + ProofKind.OPEN: "black", + ProofKind.PROVEN: "limegreen", + ProofKind.PROVEN_BY_INCONSISTENCY: "orange", + ProofKind.DISPROVEN: "coral", + ProofKind.TIMED_OUT: "royalblue", + ProofKind.GUESSED: "darkseagreen", + ProofKind.CONJECTURED: "darkseagreen", + ProofKind.HANDWRITTEN: "darkseagreen" +} + + +def color_name_to_rgba(color_name: str) -> Gdk.RGBA: + color = Gdk.RGBA() + color.parse(color_name) + return color + + +def color_to_hex(color: Gdk.RGBA) -> str: + red = int(color.red * 255) + green = int(color.green * 255) + blue = int(color.blue * 255) + return f"#{red:02x}{green:02x}{blue:02x}" diff --git a/python/hetsgui/hets.png b/python/hetsgui/hets.png new file mode 100644 index 0000000000000000000000000000000000000000..92bd2036182a42a9ca7752827f8efdd4f7b636ea GIT binary patch literal 13630 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 B*pmPN literal 0 HcmV?d00001 diff --git a/python/hetsgui/hetsgui.py b/python/hetsgui/hetsgui.py index aa4ea5b10c..b182144557 100644 --- a/python/hetsgui/hetsgui.py +++ b/python/hetsgui/hetsgui.py @@ -1,4 +1,6 @@ import sys +import threading +import time import gi @@ -138,7 +140,6 @@ def _set_menu(self): menu_entry_qualify_lib_env.set_action_and_target_value("win.proofs.qualify_lib_env", None) proof_menu.append_item(menu_entry_qualify_lib_env) - menu = Gio.Menu() menu.append_submenu("File", file_menu) menu.append_submenu("View", view_menu) @@ -170,16 +171,42 @@ def on_open(self, a, files, n_files, hint): def do_activate(self): if not self.window: - from windows.MainWindow import MainWindow - self.window = MainWindow(application=self) + # from windows.ProveDialog import ProveDialog + # self.window = ProveDialog(application=self) + + from windows.StartUpWindow import StartUpWindow + startup_window = StartUpWindow(application=self) + startup_window.show_all() + startup_window.present() + + self.window = startup_window + + def start_up_done(): + from windows.MainWindow import MainWindow + + self.window = MainWindow(application=self) + startup_window.close() - if self.file: - self.window.open_file(self.file) + if self.file: + self.window.open_file(self.file) + + self.window.show_all() + self.window.present() + + # noinspection PyUnresolvedReferences + def start_up(): + import hets + import windows.MainWindow + + GLib.idle_add(start_up_done) + + t = threading.Thread(target=start_up) + t.start() - print(self.get_app_menu()) self.window.show_all() self.window.present() + app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status) diff --git a/python/hetsgui/widgets/CellRendererLink.py b/python/hetsgui/widgets/CellRendererLink.py new file mode 100644 index 0000000000..84ce10a3b8 --- /dev/null +++ b/python/hetsgui/widgets/CellRendererLink.py @@ -0,0 +1,15 @@ +import cairo +from gi.repository import Gtk, GObject, Gdk + + +class CellRendererLink(Gtk.CellRendererText): + __gsignals__ = {"clicked": (GObject.SIGNAL_RUN_FIRST, None, (str,))} + + def __init__(self, **kwargs): + super().__init__() + self.set_property("mode", Gtk.CellRendererMode.ACTIVATABLE) + + self.button = Gtk.Button() + + def do_activate(self, event, widget, path, background_area, cell_area, flags): + self.emit('clicked', path) diff --git a/python/hetsgui/widgets/GraphvizGraphWidget.py b/python/hetsgui/widgets/GraphvizGraphWidget.py index d5f3676993..687bcf1d95 100644 --- a/python/hetsgui/widgets/GraphvizGraphWidget.py +++ b/python/hetsgui/widgets/GraphvizGraphWidget.py @@ -1,14 +1,41 @@ -from typing import Optional +from typing import Optional, Tuple -import graphviz import xdot.ui.elements -from gi.repository import Gtk, Gio, GLib, Gdk -from graphviz import Graph, Digraph +from gi.repository import Gtk, Gio, GLib +from graphviz import Digraph from xdot import DotWidget -from hets import DevelopmentGraph, DevGraphNode, DevGraphEdge, TheoremDevGraphEdge, EdgeKind, DefinitionDevGraphEdge +from formatting.Colors import color_to_hex +from hets import DevelopmentGraph, DevGraphNode, DevGraphEdge, TheoremDevGraphEdge, EdgeKind from utils import get_variant +# KEY: (colorname, variant, light) +COLOR_MAP = { + ("black", False, False): "gray0" + , ("black", False, True): "gray30" + , ("blue", False, False): "RoyalBlue3" + , ("blue", False, True): "RoyalBlue1" + , ("blue", True, False): "SteelBlue3" + , ("blue", True, True): "SteelBlue1" + , ("coral", False, False): "coral3" + , ("coral", False, True): "coral1" + , ("coral", True, False): "LightSalmon2" + , ("coral", True, True): "LightSalmon" + , ("green", False, False): "MediumSeaGreen" + , ("green", False, True): "PaleGreen3" + , ("green", True, False): "limegreen" + , ("green", True, True): "LightGreen" + , ("purple", False, False): "purple2" + , ("yellow", False, False): "gold" + , ("yellow", False, True): "yellow" + , ("yellow", True, False): "LightGoldenrod3" + , ("yellow", True, True): "LightGoldenrod" + , ("fuchsia", False, False): "fuchsia" + , ("fuchsia", False, True): "fuchsia" + , ("fuchsia", True, False): "fuchsia" + , ("fuchsia", True, True): "fuchsia" +} + def node_shape(node: DevGraphNode) -> str: if node.is_reference_node(): @@ -20,47 +47,71 @@ def node_shape(node: DevGraphNode) -> str: def node_color(node: DevGraphNode) -> str: if node.is_proven_node(): if node.is_consistency_proven(): - return "limegreen" + return COLOR_MAP[("green", True, False)] else: - return "gold2" + return COLOR_MAP[("yellow", False, True)] else: return "coral" def edge_color(edge: DevGraphEdge) -> str: + color: Tuple[str, bool] = ("fuchsia", True) # (color name, use variant) if isinstance(edge, TheoremDevGraphEdge): - if edge.is_proven(): - if edge.is_conservativ(): - color = "limegreen" + if not edge.is_proven(): + if edge.kind() == EdgeKind.LOCAL and not edge.is_homogeneous(): + color = ("coral", True) + # coral true + elif edge.kind() == EdgeKind.HIDING: + color = ("yellow", False) + else: + color = ("coral", False) + elif not edge.is_conservativ(): + if edge.kind() == EdgeKind.LOCAL and not edge.is_homogeneous(): + color = ("yellow", True) + else: + color = ("yellow", False) + elif edge.is_pending(): + if edge.kind() == EdgeKind.LOCAL and not edge.is_homogeneous(): + color = ("yellow", True) else: - color = "gold2" + color = ("yellow", False) else: - color = "coral" + if edge.kind() == EdgeKind.LOCAL and not edge.is_homogeneous(): + color = ("green", True) + elif edge.kind() == EdgeKind.HIDING: + color = ("green", True) + else: + color = ("green", False) else: color = { - EdgeKind.FREE: "royalblue", - EdgeKind.COFREE: "royalblue", - EdgeKind.HIDING: "royalblue", + EdgeKind.FREE: ("blue", False), + EdgeKind.COFREE: ("blue", False), + EdgeKind.HIDING: ("blue", False), # default - EdgeKind.LOCAL: "black", - EdgeKind.GLOBAL: "black", + EdgeKind.LOCAL: ("black", False), + EdgeKind.GLOBAL: ("black", False), # error - EdgeKind.UNKNOWN: "fuchsia" + EdgeKind.UNKNOWN: ("fuchsia", False) }[edge.kind()] + color_name, color_use_variant = color + color_use_light = not edge.is_inclusion() + + final_color = COLOR_MAP[(color_name, color_use_variant, color_use_light)] + # Double lines for heterogeneous signature morphisms if edge.is_homogeneous(): - return color + return final_color else: - return f"{color}:invis:{color}" + return f"{final_color}:invis:{final_color}" def edge_style(edge: DevGraphEdge): # Note: Double lines are created with a color list. See edge_color - if (isinstance(edge, TheoremDevGraphEdge) and edge.is_homogeneous() or isinstance(edge, DefinitionDevGraphEdge)) and edge.kind() == EdgeKind.LOCAL: + if isinstance(edge, TheoremDevGraphEdge) and edge.kind() == EdgeKind.LOCAL: return "dashed" else: return "" @@ -113,6 +164,10 @@ def hide_newly_added_proven_edges(self): def render(self, keep_zoom=True) -> None: g = Digraph("G") + success, color = self.get_style_context().lookup_color("theme_bg_color") + if success: + g.graph_attr["bgcolor"] = color_to_hex(color) + for node in self.development_graph.nodes(): g.node(str(node.id()), label="" if node.is_internal() and not self._show_internal_node_names else node.name(), @@ -146,7 +201,6 @@ def _menu_for_node(self, node_id: str) -> Gtk.Menu: menu_item_info.set_action_and_target_value("win.node.show_info", GLib.Variant.new_string(node_id)) menu.append_item(menu_item_info) - return Gtk.Menu.new_from_model(menu) def _menu_for_edge(self, src_id: str, dst_id: str) -> Gtk.Menu: @@ -157,15 +211,8 @@ def _menu_for_edge(self, src_id: str, dst_id: str) -> Gtk.Menu: menu_item_info.set_action_and_target_value("win.edge.show_info", get_variant([src_id, dst_id])) menu.append_item(menu_item_info) - return Gtk.Menu.new_from_model(menu) - def on_draw(self, widget, cr): - cr.set_source_rgb(1, 1, 1) - cr.paint() - - return super().on_draw(widget, cr) - def on_click(self, element, event): if element is None: return True @@ -195,4 +242,3 @@ def on_area_motion_notify(self, area, event): def set_highlight(self, items, search=False): super().set_highlight(items, search) - diff --git a/python/hetsgui/widgets/NodeInfoDialog.py b/python/hetsgui/widgets/NodeInfoDialog.py index 934d499373..dd92bb7400 100644 --- a/python/hetsgui/widgets/NodeInfoDialog.py +++ b/python/hetsgui/widgets/NodeInfoDialog.py @@ -19,6 +19,7 @@ def __init__(self, parent, node: DevGraphNode): box = self.get_content_area() text_view = Gtk.TextView() text_view.set_property('editable', False) + text_view.set_property('monospace', True) text_buffer = text_view.get_buffer() text_buffer.set_text(title + "\n" + node.info()) diff --git a/python/hetsgui/widgets/ProveDialog.py b/python/hetsgui/widgets/ProveDialog.py deleted file mode 100644 index 83c6655c14..0000000000 --- a/python/hetsgui/widgets/ProveDialog.py +++ /dev/null @@ -1,11 +0,0 @@ -from gi.repository import Gtk - -from hets import DevGraphNode - -ui = """ - -""" - -class ProveDialog(Gtk.Window): - def __init__(self, node: DevGraphNode): - super().__init__(title=f"Prove {node.name()}") diff --git a/python/hetsgui/windows/MainWindow.py b/python/hetsgui/windows/MainWindow.py index 8d107e7cad..5033501194 100644 --- a/python/hetsgui/windows/MainWindow.py +++ b/python/hetsgui/windows/MainWindow.py @@ -1,3 +1,4 @@ +import os import typing import hets @@ -10,6 +11,8 @@ from widgets.GraphvizGraphWidget import GraphvizGraphWidget from widgets.NodeInfoDialog import NodeInfoDialog +from windows.ProveWindow import ProveWindow + T = typing.TypeVar("T") @@ -30,16 +33,19 @@ def __init__(self, **kwargs): self.file = None self.library = None + self.set_auto_startup_notification(True) + self.set_size_request(1200, 600) + self.set_title("Heterogeneous Toolset") + icon = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../hets.png")) + self.set_default_icon_from_file(icon) + self.set_icon_from_file(icon) + self.ui_box = Gtk.Box(spacing=6) self.add(self.ui_box) self.ui_graph = GraphvizGraphWidget() self.ui_box.pack_start(self.ui_graph, True, True, 0) - - self.set_size_request(1200, 600) - self.set_title("Heterogeneous Toolset") - self._action("open_file", self.on_menu_open_file) self._action("node.prove", self.on_prove_node, "s") self._action("node.show_info", self.on_show_node_info, "s") @@ -125,9 +131,15 @@ def on_prove_node(self, action, parameter: GLib.Variant): if self.library: node = [n for n in self.library.development_graph().nodes() if str(n.id()) == node_id][0] - node.prove(node.theory().get_prover_by_name("Pellet")) + prove_window = ProveWindow(node, transient_for=self) + prove_window.show_all() + prove_window.present() + + prove_window.connect("destroy", lambda _: self.ui_graph.render()) + + # node.prove(node.theory().get_prover_by_name("Pellet")) - self.ui_graph.render() + # self.ui_graph.render() else: print(f'Action: prove node {node_id}. But no library is loaded!') diff --git a/python/hetsgui/windows/ProofDetailsWindow.py b/python/hetsgui/windows/ProofDetailsWindow.py new file mode 100644 index 0000000000..5ca737d529 --- /dev/null +++ b/python/hetsgui/windows/ProofDetailsWindow.py @@ -0,0 +1,150 @@ +import re + +import xdot.dot.lexer +from gi.repository import Gtk, Pango + +from formatting.Colors import PROOF_KIND_BG_COLORS, PROOF_KIND_FG_COLORS +from hets import Sentence, Theory + +from graphviz import Graph, Digraph +from xdot import DotWidget +import time + + +class ProofDetailsWindow(Gtk.Window): + def __init__(self, goal: Sentence, theory: Theory, **kwargs): + super().__init__(**kwargs) + + provider = Gtk.CssProvider() + provider.load_from_data(b""" + .axiom { background: #00BBFF; } + .proof-tree { background: white; } + .proof-lines { font-family: monospace; } + """) + # self.get_style_context().add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + self.get_style_context().add_provider_for_screen(self.get_screen(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + + self.goal = goal + self.theory = theory + + self.set_default_size(800, 600) + self.maximize() + self.set_title(f"Proof details for {goal.name()}") + + # self.header = Gtk.HeaderBar(title=self.get_title()) + # self.set_titlebar(self.header) + + self.scrolled_window = Gtk.ScrolledWindow(hexpand=True, vexpand=True, hscrollbar_policy=Gtk.PolicyType.NEVER) + self.add(self.scrolled_window) + + self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.scrolled_window.add(self.box) + + for comorphism, proof in goal.theorem_status(): + expander = Gtk.Expander() + expander_label = Gtk.Label() + expander_label.set_tooltip_text(f"{proof.kind().to_str()} with {proof.details().used_prover()} via {comorphism.name()}") + expander_label.set_markup(f"{proof.kind().to_str()} with {proof.details().used_prover()} via {comorphism.name()}") + expander_label.set_ellipsize(Pango.EllipsizeMode.MIDDLE) + expander.set_label_widget(expander_label) + + expander_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=4, margin_start=14) + expander.add(expander_box) + + details_grid = Gtk.Grid(row_spacing=4, column_spacing=14) + expander_box.pack_start(details_grid, False, False, 0) + row = 0 + + details_grid.attach(Gtk.Label(label="Status:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(Gtk.Label(label=f"{proof.kind().to_str()}", use_markup=True, halign=Gtk.Align.START), 1, row, 1, 1) + row += 1 + + details_grid.attach(Gtk.Label(label="Prover:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(Gtk.Label(label=proof.details().used_prover(), halign=Gtk.Align.START), 1, row, 1, 1) + row += 1 + + details_grid.attach(Gtk.Label(label="Comorphism:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(Gtk.Label(label=comorphism.name(), halign=Gtk.Align.START, ellipsize=Pango.EllipsizeMode.MIDDLE, tooltip_text=comorphism.name()), 1, row, 1, 1) + row += 1 + + used_axioms_box = Gtk.FlowBox(column_spacing=8, row_spacing=4) + used_axioms = proof.details().used_axioms() + for axiom in used_axioms: + sentence = theory.sentence_by_name(axiom) + axiom_label = Gtk.Label(label=axiom, tooltip_text=str(sentence) if sentence else axiom) + axiom_label.get_style_context().add_class("axiom") + used_axioms_box.add(axiom_label) + + details_grid.attach(Gtk.Label(label="Used axioms:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(used_axioms_box, 1, row, 1, 1) + row += 1 + + details_grid.attach(Gtk.Label(label="Time used:", halign=Gtk.Align.START), 0, row, 1, 1) + # used_time = time.strftime("%H:%M:%S", proof.details().used_time()) + used_time = proof.details().used_time() + details_grid.attach(Gtk.Label(label=used_time, halign=Gtk.Align.START), 1, row, 1, 1) + row += 1 + + tactic_script = proof.details().tactic_script() + ts_regex = [ + re.compile(r"^ATPTacticScript \{tsTimeLimit = (\d+), tsExtraOpts = \[(.*)\]\}$"), + re.compile(r"^TacticScript \{timeLimit = (\d+), extraOptions = \[(.*)\]\}$") + ] + ts_time, ts_opts = None, None + + for regex in ts_regex: + match = regex.match(tactic_script) + if match: + ts_time = match.group(1) + ts_opts_list = match.group(2) + list_regex = re.compile(r"\"((?:\\\"|[^\"])*)\"") + ts_opts = [] + for match in list_regex.finditer(ts_opts_list): + ts_opts.append(match.group(1)) + + break + + if ts_time is not None and ts_opts is not None: + details_grid.attach(Gtk.Label(label="Time limit:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(Gtk.Label(label=f"{ts_time}s", halign=Gtk.Align.START), 1, row, 1, 1) + row += 1 + + details_grid.attach(Gtk.Label(label="Extra options:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(Gtk.Label(label=" ".join(ts_opts), halign=Gtk.Align.START), 1, row, 1, 1) + row += 1 + else: + details_grid.attach(Gtk.Label(label="Tactic script:", halign=Gtk.Align.START), 0, row, 1, 1) + details_grid.attach(Gtk.Label(label=proof.details().tactic_script(), halign=Gtk.Align.START), 1, row, 1, 1) + row += 1 + + proof_tree_text = proof.details().proof_tree().strip() + proof_tree_widget = DotWidget() + proof_tree_widget.get_style_context().add_class("proof-tree") + if proof_tree_text != "" and proof_tree_widget.set_dotcode(proof_tree_text.encode("utf-8")): + proof_tree_widget.set_size_request(-1, 800) + else: + proof_tree_widget.destroy() + proof_tree_widget = Gtk.Label(label=proof_tree_text, halign=Gtk.Align.START) + + proof_tree_expander = Gtk.Expander(label="Proof tree:", hexpand=True) + proof_tree_expander.add(proof_tree_widget) + expander_box.pack_start(proof_tree_expander, False, False, 0) + # details_grid.attach(proof_tree_expander, 0, row, 2, 1) + # row += 1 + + proof_lines_expander = Gtk.Expander(label="Proof lines:", hexpand=True) + proof_lines_widget = Gtk.Label(label="\n".join(proof.details().proof_lines()), halign=Gtk.Align.START, selectable=True, lines=len(proof.details().proof_lines()), wrap=True) + proof_lines_widget.get_style_context().add_class("proof-lines") + # proof_lines_widget = Gtk.TextView() + # proof_lines_widget.set_property('editable', False) + # proof_lines_widget.set_property('monospace', True) + # text_buffer = proof_lines_widget.get_buffer() + # text_buffer.set_text("\n".join(proof.details().proof_lines())) + proof_lines_expander.add(proof_lines_widget) + expander_box.pack_start(proof_lines_expander, False, False, 0) + # details_grid.attach(proof_lines_expander, 0, row, 2, 1) + # row += 1 + + self.box.pack_start(expander, False, True, 4) + + self.show_all() diff --git a/python/hetsgui/windows/ProveWindow.py b/python/hetsgui/windows/ProveWindow.py new file mode 100644 index 0000000000..9a87e6e001 --- /dev/null +++ b/python/hetsgui/windows/ProveWindow.py @@ -0,0 +1,382 @@ +import threading +from typing import Optional + +from gi.repository import Gtk, Pango, GLib, Gdk + +from hets import DevGraphNode, ProofKind +from formatting.Colors import PROOF_KIND_BG_COLORS, color_name_to_rgba +from widgets.CellRendererLink import CellRendererLink +from windows.ProofDetailsWindow import ProofDetailsWindow + + +def model_toggle_handle(model, index=1, header: Optional[Gtk.CheckButton] = None): + def cb(widget, path): + next_state = not model[path][index] + + model[path][index] = next_state + + if header is not None: + consistent = all(row[index] == next_state for row in model) + header.set_inconsistent(not consistent) + header.set_active(next_state) + + return cb + + +def model_toggle_column_handle(model, index=1): + def cb(column: Gtk.TreeViewColumn): + widget = column.get_widget() + if not isinstance(widget, Gtk.CheckButton): + return + + new_state = not (widget.get_inconsistent() or widget.get_active()) + + for row in model: + row[index] = new_state + + widget.set_inconsistent(False) + widget.set_active(new_state) + + return cb + + +@Gtk.Template() +class ProveWindow(Gtk.Window): + def __init__(self, node: DevGraphNode, **kwargs): + super().__init__(title=f"Prove {node.name()}", **kwargs) + # def __init__(self, **kwargs): + # super().__init__(title=f"Prove {{node.name()}}", **kwargs) + self.set_default_size(800, -1) + self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) + self.set_destroy_with_parent(True) + + self.proving_thread: Optional[threading.Thread] = None + self.node = node + + goals = self.goal_widget() + axioms = self.axioms_widget() + provers = self.prover_widget() + prover_settings = self.prover_settings_widget() + + self.header = Gtk.HeaderBar(title=self.get_title()) + self.header.set_show_close_button(True) + self.btn_prove = Gtk.Button(label="Prove") + self.header.pack_start(self.btn_prove) + self.set_titlebar(self.header) + + self.notebook = Gtk.Notebook(tab_pos=Gtk.PositionType.LEFT) + self.add(self.notebook) + + self.page_prove = provers + self.page_prove.set_border_width(10) + self.notebook.append_page(self.page_prove, Gtk.Label(label="Prove")) + + self.page_goals = goals + self.page_goals.set_border_width(10) + self.notebook.append_page(self.page_goals, Gtk.Label(label="Goals")) + + self.page_axioms = axioms + self.page_axioms.set_border_width(10) + self.notebook.append_page(self.page_axioms, Gtk.Label(label="Axioms")) + + self.page_prover_settings = prover_settings + self.page_prover_settings.set_border_width(10) + self.notebook.append_page(self.page_prover_settings, Gtk.Label(label="Prover Settings")) + + self.connect("delete_event", self.on_close) + + self.btn_prove.connect("clicked", self.on_prove_clicked) + + def _goal_style(self, goal): + proof = goal.best_proof() + kind = proof.kind() if proof is not None else ProofKind.OPEN + text = f'{kind.to_str()}' + color_name = PROOF_KIND_BG_COLORS[kind] + color = color_name_to_rgba(color_name) + return color, text + + def on_close(self, widget, event): + if self.proving_thread is not None and self.proving_thread.is_alive(): + return True # Stop the window from being closed if a proving process is currently running + + return False + + def goal_widget(self) -> Gtk.Widget: + self.goals_model = Gtk.ListStore(str, bool, str, str, str, Gdk.RGBA) + + for goal in self.node.global_theory().goals(): + color, text = self._goal_style(goal) + + self.goals_model.append([goal.name(), True, text, goal.name(), str(goal), color]) + + # self.goals_model.append(["Ax5", True, "", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) + # self.goals_model.append(["Ax7", True, "P", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) + # self.goals_model.append(["Ax8", False, "P", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) + # self.goals_model.append(["Ax9", False, "D", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) + # self.goals_model.append(["Ax10", True, "D", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) + + treeview = Gtk.TreeView(model=self.goals_model, hexpand=True, hover_expand=True, headers_clickable=True, + tooltip_column=4) + + prove_renderer = Gtk.CellRendererToggle() + prove_all_check: Gtk.CheckButton = Gtk.CheckButton.new() + prove_all_check.set_active(1) # By default all goals are selected for proving + prove_renderer.connect("toggled", model_toggle_handle(self.goals_model, header=prove_all_check)) + prove_column = Gtk.TreeViewColumn("Prove", prove_renderer, active=1) + prove_column.set_widget(prove_all_check) + prove_column.set_clickable(True) + prove_all_check.show_all() + prove_column.connect("clicked", model_toggle_column_handle(self.goals_model)) + treeview.append_column(prove_column) + + state_renderer = CellRendererLink() + state_renderer.connect("clicked", self.on_proof_details_clicked) + state_column = Gtk.TreeViewColumn("State", state_renderer, markup=2, background_rgba=5) + state_column.set_sort_column_id(2) + treeview.append_column(state_column) + + name_column = Gtk.TreeViewColumn("Name", + Gtk.CellRendererText(width_chars=20, ellipsize=Pango.EllipsizeMode.END), + text=3) + name_column.set_sort_column_id(3) + name_column.set_resizable(True) + treeview.append_column(name_column) + goal_column = Gtk.TreeViewColumn("Goal", + Gtk.CellRendererText(width_chars=100, ellipsize=Pango.EllipsizeMode.END), + text=4) + goal_column.set_sort_column_id(4) + goal_column.set_resizable(True) + treeview.append_column(goal_column) + + scrollable_treeview = Gtk.ScrolledWindow(vexpand=True, min_content_height=100) + scrollable_treeview.add(treeview) + + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + + box.pack_start(scrollable_treeview, True, True, 0) + + return box + + def axioms_widget(self) -> Gtk.Widget: + self.axioms_model = Gtk.ListStore(str, bool, str, str) + + for axiom in self.node.global_theory().axioms(): + self.axioms_model.append([axiom.name(), True, axiom.name(), str(axiom)]) + + # self.axioms_model.append(["Ax1", True, 'Class: Mother EquivalentTo: Woman and (hasChild some Person)']) + # self.axioms_model.append(["Ax2", True, 'Class: Woman SubClassOf: Person']) + # self.axioms_model.append(["Ax3", False, 'Individual: björn Types: Person']) + # self.axioms_model.append(["Ax4", True, 'Individual: mary Types: Woman ']) + # self.axioms_model.append(["Ax6", False, 'Individual: mary Facts: hasChild john']) + + treeview = Gtk.TreeView(model=self.axioms_model, hexpand=True, headers_clickable=True, tooltip_column=3) + + include_renderer = Gtk.CellRendererToggle() + include_all_check: Gtk.CheckButton = Gtk.CheckButton.new() + include_all_check.set_active(1) # By default all axioms are selected + include_renderer.connect("toggled", model_toggle_handle(self.axioms_model, header=include_all_check)) + include_column = Gtk.TreeViewColumn("Include", include_renderer, active=1) + include_column.set_widget(include_all_check) + include_column.set_clickable(True) + include_all_check.show_all() + include_column.connect("clicked", model_toggle_column_handle(self.axioms_model)) + + treeview.append_column(include_column) + name_column = Gtk.TreeViewColumn("Name", + Gtk.CellRendererText(width_chars=20, ellipsize=Pango.EllipsizeMode.END), + text=2) + name_column.set_sort_column_id(2) + name_column.set_resizable(True) + treeview.append_column(name_column) + axiom_column = Gtk.TreeViewColumn("Axiom", + Gtk.CellRendererText(width_chars=100, ellipsize=Pango.EllipsizeMode.END), + text=3) + axiom_column.set_sort_column_id(3) + axiom_column.set_resizable(True) + treeview.append_column(axiom_column) + + scrollable_treeview = Gtk.ScrolledWindow(vexpand=True, min_content_height=200) + scrollable_treeview.add(treeview) + + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + + box.pack_start(scrollable_treeview, True, True, 0) + + return box + + def prover_widget(self) -> Gtk.Widget: + prover_model = Gtk.ListStore(str, str, int) + + for prover, comorphisms in self.node.global_theory().get_usable_provers_with_comorphisms().items(): + shortest_comorphism_path_len = min(c.path_length() for c in comorphisms) + prover_model.append([prover.name(), prover.name(), shortest_comorphism_path_len]) + + prover_model.set_sort_column_id(2, Gtk.SortType.ASCENDING) + + # prover_model.append(["P_Darwin", "Darwin"]) + # prover_model.append(["P_EProver", "EProver"]) + # prover_model.append(["P_Pellet", "Pellet"]) + # prover_model.append(["P_QuickCheck", "QuickCheck"]) + + prover_name_renderer = Gtk.CellRendererText(width_chars=-1, ellipsize=Pango.EllipsizeMode.END) + self.combo_prover: Gtk.ComboBox = Gtk.ComboBox.new_with_model(prover_model) + self.combo_prover.pack_start(prover_name_renderer, True) + self.combo_prover.add_attribute(prover_name_renderer, "text", 1) + if len(prover_model) > 0: + self.combo_prover.set_active(0) + + comorphism_model = Gtk.ListStore(str, str, str, int) + + for prover, comorphism in self.node.global_theory().get_usable_provers_and_comorphisms(): + comorphism_model.append([comorphism.name(), prover.name(), comorphism.name(), comorphism.path_length()]) + comorphism_model.set_sort_column_id(3, Gtk.SortType.ASCENDING) + + # comorphism_model.append(["C0", "id_OWL.EL-ALC-D|boolean| : OWL -> OWL"]) + # comorphism_model.append(["C1", "id_OWL.EL-ALC-D|boolean|;OWL2CASL;OWL2TPTP : OWL -> TPTP"]) + + comorphism_filtered: Gtk.TreeModelFilter = comorphism_model.filter_new() + comorphism_filtered.set_visible_func(self._comorphism_filter) + + comorphism_name_renderer = Gtk.CellRendererText(width_chars=-1, ellipsize=Pango.EllipsizeMode.END) + self.combo_comorphism: Gtk.ComboBox = Gtk.ComboBox.new_with_model(comorphism_filtered) + self.combo_comorphism.pack_start(comorphism_name_renderer, True) + self.combo_comorphism.add_attribute(comorphism_name_renderer, "text", 2) + + self._update_comorphisms(self.combo_comorphism) + self.combo_prover.connect("changed", self._update_comorphisms) + + grid = Gtk.Grid( + row_homogeneous=False, + column_spacing=14, + row_spacing=4 + ) + + grid.attach(Gtk.Label(label="Prover:", halign=Gtk.Align.START), 0, 1, 1, 1) + grid.attach(self.combo_prover, 1, 1, 1, 1) + grid.attach(Gtk.Label(label="Comorphism:", halign=Gtk.Align.START), 0, 2, 1, 1) + grid.attach(self.combo_comorphism, 1, 2, 1, 1) + + grid.attach(Gtk.Label(label="Sublogic of theory:", halign=Gtk.Align.START), 0, 3, 1, 1) + grid.attach(Gtk.Label(label="OWL.EL-ALC-D|boolean|", halign=Gtk.Align.START), 1, 3, 1, 1) + + return grid + + def prover_settings_widget(self) -> Gtk.Widget: + grid = Gtk.Grid( + row_homogeneous=False, + column_spacing=14, + row_spacing=4 + ) + + self.btn_timeout: Gtk.SpinButton = Gtk.SpinButton.new_with_range(0, 2 ** 32 - 1, 1) + self.btn_timeout.set_value(10) + + self.txt_extra_options = Gtk.Entry() + + self.switch_include_proven_theorems = Gtk.Switch(halign=Gtk.Align.END) + + grid.attach(Gtk.Label(label="Timeout in s:", halign=Gtk.Align.START, hexpand=True), 0, 1, 1, 1) + grid.attach(self.btn_timeout, 1, 1, 1, 1) + grid.attach(Gtk.Label(label="Extra options:", halign=Gtk.Align.START), 0, 2, 1, 1) + grid.attach(self.txt_extra_options, 1, 2, 1, 1) + grid.attach(Gtk.Label(label="Include proven theorems:", halign=Gtk.Align.START, + tooltip_text="Include preceding proven theorems in next proof attempt"), 0, 3, 1, 1) + grid.attach(self.switch_include_proven_theorems, 1, 3, 1, 1) + + return grid + + def on_prove_clicked(self, _): + self.proving_thread = threading.Thread(target=self._prove) + # self.proving_thread.daemon = True + self.proving_thread.start() + + def _comorphism_filter(self, model, iter, data): + prover_model = self.combo_prover.get_model() + active_prover_iter = self.combo_prover.get_active_iter() + + if active_prover_iter is not None: + prover_name = prover_model[active_prover_iter][0] + return model[iter][1] == prover_name + else: + return False + + def _update_comorphisms(self, _): + model = self.combo_comorphism.get_model() + model.refilter() + if len(model) > 0: + self.combo_comorphism.set_active(0) + + def _init_prove_progress(self): + self.btn_prove.set_sensitive(False) + self.notebook.set_current_page(1) + + for goal in self.goals_model: + if goal[1]: # if selected to be proven + goal[2] = 'Waiting...' + color = color_name_to_rgba("white") + goal[5] = color + + def _update_prove_progress(self, next_goal_name: Optional[str], prev_goal_name: Optional[str]): + if prev_goal_name is not None: + goal_row = next(iter(g for g in self.goals_model if g[0] == prev_goal_name), None) + goal = next(iter(g for g in self.node.global_theory().goals() if g.name() == prev_goal_name), None) + + if goal_row is not None: + color, text = self._goal_style(goal) + goal_row[2] = text + goal_row[5] = color + + if next_goal_name is not None: + goal_row = next(iter(g for g in self.goals_model if g[0] == next_goal_name), None) + if goal_row is not None: + goal_row[2] = 'Proving...' + + def _finish_prove_progress(self): + self.btn_prove.set_sensitive(True) + self.notebook.set_current_page(1) + + @property + def selected_comorphism(self) -> Optional[str]: + comorphism_model = self.combo_comorphism.get_model() + comorphism_index = self.combo_comorphism.get_active() + return comorphism_model[comorphism_index][0] if comorphism_index >= 0 else None + + def _prove(self): + GLib.idle_add(self._init_prove_progress) + + goals = [row[0] for row in self.goals_model if row[1]] + axioms = [row[0] for row in self.axioms_model if row[1]] + + prover_model = self.combo_prover.get_model() + prover_index = self.combo_prover.get_active() + prover = prover_model[prover_index][0] if prover_index >= 0 else None + + comorphism_name = self.selected_comorphism + comorphism = None if comorphism_name is None else next( + c for c in self.node.global_theory().get_available_comorphisms() if c.name() == comorphism_name) + + timeout = self.btn_timeout.get_value_as_int() + + include_theorems = self.switch_include_proven_theorems.get_active() + + prev_goal = None + for i, goal in enumerate(goals): + GLib.idle_add(self._update_prove_progress, goal, prev_goal) + + self.node.prove(self.node.global_theory().get_prover_by_name(prover), comorphism, include_theorems, [goal], + axioms, + timeout) + prev_goal = goal + + GLib.idle_add(self._update_prove_progress, None, prev_goal) + + GLib.idle_add(self._finish_prove_progress) + + def on_proof_details_clicked(self, widget, path): + goal_name = self.goals_model[path][0] + goal = next(iter(g for g in self.node.global_theory().goals() if g.name() == goal_name), None) + + if goal is not None: + details_window = ProofDetailsWindow(goal, self.node.global_theory()) + details_window.show_all() + details_window.present() diff --git a/python/hetsgui/windows/StartUpWindow.py b/python/hetsgui/windows/StartUpWindow.py new file mode 100644 index 0000000000..d72a1ce7fc --- /dev/null +++ b/python/hetsgui/windows/StartUpWindow.py @@ -0,0 +1,42 @@ +import os.path + +from gi.repository import Gtk, Gdk + + +class StartUpWindow(Gtk.Window): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + icon = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../hets.png")) + self.set_default_icon_from_file(icon) + + self.set_decorated(False) + self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) + self.set_resizable(False) + self.set_auto_startup_notification(False) + # self.set_skip_taskbar_hint(True) + self.set_skip_pager_hint(True) + + print(self.class_path()) + provider = Gtk.CssProvider() + provider.load_from_data(b""" + window { + background-color: blue; + background: linear-gradient(45deg, rgba(9,9,121,1) 0%, rgba(0,212,255,1) 100%); + color: white; + } + """) + self.get_style_context().add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, margin=14) + title = Gtk.Label() + title.set_markup('Hets - Heterogeneous Tool Set') + spinner = Gtk.Spinner(active=True) + info = Gtk.Label(label="Loading libraries ...") + + box.pack_start(title, True, False, 14) + box.pack_start(spinner, True, False, 4) + box.pack_start(info, True, False, 4) + + self.add(box) + self.show_all() From 0a7d9f91c0772579bccdb8d4db9922570da72565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:46:15 +0200 Subject: [PATCH 19/69] Refactoring to use Gtk Builder ui files for UI --- python/Dockerfile | 9 +- python/hets/BasicProof.py | 3 +- python/hets/ProofDetails.py | 36 +- python/hets/ProofKind.py | 26 ++ python/hets/Sentence.py | 3 +- python/hets/__init__.py | 3 +- python/hets/haskell/__init__.py | 1 - python/hetsgui/Makefile | 8 + python/hetsgui/hetsgui.py | 212 --------- python/hetsgui/src/GtkSmartTemplate.py | 24 + python/hetsgui/src/actions/model.py | 35 ++ python/hetsgui/src/application.py | 93 ++++ python/hetsgui/{ => src}/formatting/Colors.py | 0 python/hetsgui/src/hetsgui.gresource.xml | 12 + .../src/resources/application-menu.xml | 108 +++++ .../{hets.png => src/resources/icon.png} | Bin .../hetsgui/src/test-resource-application.py | 119 +++++ python/hetsgui/{ => src}/utils.py | 21 +- .../{ => src}/widgets/CellRendererLink.py | 3 +- .../{ => src}/widgets/EdgeInfoDialog.py | 0 .../hetsgui/src/widgets/ExtendedDotWidget.py | 20 + .../{ => src}/widgets/GraphvizGraphWidget.py | 4 + .../{ => src}/widgets/NodeInfoDialog.py | 0 python/hetsgui/src/widgets/ProofDetail.css | 12 + python/hetsgui/src/widgets/ProofDetail.py | 147 ++++++ python/hetsgui/src/widgets/ProofDetail.ui | 293 ++++++++++++ .../hetsgui/src/widgets/SelectableTreeView.py | 36 ++ python/hetsgui/src/widgets/__init__.py | 15 + .../hetsgui/{ => src}/windows/MainWindow.py | 4 +- .../hetsgui/src/windows/ProofDetailsWindow.py | 171 +++++++ .../hetsgui/src/windows/ProofDetailsWindow.ui | 21 + python/hetsgui/src/windows/ProveWindow.py | 183 ++++++++ python/hetsgui/src/windows/ProveWindow.ui | 420 ++++++++++++++++++ python/hetsgui/src/windows/StartUpWindow.css | 5 + python/hetsgui/src/windows/StartUpWindow.py | 18 + python/hetsgui/src/windows/StartUpWindow.ui | 69 +++ python/hetsgui/windows/ProofDetailsWindow.py | 150 ------- python/hetsgui/windows/ProveWindow.py | 382 ---------------- python/hetsgui/windows/StartUpWindow.py | 42 -- 39 files changed, 1874 insertions(+), 834 deletions(-) create mode 100644 python/hets/ProofKind.py create mode 100644 python/hetsgui/Makefile delete mode 100644 python/hetsgui/hetsgui.py create mode 100644 python/hetsgui/src/GtkSmartTemplate.py create mode 100644 python/hetsgui/src/actions/model.py create mode 100644 python/hetsgui/src/application.py rename python/hetsgui/{ => src}/formatting/Colors.py (100%) create mode 100644 python/hetsgui/src/hetsgui.gresource.xml create mode 100644 python/hetsgui/src/resources/application-menu.xml rename python/hetsgui/{hets.png => src/resources/icon.png} (100%) create mode 100644 python/hetsgui/src/test-resource-application.py rename python/hetsgui/{ => src}/utils.py (74%) rename python/hetsgui/{ => src}/widgets/CellRendererLink.py (91%) rename python/hetsgui/{ => src}/widgets/EdgeInfoDialog.py (100%) create mode 100644 python/hetsgui/src/widgets/ExtendedDotWidget.py rename python/hetsgui/{ => src}/widgets/GraphvizGraphWidget.py (96%) rename python/hetsgui/{ => src}/widgets/NodeInfoDialog.py (100%) create mode 100644 python/hetsgui/src/widgets/ProofDetail.css create mode 100644 python/hetsgui/src/widgets/ProofDetail.py create mode 100644 python/hetsgui/src/widgets/ProofDetail.ui create mode 100644 python/hetsgui/src/widgets/SelectableTreeView.py create mode 100644 python/hetsgui/src/widgets/__init__.py rename python/hetsgui/{ => src}/windows/MainWindow.py (99%) create mode 100644 python/hetsgui/src/windows/ProofDetailsWindow.py create mode 100644 python/hetsgui/src/windows/ProofDetailsWindow.ui create mode 100644 python/hetsgui/src/windows/ProveWindow.py create mode 100644 python/hetsgui/src/windows/ProveWindow.ui create mode 100644 python/hetsgui/src/windows/StartUpWindow.css create mode 100644 python/hetsgui/src/windows/StartUpWindow.py create mode 100644 python/hetsgui/src/windows/StartUpWindow.ui delete mode 100644 python/hetsgui/windows/ProofDetailsWindow.py delete mode 100644 python/hetsgui/windows/ProveWindow.py delete mode 100644 python/hetsgui/windows/StartUpWindow.py diff --git a/python/Dockerfile b/python/Dockerfile index 0d697a016b..46b1bd3288 100644 --- a/python/Dockerfile +++ b/python/Dockerfile @@ -1,12 +1,9 @@ FROM hets-api RUN apt-get update && apt-get upgrade -y -RUN apt-get install curl -RUN curl -o /tmp/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh -RUN bash /tmp/miniconda.sh -b -p /opt/miniconda/ +RUN apt-get install -y python3-gi python3-gi-cairo gir1.2-gtk-3.0 python3-pip graphviz -ENV PATH="${PATH}:/opt/miniconda/bin" +RUN pip3 install xdot numpy graphviz -COPY hetsgui/environment.yml /tmp/environment.yml -RUN conda env create -f /tmp/environment.yml --name app +ENV PYTHONPATH /hets/python/ diff --git a/python/hets/BasicProof.py b/python/hets/BasicProof.py index 9e6d3ea0fc..11f31efb5d 100644 --- a/python/hets/BasicProof.py +++ b/python/hets/BasicProof.py @@ -1,6 +1,7 @@ from typing import Optional -from .ProofDetails import ProofDetails, ProofKind +from .ProofDetails import ProofDetails +from .ProofKind import ProofKind from .haskell import PyBasicProof, PyBasicProofGuessed, PyBasicProofConjectured, PyBasicProofHandwritten, \ pyProofStatusOfPyBasicProof, Just, fromJust diff --git a/python/hets/ProofDetails.py b/python/hets/ProofDetails.py index bec82517c5..b8a6d71ef5 100644 --- a/python/hets/ProofDetails.py +++ b/python/hets/ProofDetails.py @@ -4,36 +4,12 @@ License : GPLv2 or higher, see LICENSE.txt """ from datetime import datetime, timedelta -from enum import Enum - -from .haskell import ProofStatus as ProofStatusHs, GoalStatus, TimeOfDay, tacticScriptContent, Open, Proved, Disproved, show - -from typing import Any, List, Optional - - -class ProofKind(Enum): - UNKNOWN = -1 - OPEN = 1 - PROVEN = 2 - PROVEN_BY_INCONSISTENCY = 3 - DISPROVEN = 4 - TIMED_OUT = 5 - GUESSED = 6 - CONJECTURED = 7 - HANDWRITTEN = 8 - - def to_str(self) -> str: - return { - ProofKind.UNKNOWN: "Unknown", - ProofKind.OPEN: "Open", - ProofKind.PROVEN: "Proven", - ProofKind.PROVEN_BY_INCONSISTENCY: "Proven by inconsistency", - ProofKind.DISPROVEN: "Disproven", - ProofKind.TIMED_OUT: "Timed out", - ProofKind.GUESSED: "Guessed", - ProofKind.CONJECTURED: "Conjectured", - ProofKind.HANDWRITTEN: "Handwritten" - }[self] + +from .haskell import ProofStatus as ProofStatusHs, GoalStatus, tacticScriptContent, Open, Proved, Disproved, show + +from .ProofKind import ProofKind + +from typing import List, Optional class ProofDetails: diff --git a/python/hets/ProofKind.py b/python/hets/ProofKind.py new file mode 100644 index 0000000000..09ff2634fd --- /dev/null +++ b/python/hets/ProofKind.py @@ -0,0 +1,26 @@ +from enum import Enum + + +class ProofKind(Enum): + UNKNOWN = -1 + OPEN = 1 + PROVEN = 2 + PROVEN_BY_INCONSISTENCY = 3 + DISPROVEN = 4 + TIMED_OUT = 5 + GUESSED = 6 + CONJECTURED = 7 + HANDWRITTEN = 8 + + def to_str(self) -> str: + return { + ProofKind.UNKNOWN: "Unknown", + ProofKind.OPEN: "Open", + ProofKind.PROVEN: "Proven", + ProofKind.PROVEN_BY_INCONSISTENCY: "Proven by inconsistency", + ProofKind.DISPROVEN: "Disproven", + ProofKind.TIMED_OUT: "Timed out", + ProofKind.GUESSED: "Guessed", + ProofKind.CONJECTURED: "Conjectured", + ProofKind.HANDWRITTEN: "Handwritten" + }[self] diff --git a/python/hets/Sentence.py b/python/hets/Sentence.py index 40f3912333..9dac36cdae 100644 --- a/python/hets/Sentence.py +++ b/python/hets/Sentence.py @@ -14,7 +14,8 @@ from .Comorphism import Comorphism from .BasicProof import BasicProof -from .ProofDetails import ProofDetails, ProofKind +from .ProofDetails import ProofDetails +from hets import ProofKind from .HsWrapper import HsHierarchyElement diff --git a/python/hets/__init__.py b/python/hets/__init__.py index 0b94e53332..531204cb23 100644 --- a/python/hets/__init__.py +++ b/python/hets/__init__.py @@ -14,7 +14,8 @@ from .Library import Library, load_library from .Logic import Logic from .ProofState import ProofState -from .ProofDetails import ProofDetails, ProofKind +from .ProofDetails import ProofDetails +from .ProofKind import ProofKind from .Prover import Prover from .Sentence import Sentence from .Signature import Signature diff --git a/python/hets/haskell/__init__.py b/python/hets/haskell/__init__.py index d1c965f6ef..1410744293 100644 --- a/python/hets/haskell/__init__.py +++ b/python/hets/haskell/__init__.py @@ -1,5 +1,4 @@ from .base import * -import hyphen from .ByteString import * from .Internal import * diff --git a/python/hetsgui/Makefile b/python/hetsgui/Makefile new file mode 100644 index 0000000000..9d03051be7 --- /dev/null +++ b/python/hetsgui/Makefile @@ -0,0 +1,8 @@ +GLIB_COMPILE_RESOURCES = $(shell which glib-compile-resources ) + +.PHONY: resources + +src/hetsgui.gresource: src/hetsgui.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir="src/" src/hetsgui.gresource.xml) + glib-compile-resources --sourcedir="src/" $< --target=$@ + + diff --git a/python/hetsgui/hetsgui.py b/python/hetsgui/hetsgui.py deleted file mode 100644 index b182144557..0000000000 --- a/python/hetsgui/hetsgui.py +++ /dev/null @@ -1,212 +0,0 @@ -import sys -import threading -import time - -import gi - -gi.require_version("Gtk", "3.0") -from gi.repository import GLib, Gtk, Gio - -class MyApplication(Gtk.Application): - def __init__(self): - super().__init__( - application_id="eu.hets.hets", - flags=Gio.ApplicationFlags.HANDLES_OPEN) - GLib.set_application_name("Hets") - self.set_option_context_parameter_string("FILE") - - self.connect("open", self.on_open) - - self.window = None - self.file = None - - def _set_menu(self): - file_menu = Gio.Menu() - - menu_entry_open = Gio.MenuItem() - menu_entry_open.set_label("Open") - menu_entry_open.set_action_and_target_value("win.open_file", None) - file_menu.append_item(menu_entry_open) - - view_menu = Gio.Menu() - menu_entry_show_hide_names = Gio.MenuItem() - menu_entry_show_hide_names.set_label("Show internal names") - menu_entry_show_hide_names.set_action_and_target_value("win.toggle_show_names", None) - view_menu.append_item(menu_entry_show_hide_names) - - menu_entry_show_hide_nodes = Gio.MenuItem() - menu_entry_show_hide_nodes.set_label("Show unnamed nodes without open proofs") - menu_entry_show_hide_nodes.set_action_and_target_value("win.toggle_show_nodes", None) - view_menu.append_item(menu_entry_show_hide_nodes) - - menu_entry_show_hide_edges = Gio.MenuItem() - menu_entry_show_hide_edges.set_label("Show newly added proven edges") - menu_entry_show_hide_edges.set_action_and_target_value("win.toggle_show_edges", None) - view_menu.append_item(menu_entry_show_hide_edges) - - proof_menu = Gio.Menu() - menu_entry_automatic = Gio.MenuItem() - menu_entry_automatic.set_label("Apply proof rules automatically") - menu_entry_automatic.set_action_and_target_value("win.proofs.automatic", None) - proof_menu.append_item(menu_entry_automatic) - - menu_entry_global_subsume = Gio.MenuItem() - menu_entry_global_subsume.set_label("Global-Subsumption") - menu_entry_global_subsume.set_action_and_target_value("win.proofs.global_subsume", None) - proof_menu.append_item(menu_entry_global_subsume) - - menu_entry_global_decomposition = Gio.MenuItem() - menu_entry_global_decomposition.set_label("Global-Decomposition") - menu_entry_global_decomposition.set_action_and_target_value("win.proofs.global_decomposition", None) - proof_menu.append_item(menu_entry_global_decomposition) - - menu_entry_local_inference = Gio.MenuItem() - menu_entry_local_inference.set_label("Local-Inference") - menu_entry_local_inference.set_action_and_target_value("win.proofs.local_inference", None) - proof_menu.append_item(menu_entry_local_inference) - - menu_entry_local_decomposition = Gio.MenuItem() - menu_entry_local_decomposition.set_label("Local-Decomposition") - menu_entry_local_decomposition.set_action_and_target_value("win.proofs.local_decomposition", None) - proof_menu.append_item(menu_entry_local_decomposition) - - menu_entry_composition_prove_edges = Gio.MenuItem() - menu_entry_composition_prove_edges.set_label("Prove composed edges") - menu_entry_composition_prove_edges.set_action_and_target_value("win.proofs.composition_prove_edges", None) - proof_menu.append_item(menu_entry_composition_prove_edges) - - menu_entry_conservativity = Gio.MenuItem() - menu_entry_conservativity.set_label("Conservativity") - menu_entry_conservativity.set_action_and_target_value("win.proofs.conservativity", None) - proof_menu.append_item(menu_entry_conservativity) - - menu_entry_automatic_hide_theorem_shift = Gio.MenuItem() - menu_entry_automatic_hide_theorem_shift.set_label("Hide-Theorem-Shift") - menu_entry_automatic_hide_theorem_shift.set_action_and_target_value("win.proofs.automatic_hide_theorem_shift", None) - proof_menu.append_item(menu_entry_automatic_hide_theorem_shift) - - menu_entry_theorem_hide_shift = Gio.MenuItem() - menu_entry_theorem_hide_shift.set_label("Theorem-Hide-Shift") - menu_entry_theorem_hide_shift.set_action_and_target_value("win.proofs.theorem_hide_shift", None) - proof_menu.append_item(menu_entry_theorem_hide_shift) - - menu_entry_compute_colimit = Gio.MenuItem() - menu_entry_compute_colimit.set_label("Compute colimit") - menu_entry_compute_colimit.set_action_and_target_value("win.proofs.compute_colimit", None) - proof_menu.append_item(menu_entry_compute_colimit) - - menu_entry_normal_form = Gio.MenuItem() - menu_entry_normal_form.set_label("Compute normal form") - menu_entry_normal_form.set_action_and_target_value("win.proofs.normal_form", None) - proof_menu.append_item(menu_entry_normal_form) - - menu_entry_triangle_cons = Gio.MenuItem() - menu_entry_triangle_cons.set_label("Triangle-Cons") - menu_entry_triangle_cons.set_action_and_target_value("win.proofs.triangle_cons", None) - proof_menu.append_item(menu_entry_triangle_cons) - - menu_entry_freeness = Gio.MenuItem() - menu_entry_freeness.set_label("Freeness") - menu_entry_freeness.set_action_and_target_value("win.proofs.freeness", None) - proof_menu.append_item(menu_entry_freeness) - - menu_entry_lib_flat_imports = Gio.MenuItem() - menu_entry_lib_flat_imports.set_label("Flatten imports") - menu_entry_lib_flat_imports.set_action_and_target_value("win.proofs.lib_flat_imports", None) - proof_menu.append_item(menu_entry_lib_flat_imports) - - menu_entry_lib_flat_d_unions = Gio.MenuItem() - menu_entry_lib_flat_d_unions.set_label("Flatten D-unions") - menu_entry_lib_flat_d_unions.set_action_and_target_value("win.proofs.lib_flat_d_unions", None) - proof_menu.append_item(menu_entry_lib_flat_d_unions) - - menu_entry_lib_flat_renamings = Gio.MenuItem() - menu_entry_lib_flat_renamings.set_label("Flatten renamings") - menu_entry_lib_flat_renamings.set_action_and_target_value("win.proofs.lib_flat_renamings", None) - proof_menu.append_item(menu_entry_lib_flat_renamings) - - menu_entry_lib_flat_hiding = Gio.MenuItem() - menu_entry_lib_flat_hiding.set_label("Flatten hiding") - menu_entry_lib_flat_hiding.set_action_and_target_value("win.proofs.lib_flat_hiding", None) - proof_menu.append_item(menu_entry_lib_flat_hiding) - - menu_entry_lib_flat_heterogen = Gio.MenuItem() - menu_entry_lib_flat_heterogen.set_label("Flatten heterogen") - menu_entry_lib_flat_heterogen.set_action_and_target_value("win.proofs.lib_flat_heterogen", None) - proof_menu.append_item(menu_entry_lib_flat_heterogen) - - menu_entry_qualify_lib_env = Gio.MenuItem() - menu_entry_qualify_lib_env.set_label("Qualify lib env") - menu_entry_qualify_lib_env.set_action_and_target_value("win.proofs.qualify_lib_env", None) - proof_menu.append_item(menu_entry_qualify_lib_env) - - menu = Gio.Menu() - menu.append_submenu("File", file_menu) - menu.append_submenu("View", view_menu) - menu.append_submenu("Proofs", proof_menu) - self.set_menubar(menu) - - def do_startup(self): - Gtk.Application.do_startup(self) - self._set_menu() - - def on_action_open_file(self, action, parameter): - print("Hello World!") - - def do_command_line(self, command_line): - options = command_line.get_options_dict() - # convert GVariantDict -> GVariant -> dict - options = options.end().unpack() - - self.activate() - return 0 - - def on_open(self, a, files, n_files, hint): - if n_files != 1: - print("Expected exactly one file") - return 1 - - self.file = files[0].get_path() - self.do_activate() - - def do_activate(self): - if not self.window: - # from windows.ProveDialog import ProveDialog - # self.window = ProveDialog(application=self) - - from windows.StartUpWindow import StartUpWindow - startup_window = StartUpWindow(application=self) - startup_window.show_all() - startup_window.present() - - self.window = startup_window - - def start_up_done(): - from windows.MainWindow import MainWindow - - self.window = MainWindow(application=self) - startup_window.close() - - if self.file: - self.window.open_file(self.file) - - self.window.show_all() - self.window.present() - - # noinspection PyUnresolvedReferences - def start_up(): - import hets - import windows.MainWindow - - GLib.idle_add(start_up_done) - - t = threading.Thread(target=start_up) - t.start() - - self.window.show_all() - self.window.present() - - -app = MyApplication() -exit_status = app.run(sys.argv) -sys.exit(exit_status) diff --git a/python/hetsgui/src/GtkSmartTemplate.py b/python/hetsgui/src/GtkSmartTemplate.py new file mode 100644 index 0000000000..6b0315c724 --- /dev/null +++ b/python/hetsgui/src/GtkSmartTemplate.py @@ -0,0 +1,24 @@ +from gi.repository import Gtk + +from utils import resource_exist + + +def GtkSmartTemplate(original_class): + resource_name = original_class.__module__.replace(".", "/") + style_resource_name = f"/eu/hets/gui/{resource_name}.css" + + original_init = original_class.__init__ + + def new_init(self, *args, **kwargs): + original_init(self, *args, **kwargs) + + if resource_exist(style_resource_name): + self._provider = Gtk.CssProvider() + self._provider.load_from_resource(style_resource_name) + self.get_style_context().add_provider_for_screen(self.get_screen(), self._provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + + self.connect("destroy", lambda w: self.get_style_context().remove_provider_for_screen(self.get_screen(), self._provider)) + + original_class.__init__ = new_init + + return Gtk.Template(resource_path=f"/eu/hets/gui/{resource_name}.ui")(original_class) diff --git a/python/hetsgui/src/actions/model.py b/python/hetsgui/src/actions/model.py new file mode 100644 index 0000000000..b9068bf67f --- /dev/null +++ b/python/hetsgui/src/actions/model.py @@ -0,0 +1,35 @@ +import gi +from gi.repository import Gio, GLib, Gtk + + +def toggle_tree_view_header_cell_handler(column: Gtk.TreeViewColumn, index=1): + tree_view: Gtk.TreeView = column.get_tree_view() + model = tree_view.get_model() + widget = column.get_widget() + + if not isinstance(widget, Gtk.CheckButton): + return + + new_state = not (widget.get_inconsistent() or widget.get_active()) + + for row in model: + row[index] = new_state + + widget.set_inconsistent(False) + widget.set_active(new_state) + + +def toggle_tree_view_cell_handler(toggle_column: Gtk.TreeViewColumn, path: str, index=1): + tree_view: Gtk.TreeView = toggle_column.get_tree_view() + model = tree_view.get_model() + + header = toggle_column.get_widget() + + next_state = not model[path][index] + + model[path][index] = next_state + + if header is not None and isinstance(header, Gtk.CheckButton): + consistent = all(row[index] == next_state for row in model) + header.set_inconsistent(not consistent) + header.set_active(next_state) diff --git a/python/hetsgui/src/application.py b/python/hetsgui/src/application.py new file mode 100644 index 0000000000..8ea24160e4 --- /dev/null +++ b/python/hetsgui/src/application.py @@ -0,0 +1,93 @@ +import os.path +import sys +import threading + +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import GLib, Gtk, Gio + + +class HetsApplication(Gtk.Application): + def __init__(self): + super().__init__( + application_id="eu.hets.gui", + flags=Gio.ApplicationFlags.HANDLES_OPEN) + GLib.set_application_name("Hets") + self.set_option_context_parameter_string("FILE") + + self.connect("open", self.on_open) + + self.window = None + self.file = None + + pgk_dir = os.path.dirname(os.path.realpath(__file__)) + resource_file = os.path.join(pgk_dir, "hetsgui.gresource") + resource: Gio.Resource = Gio.resource_load(resource_file) + Gio.resources_register(resource) + + def do_startup(self): + Gtk.Application.do_startup(self) + builder = Gtk.Builder.new_from_resource("/eu/hets/gui/resources/application-menu.xml") + menubar = builder.get_object("app-menu") + + self.set_menubar(menubar) + + def on_action_open_file(self, action, parameter): + print("Hello World!") + + def do_command_line(self, command_line): + options = command_line.get_options_dict() + # convert GVariantDict -> GVariant -> dict + options = options.end().unpack() + + self.activate() + return 0 + + def on_open(self, a, files, n_files, hint): + if n_files != 1: + print("Expected exactly one file") + return 1 + + self.file = files[0].get_path() + self.do_activate() + + def do_activate(self): + if not self.window: + from windows.StartUpWindow import StartUpWindow + startup_window = StartUpWindow(application=self) + startup_window.show_all() + startup_window.present() + + self.window = startup_window + + def start_up_done(): + from windows.MainWindow import MainWindow + + self.window = MainWindow(application=self) + startup_window.close() + + if self.file: + self.window.open_file(self.file) + + self.window.show_all() + self.window.present() + + # noinspection PyUnresolvedReferences + def start_up(): + import hets + import windows.MainWindow + import widgets + + GLib.idle_add(start_up_done) + + t = threading.Thread(target=start_up) + t.start() + + self.window.show_all() + self.window.present() + + +app = HetsApplication() +exit_status = app.run(sys.argv) +sys.exit(exit_status) diff --git a/python/hetsgui/formatting/Colors.py b/python/hetsgui/src/formatting/Colors.py similarity index 100% rename from python/hetsgui/formatting/Colors.py rename to python/hetsgui/src/formatting/Colors.py diff --git a/python/hetsgui/src/hetsgui.gresource.xml b/python/hetsgui/src/hetsgui.gresource.xml new file mode 100644 index 0000000000..ab00118f78 --- /dev/null +++ b/python/hetsgui/src/hetsgui.gresource.xml @@ -0,0 +1,12 @@ + + + + windows/StartUpWindow.ui + windows/StartUpWindow.css + windows/ProveWindow.ui + windows/ProofDetailsWindow.ui + widgets/ProofDetail.ui + widgets/ProofDetail.css + resources/application-menu.xml + + diff --git a/python/hetsgui/src/resources/application-menu.xml b/python/hetsgui/src/resources/application-menu.xml new file mode 100644 index 0000000000..79b9cf70dc --- /dev/null +++ b/python/hetsgui/src/resources/application-menu.xml @@ -0,0 +1,108 @@ + + + +

    + + File + + Open + win.open_file + + + + View + + Show internal names + win.toggle_show_names + + + Show unnamed nodes without open proofs + win.toggle_show_nodes + + + Show newly added proven edges + win.toggle_show_edges + + + + Proofs + + Apply proof rules automatically + win.proofs.automatic + + + Global-Subsumption + win.proofs.global_subsume + + + Global-Decomposition + win.proofs.global_decomposition + + + Local-Inference + win.proofs.local_inference + + + Local-Decomposition + win.proofs.local_decomposition + + + Prove composed edges + win.proofs.composition_prove_edges + + + Conservativity + win.proofs.conservativity + + + Hide-Theorem-Shift + win.proofs.automatic_hide_theorem_shift + + + Theorem-Hide-Shift + win.proofs.theorem_hide_shift + + + Compute colimit + win.proofs.compute_colimit + + + Compute normal form + win.proofs.normal_form + + + Triangle-Cons + win.proofs.triangle_cons + + + Freeness + win.proofs.freeness + + + Flatten imports + win.proofs.lib_flat_imports + + + Flatten D-unions + win.proofs.lib_flat_d_unions + + + Flatten renamings + win.proofs.lib_flat_renamings + + + Flatten hiding + win.proofs.lib_flat_hiding + + + Flatten heterogen + win.proofs.lib_flat_heterogen + + + Qualify lib env + win.proofs.qualify_lib_env + + + + + diff --git a/python/hetsgui/hets.png b/python/hetsgui/src/resources/icon.png similarity index 100% rename from python/hetsgui/hets.png rename to python/hetsgui/src/resources/icon.png diff --git a/python/hetsgui/src/test-resource-application.py b/python/hetsgui/src/test-resource-application.py new file mode 100644 index 0000000000..13c159fe9b --- /dev/null +++ b/python/hetsgui/src/test-resource-application.py @@ -0,0 +1,119 @@ +import os.path +import sys +from typing import List + +import gi + +from utils import resource_exist + +gi.require_version("Gtk", "3.0") + + +from gi.repository import Gtk, Gio, GObject + + +def get_test_window_for_resource(resource_name: str): + name = resource_name.split("/")[-1] + style_resource_name = f"{resource_name}.css" + + @Gtk.Template(resource_path=f"{resource_name}.ui") + class PreviewWindow(Gtk.Window): + __gtype_name__ = name + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + if resource_exist(style_resource_name): + provider = Gtk.CssProvider() + provider.load_from_resource(style_resource_name) + self.get_style_context().add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + + return PreviewWindow + + +class ResourceSelectorWindow(Gtk.Window): + __gsignals__ = { + "preview-resource": (GObject.SignalFlags.RUN_FIRST, None, (str,)) + } + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + def collect_resources(path: str): + rs: List[str] = Gio.resources_enumerate_children(path, 0) + result = [] + for resource in rs: + if resource.endswith("Window.ui"): + result.append(path + resource[:-3]) + elif resource.endswith("/"): + result += collect_resources(path + resource) + + return result + + resources = collect_resources("/eu/hets/gui/") + resource_model = Gtk.ListStore(str) + + for r in resources: + resource_model.append([r]) + + self.combo: Gtk.ComboBox = Gtk.ComboBox.new_with_model(resource_model) + renderer_text = Gtk.CellRendererText() + self.combo.pack_start(renderer_text, True) + self.combo.add_attribute(renderer_text, "text", 0) + self.combo.set_active(0) + + button = Gtk.Button(label="Open") + button.connect("clicked", self.on_open_clicked) + + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + box.pack_start(self.combo, False, False, 0) + box.pack_start(button, False, False, 0) + + self.add(box) + + def on_open_clicked(self, widget): + resource_model = self.combo.get_model() + selected = self.combo.get_active() + resource = resource_model[selected][0] + self.emit("preview-resource", resource) + + +class PreviewApplication(Gtk.Application): + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.window = None + + pgk_dir = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "")) + resource_file = os.path.join(pgk_dir, "hetsgui.gresource") + resource: Gio.Resource = Gio.resource_load(resource_file) + Gio.resources_register(resource) + + # noinspection PyUnresolvedReferences + import widgets + + def do_activate(self): + if not self.window: + resource_selector_window = ResourceSelectorWindow(application=self) + resource_selector_window.connect("preview-resource", self.preview_resource) + + self.window = resource_selector_window + + self.window.show_all() + self.window.present() + + def preview_resource(self, widget, resource): + if self.window is not None: + self.window.close() + + template_window = get_test_window_for_resource(resource)(application=self) + self.window = template_window + + self.window.show_all() + self.window.present() + + + +if __name__ == "__main__": + app = PreviewApplication() + exit_status = app.run(sys.argv) + sys.exit(exit_status) diff --git a/python/hetsgui/utils.py b/python/hetsgui/src/utils.py similarity index 74% rename from python/hetsgui/utils.py rename to python/hetsgui/src/utils.py index 7a3c2465e1..df16e3be9f 100644 --- a/python/hetsgui/utils.py +++ b/python/hetsgui/src/utils.py @@ -1,9 +1,7 @@ - - - +import re from typing import Any -from gi.repository import GLib +from gi.repository import GLib, Gio def get_variant(data: Any) -> GLib.Variant: # Source: https://gitlab.gnome.org/GNOME/gnome-browser-connector/-/blob/master/gnome_browser_connector/helpers.py @@ -39,3 +37,18 @@ def get_variant(data: Any) -> GLib.Variant: else: raise Exception(f"Unknown data type: {type(data)}") + +def resource_exist(resource_path: str) -> bool: + segments = [s for s in re.split(r"([^/]+/)", resource_path) if s] + segments.reverse() + path = segments.pop() + while segments: + segment = segments.pop() + children = Gio.resources_enumerate_children(path, 0) + if segment not in children: + return False + path += segment + return True + + + diff --git a/python/hetsgui/widgets/CellRendererLink.py b/python/hetsgui/src/widgets/CellRendererLink.py similarity index 91% rename from python/hetsgui/widgets/CellRendererLink.py rename to python/hetsgui/src/widgets/CellRendererLink.py index 84ce10a3b8..3316b09ea5 100644 --- a/python/hetsgui/widgets/CellRendererLink.py +++ b/python/hetsgui/src/widgets/CellRendererLink.py @@ -4,12 +4,11 @@ class CellRendererLink(Gtk.CellRendererText): __gsignals__ = {"clicked": (GObject.SIGNAL_RUN_FIRST, None, (str,))} + __gtype_name__ = "CellRendererLink" def __init__(self, **kwargs): super().__init__() self.set_property("mode", Gtk.CellRendererMode.ACTIVATABLE) - self.button = Gtk.Button() - def do_activate(self, event, widget, path, background_area, cell_area, flags): self.emit('clicked', path) diff --git a/python/hetsgui/widgets/EdgeInfoDialog.py b/python/hetsgui/src/widgets/EdgeInfoDialog.py similarity index 100% rename from python/hetsgui/widgets/EdgeInfoDialog.py rename to python/hetsgui/src/widgets/EdgeInfoDialog.py diff --git a/python/hetsgui/src/widgets/ExtendedDotWidget.py b/python/hetsgui/src/widgets/ExtendedDotWidget.py new file mode 100644 index 0000000000..acf347a553 --- /dev/null +++ b/python/hetsgui/src/widgets/ExtendedDotWidget.py @@ -0,0 +1,20 @@ +import gi +from gi.repository import Gtk, GObject + +from xdot import DotWidget + + +class ExtendedDotWidget(DotWidget): + __gtype_name__ = "ExtendedDotWidget" + + dotcode = GObject.Property(type=str) + + def __init__(self): + super().__init__() + + self.connect("notify::dotcode", self.on_dotcode_changed) + + def on_dotcode_changed(self, widget, param): + dotcode = self.dotcode.encode("utf8") + + self.set_dotcode(dotcode) diff --git a/python/hetsgui/widgets/GraphvizGraphWidget.py b/python/hetsgui/src/widgets/GraphvizGraphWidget.py similarity index 96% rename from python/hetsgui/widgets/GraphvizGraphWidget.py rename to python/hetsgui/src/widgets/GraphvizGraphWidget.py index 687bcf1d95..f4bc08b565 100644 --- a/python/hetsgui/widgets/GraphvizGraphWidget.py +++ b/python/hetsgui/src/widgets/GraphvizGraphWidget.py @@ -131,6 +131,10 @@ def __init__(self): self.g = None self.development_graph = None + settings: Gtk.Settings = Gtk.Settings.get_for_screen(self.get_screen()) + settings.connect("notify::gtk-theme-name", lambda w, p: self.render()) + settings.connect("notify::gtk-application-prefer-dark-theme", lambda w, p: self.render()) + def load_graph(self, graph: DevelopmentGraph): self.development_graph = graph self.g = Digraph("G") diff --git a/python/hetsgui/widgets/NodeInfoDialog.py b/python/hetsgui/src/widgets/NodeInfoDialog.py similarity index 100% rename from python/hetsgui/widgets/NodeInfoDialog.py rename to python/hetsgui/src/widgets/NodeInfoDialog.py diff --git a/python/hetsgui/src/widgets/ProofDetail.css b/python/hetsgui/src/widgets/ProofDetail.css new file mode 100644 index 0000000000..e5841412c4 --- /dev/null +++ b/python/hetsgui/src/widgets/ProofDetail.css @@ -0,0 +1,12 @@ +.axiom { + background: #00BBFF; +} + +.proof-tree { + background: white; +} + +.proof-lines { + font-family: monospace; + background: @theme_base_color; +} diff --git a/python/hetsgui/src/widgets/ProofDetail.py b/python/hetsgui/src/widgets/ProofDetail.py new file mode 100644 index 0000000000..31623f56b7 --- /dev/null +++ b/python/hetsgui/src/widgets/ProofDetail.py @@ -0,0 +1,147 @@ +import re +import typing +from enum import Enum + +import gi +from gi.repository import Gtk, GObject, Gio + +from formatting.Colors import PROOF_KIND_FG_COLORS +from hets import BasicProof, Comorphism + +from GtkSmartTemplate import GtkSmartTemplate +from widgets import ExtendedDotWidget + + +class AxiomModel(GObject.GObject): + def __init__(self, name: str, sentence: typing.Optional[str]): + GObject.GObject.__init__(self) + self.name = name + self.sentence = sentence + + +@GtkSmartTemplate +class ProofDetail(Gtk.Bin): + __gtype_name__ = "ProofDetail" + + proof = GObject.Property(type=object) + comorphism = GObject.Property(type=object) + theory = GObject.Property(type=object) + + _lbl_title: Gtk.Label = Gtk.Template.Child() + _lbl_prover: Gtk.Label = Gtk.Template.Child() + _lbl_comorphism: Gtk.Label = Gtk.Template.Child() + _lbl_used_time: Gtk.Label = Gtk.Template.Child() + _lbl_status: Gtk.Label = Gtk.Template.Child() + _lbl_proof_lines: Gtk.Label = Gtk.Template.Child() + + _dot_proof_tree: ExtendedDotWidget = Gtk.Template.Child() + + _lbl_ts_time: Gtk.Label = Gtk.Template.Child() + _lbl_ts_time_value: Gtk.Label = Gtk.Template.Child() + _lbl_ts_opts: Gtk.Label = Gtk.Template.Child() + _lbl_ts_opts_value: Gtk.Label = Gtk.Template.Child() + _lbl_ts: Gtk.Label = Gtk.Template.Child() + _lbl_ts_value: Gtk.Label = Gtk.Template.Child() + + _box_axioms: Gtk.FlowBox = Gtk.Template.Child() + + _model_axioms: Gio.ListStore + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self._model_axioms = Gio.ListStore.new(AxiomModel) + + self.connect("notify::comorphism", self.on_comorphism_changed) + self.connect("notify::proof", self.on_proof_changed) + self.connect("notify::theory", self.update_axioms) + + self._box_axioms.bind_model(self._model_axioms, self.create_axiom_widget) + + def create_axiom_widget(self, item, *args): + label = Gtk.Label(label=item.name, tooltip_text=str(item.sentence) if item.sentence else item.name) + label.get_style_context().add_class("axiom") + return label + + def on_proof_changed(self, widget, param): + self._lbl_prover.set_label(self.proof.details().used_prover()) + self._lbl_prover.set_tooltip_text(self.proof.details().used_prover()) + self._lbl_status.set_markup(f"{self.proof.kind().to_str()}") + self._lbl_used_time.set_label(str(self.proof.details().used_time())) + + proof_lines = self.proof.details().proof_lines() + self._lbl_proof_lines.set_text("\n".join(proof_lines)) + self._lbl_proof_lines.set_lines(len(proof_lines)) + + self._dot_proof_tree.dotcode = self.proof.details().proof_tree() + + self.update_tactic_script() + self.update_axioms() + self.update_title() + + def on_comorphism_changed(self, widget, param): + self._lbl_comorphism.set_label(self.comorphism.name()) + self._lbl_comorphism.set_tooltip_text(self.comorphism.name()) + + self.update_title() + + def update_title(self): + if not (self.comorphism and self.proof): + return + + color = PROOF_KIND_FG_COLORS[self.proof.kind()] + + self._lbl_title.set_markup( + f"{self.proof.kind().to_str()} with {self.proof.details().used_prover()} via {self.comorphism.name()}") + + def update_axioms(self, *args): + if not (self.proof and self.theory): + return + + self._model_axioms.remove_all() + for axiom in self.proof.details().used_axioms(): + sentence = self.theory.sentence_by_name(axiom) + self._model_axioms.append(AxiomModel(axiom, sentence)) + + def update_tactic_script(self): + ts_regex = [ + re.compile(r"^ATPTacticScript \{tsTimeLimit = (\d+), tsExtraOpts = \[(.*)\]\}$"), + re.compile(r"^TacticScript \{timeLimit = (\d+), extraOptions = \[(.*)\]\}$") + ] + ts_time, ts_opts = None, None + + tactic_script = self.proof.details().tactic_script() + for regex in ts_regex: + match = regex.match(tactic_script) + if match: + ts_time = match.group(1) + ts_opts_list = match.group(2) + list_regex = re.compile(r"\"((?:\\\"|[^\"])*)\"") + ts_opts = [] + for match in list_regex.finditer(ts_opts_list): + ts_opts.append(match.group(1)) + + ts_opts = " ".join(ts_opts) + + break + + if ts_time is None and ts_opts is None: + self._lbl_ts_time.set_visible(False) + self._lbl_ts_time_value.set_visible(False) + self._lbl_ts_opts.set_visible(False) + self._lbl_ts_opts_value.set_visible(False) + self._lbl_ts.set_visible(True) + self._lbl_ts_value.set_visible(True) + + self._lbl_ts_value.set_label(tactic_script) + + else: + self._lbl_ts_time.set_visible(True) + self._lbl_ts_time_value.set_visible(True) + self._lbl_ts_opts.set_visible(True) + self._lbl_ts_opts_value.set_visible(True) + self._lbl_ts.set_visible(False) + self._lbl_ts_value.set_visible(False) + + self._lbl_ts_time_value.set_label(f"{ts_time}s") + self._lbl_ts_opts_value.set_label(ts_opts) diff --git a/python/hetsgui/src/widgets/ProofDetail.ui b/python/hetsgui/src/widgets/ProofDetail.ui new file mode 100644 index 0000000000..eb9d4ce75b --- /dev/null +++ b/python/hetsgui/src/widgets/ProofDetail.ui @@ -0,0 +1,293 @@ + + + + + + + + + + + diff --git a/python/hetsgui/src/widgets/SelectableTreeView.py b/python/hetsgui/src/widgets/SelectableTreeView.py new file mode 100644 index 0000000000..453d7c3e8e --- /dev/null +++ b/python/hetsgui/src/widgets/SelectableTreeView.py @@ -0,0 +1,36 @@ +import gi +from gi.repository import Gtk, GObject + +from actions.model import toggle_tree_view_cell_handler, toggle_tree_view_header_cell_handler + + +class SelectableTreeView(Gtk.TreeView): + __gtype_name__ = "SelectableTreeView" + + @GObject.Property(type=int, default=0) + def selected_column(self) -> int: + return self._selected_column + + @selected_column.setter + def selected_column(self, cid: int): + self._selected_column = cid + self._column.add_attribute(self._cell_renderer, "active", cid) + + def __init__(self, **kwargs): + Gtk.TreeView.__init__(self) + + self._selected_column = 0 + + self._column = Gtk.TreeViewColumn() + self._column.set_clickable(True) + + self._cell_renderer = Gtk.CellRendererToggle() + self._cell_renderer.connect_object("toggled", toggle_tree_view_cell_handler, self._column) + self._column.pack_start(self._cell_renderer, False) + + self._header_switch = Gtk.CheckButton(active=True) + self._header_switch.show_all() + self._column.set_widget(self._header_switch) + self._column.connect("clicked", toggle_tree_view_header_cell_handler) + + self.insert_column(self._column, 0) diff --git a/python/hetsgui/src/widgets/__init__.py b/python/hetsgui/src/widgets/__init__.py new file mode 100644 index 0000000000..aaaa36d60c --- /dev/null +++ b/python/hetsgui/src/widgets/__init__.py @@ -0,0 +1,15 @@ +# For debugging purposes don't load hyphen. It takes too long for a short test of the UI +try: + import hyphen + + from .EdgeInfoDialog import EdgeInfoDialog + from .NodeInfoDialog import NodeInfoDialog + from .GraphvizGraphWidget import GraphvizGraphWidget + from .NodeInfoDialog import NodeInfoDialog + from .ProofDetail import ProofDetail +except: + pass + +from .CellRendererLink import CellRendererLink +from .SelectableTreeView import SelectableTreeView +from .ExtendedDotWidget import ExtendedDotWidget diff --git a/python/hetsgui/windows/MainWindow.py b/python/hetsgui/src/windows/MainWindow.py similarity index 99% rename from python/hetsgui/windows/MainWindow.py rename to python/hetsgui/src/windows/MainWindow.py index 5033501194..0ade3024b3 100644 --- a/python/hetsgui/windows/MainWindow.py +++ b/python/hetsgui/src/windows/MainWindow.py @@ -5,7 +5,7 @@ from typing import List, Callable, Any, Optional -from gi.repository import GLib, Gtk, Gdk, Pango, Gio +from gi.repository import GLib, Gtk, Gio from widgets.EdgeInfoDialog import EdgeInfoDialog from widgets.GraphvizGraphWidget import GraphvizGraphWidget @@ -36,7 +36,7 @@ def __init__(self, **kwargs): self.set_auto_startup_notification(True) self.set_size_request(1200, 600) self.set_title("Heterogeneous Toolset") - icon = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../hets.png")) + icon = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../resources/icon.png")) self.set_default_icon_from_file(icon) self.set_icon_from_file(icon) diff --git a/python/hetsgui/src/windows/ProofDetailsWindow.py b/python/hetsgui/src/windows/ProofDetailsWindow.py new file mode 100644 index 0000000000..537521f36d --- /dev/null +++ b/python/hetsgui/src/windows/ProofDetailsWindow.py @@ -0,0 +1,171 @@ +import re + +from gi.repository import Gtk, Pango + +from GtkSmartTemplate import GtkSmartTemplate +from formatting.Colors import PROOF_KIND_FG_COLORS +from hets import Sentence, Theory + +from xdot import DotWidget + +from widgets import ProofDetail + + +@GtkSmartTemplate +class ProofDetailsWindow(Gtk.Window): + __gtype_name__ = "ProofDetailsWindow" + + _box_proof_details: Gtk.Box = Gtk.Template.Child() + + def __init__(self, goal: Sentence, theory: Theory, **kwargs): + super().__init__(**kwargs) + self.maximize() + self.set_title(f"Proof details for {goal.name()}") + + self.goal = goal + self.theory = theory + + for comorphism, proof in goal.theorem_status(): + proof_detail = ProofDetail() + proof_detail.proof = proof + proof_detail.comorphism = comorphism + proof_detail.theory = theory + # proof_detail.goal_status = proof.kind() + # proof_detail.used_prover = proof.details().used_prover() + # proof_detail.used_comorphism = comorphism.name() + # proof_detail.used_time = proof.details().used_time() + # proof_detail.used_tactic_script = proof.details().tactic_script() + + self._box_proof_details.pack_start(proof_detail, False, True, 4) + + # provider = Gtk.CssProvider() + # provider.load_from_data(b""" + # .axiom { background: #00BBFF; } + # .proof-tree { background: white; } + # .proof-lines { font-family: monospace; } + # """) + # self.get_style_context().add_provider_for_screen(self.get_screen(), provider, + # Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + + # self.scrolled_window = Gtk.ScrolledWindow(hexpand=True, vexpand=True, hscrollbar_policy=Gtk.PolicyType.NEVER) + # self.add(self.scrolled_window) + + # self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + # self.scrolled_window.add(self.box) + + # for comorphism, proof in goal.theorem_status(): + # expander = Gtk.Expander() + # expander_label = Gtk.Label() + # expander_label.set_tooltip_text( + # f"{proof.kind().to_str()} with {proof.details().used_prover()} via {comorphism.name()}") + # expander_label.set_markup( + # f"{proof.kind().to_str()} with {proof.details().used_prover()} via {comorphism.name()}") + # expander_label.set_ellipsize(Pango.EllipsizeMode.MIDDLE) + # expander.set_label_widget(expander_label) + # + # expander_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=4, margin_start=14) + # expander.add(expander_box) + # + # details_grid = Gtk.Grid(row_spacing=4, column_spacing=14) + # expander_box.pack_start(details_grid, False, False, 0) + # row = 0 + # + # details_grid.attach(Gtk.Label(label="Status:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach(Gtk.Label( + # label=f"{proof.kind().to_str()}", + # use_markup=True, halign=Gtk.Align.START), 1, row, 1, 1) + # row += 1 + # + # details_grid.attach(Gtk.Label(label="Prover:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach(Gtk.Label(label=proof.details().used_prover(), halign=Gtk.Align.START), 1, row, 1, 1) + # row += 1 + # + # details_grid.attach(Gtk.Label(label="Comorphism:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach( + # Gtk.Label(label=comorphism.name(), halign=Gtk.Align.START, ellipsize=Pango.EllipsizeMode.MIDDLE, + # tooltip_text=comorphism.name()), 1, row, 1, 1) + # row += 1 + # + # used_axioms_box = Gtk.FlowBox(column_spacing=8, row_spacing=4) + # used_axioms = proof.details().used_axioms() + # for axiom in used_axioms: + # sentence = theory.sentence_by_name(axiom) + # axiom_label = Gtk.Label(label=axiom, tooltip_text=str(sentence) if sentence else axiom) + # axiom_label.get_style_context().add_class("axiom") + # used_axioms_box.add(axiom_label) + # + # details_grid.attach(Gtk.Label(label="Used axioms:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach(used_axioms_box, 1, row, 1, 1) + # row += 1 + # + # details_grid.attach(Gtk.Label(label="Time used:", halign=Gtk.Align.START), 0, row, 1, 1) + # # used_time = time.strftime("%H:%M:%S", proof.details().used_time()) + # used_time = proof.details().used_time() + # details_grid.attach(Gtk.Label(label=used_time, halign=Gtk.Align.START), 1, row, 1, 1) + # row += 1 + # + # tactic_script = proof.details().tactic_script() + # ts_regex = [ + # re.compile(r"^ATPTacticScript \{tsTimeLimit = (\d+), tsExtraOpts = \[(.*)\]\}$"), + # re.compile(r"^TacticScript \{timeLimit = (\d+), extraOptions = \[(.*)\]\}$") + # ] + # ts_time, ts_opts = None, None + # + # for regex in ts_regex: + # match = regex.match(tactic_script) + # if match: + # ts_time = match.group(1) + # ts_opts_list = match.group(2) + # list_regex = re.compile(r"\"((?:\\\"|[^\"])*)\"") + # ts_opts = [] + # for match in list_regex.finditer(ts_opts_list): + # ts_opts.append(match.group(1)) + # + # break + # + # if ts_time is not None and ts_opts is not None: + # details_grid.attach(Gtk.Label(label="Time limit:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach(Gtk.Label(label=f"{ts_time}s", halign=Gtk.Align.START), 1, row, 1, 1) + # row += 1 + # + # details_grid.attach(Gtk.Label(label="Extra options:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach(Gtk.Label(label=" ".join(ts_opts), halign=Gtk.Align.START), 1, row, 1, 1) + # row += 1 + # else: + # details_grid.attach(Gtk.Label(label="Tactic script:", halign=Gtk.Align.START), 0, row, 1, 1) + # details_grid.attach(Gtk.Label(label=proof.details().tactic_script(), halign=Gtk.Align.START), 1, row, 1, + # 1) + # row += 1 + # + # proof_tree_text = proof.details().proof_tree().strip() + # proof_tree_widget = DotWidget() + # proof_tree_widget.get_style_context().add_class("proof-tree") + # if proof_tree_text != "" and proof_tree_widget.set_dotcode(proof_tree_text.encode("utf-8")): + # proof_tree_widget.set_size_request(-1, 800) + # else: + # proof_tree_widget.destroy() + # proof_tree_widget = Gtk.Label(label=proof_tree_text, halign=Gtk.Align.START) + # + # proof_tree_expander = Gtk.Expander(label="Proof tree:", hexpand=True) + # proof_tree_expander.add(proof_tree_widget) + # expander_box.pack_start(proof_tree_expander, False, False, 0) + # # details_grid.attach(proof_tree_expander, 0, row, 2, 1) + # # row += 1 + # + # proof_lines_expander = Gtk.Expander(label="Proof lines:", hexpand=True) + # proof_lines_widget = Gtk.Label(label="\n".join(proof.details().proof_lines()), halign=Gtk.Align.START, + # selectable=True, lines=len(proof.details().proof_lines()), wrap=True) + # proof_lines_widget.get_style_context().add_class("proof-lines") + # # proof_lines_widget = Gtk.TextView() + # # proof_lines_widget.set_property('editable', False) + # # proof_lines_widget.set_property('monospace', True) + # # text_buffer = proof_lines_widget.get_buffer() + # # text_buffer.set_text("\n".join(proof.details().proof_lines())) + # proof_lines_expander.add(proof_lines_widget) + # expander_box.pack_start(proof_lines_expander, False, False, 0) + # # details_grid.attach(proof_lines_expander, 0, row, 2, 1) + # # row += 1 + # + # self.box.pack_start(expander, False, True, 4) + + self.show_all() diff --git a/python/hetsgui/src/windows/ProofDetailsWindow.ui b/python/hetsgui/src/windows/ProofDetailsWindow.ui new file mode 100644 index 0000000000..81f5d96e46 --- /dev/null +++ b/python/hetsgui/src/windows/ProofDetailsWindow.ui @@ -0,0 +1,21 @@ + + + + + + diff --git a/python/hetsgui/src/windows/ProveWindow.py b/python/hetsgui/src/windows/ProveWindow.py new file mode 100644 index 0000000000..17b5c67c44 --- /dev/null +++ b/python/hetsgui/src/windows/ProveWindow.py @@ -0,0 +1,183 @@ +import threading +from typing import Optional + +from gi.repository import Gtk, GLib + +from GtkSmartTemplate import GtkSmartTemplate +from actions.model import toggle_tree_view_cell_handler, toggle_tree_view_header_cell_handler +from hets import DevGraphNode, ProofKind, Comorphism, Prover, Sentence +from formatting.Colors import PROOF_KIND_BG_COLORS, color_name_to_rgba +from windows.ProofDetailsWindow import ProofDetailsWindow + +from widgets import CellRendererLink + + +@GtkSmartTemplate +class ProveWindow(Gtk.Window): + __gtype_name__ = "ProveWindow" + + goals_model: Gtk.ListStore = Gtk.Template.Child() + axioms_model: Gtk.ListStore = Gtk.Template.Child() + prover_model: Gtk.ListStore = Gtk.Template.Child() + comorphism_model: Gtk.ListStore = Gtk.Template.Child() + comorphism_filtered: Gtk.TreeModelFilter = Gtk.Template.Child() + + notebook: Gtk.Notebook = Gtk.Template.Child() + btn_prove: Gtk.Button = Gtk.Template.Child() + txt_extra_options: Gtk.Entry = Gtk.Template.Child() + txt_timeout: Gtk.SpinButton = Gtk.Template.Child() + switch_include_proven_theorems: Gtk.Switch = Gtk.Template.Child() + combo_comorphism: Gtk.ComboBox = Gtk.Template.Child() + combo_prover: Gtk.ComboBox = Gtk.Template.Child() + + @property + def selected_comorphism(self) -> Comorphism: + comorphism_model = self.combo_comorphism.get_model() + comorphism_index = self.combo_comorphism.get_active() + comorphism_name = comorphism_model[comorphism_index][0] if comorphism_index >= 0 else None + comorphism = None if comorphism_name is None else next( + c for c in self.node.global_theory().get_available_comorphisms() if c.name() == comorphism_name) + return comorphism + + @property + def selected_prover(self) -> Prover: + prover_model = self.combo_prover.get_model() + prover_index = self.combo_prover.get_active() + prover_name = prover_model[prover_index][0] if prover_index >= 0 else None + prover = self.node.global_theory().get_prover_by_name(prover_name) + return prover + + def __init__(self, node: DevGraphNode, **kwargs): + super().__init__(title=f"Prove {node.name()}", **kwargs) + + self.proving_thread: Optional[threading.Thread] = None + self.node = node + + self._init_view() + + def _init_view(self): + + # Add goals to goals model for display in tree view + for goal in self.node.global_theory().goals(): + color, text = self._goal_style(goal) + + self.goals_model.append([goal.name(), True, text, goal.name(), str(goal), color]) + + # Add axioms to axioms model for display in tree view + for axiom in self.node.global_theory().axioms(): + self.axioms_model.append([axiom.name(), True, axiom.name(), str(axiom)]) + + # Add provers and comorphisms to their respective models for display in combo boxes + for prover, comorphisms in self.node.global_theory().get_usable_provers_with_comorphisms().items(): + shortest_comorphism_path_len = 100 + for comorphism in comorphisms: + comorphism_path_length = comorphism.path_length() + if comorphism_path_length < shortest_comorphism_path_len: + shortest_comorphism_path_len = comorphism_path_length + + self.comorphism_model.append( + [comorphism.name(), comorphism.name(), prover.name(), comorphism_path_length]) + + shortest_comorphism_path_len = min(c.path_length() for c in comorphisms) + self.prover_model.append([prover.name(), prover.name(), shortest_comorphism_path_len]) + + self.comorphism_filtered.set_visible_func(self._comorphism_filter) + self.combo_prover.set_active(0) + + def _goal_style(self, g: Sentence): + proof = g.best_proof() + kind = proof.kind() if proof is not None else ProofKind.OPEN + goal_text = f'{kind.to_str()}' + color_name = PROOF_KIND_BG_COLORS[kind] + goal_color = color_name_to_rgba(color_name) + return goal_color, goal_text + + def _comorphism_filter(self, model: Gtk.ListStore, path: str, data): + prover_model = self.combo_prover.get_model() + active_prover_iter = self.combo_prover.get_active_iter() + + if active_prover_iter is not None: + prover_name = prover_model[active_prover_iter][0] + return model[path][2] == prover_name + else: + return False + + @Gtk.Template.Callback() + def on_close(self, widget, event): + if self.proving_thread is not None and self.proving_thread.is_alive(): + return True # Stop the window from being closed if a proving process is currently running + + return False + + @Gtk.Template.Callback() + def on_prove_clicked(self, _): + self.proving_thread = threading.Thread(target=self._prove) + # self.proving_thread.daemon = True + self.proving_thread.start() + + @Gtk.Template.Callback() + def on_proof_details_clicked(self, widget, path): + goal_name = self.goals_model[path][0] + goal = next(iter(g for g in self.node.global_theory().goals() if g.name() == goal_name), None) + + if goal is not None: + details_window = ProofDetailsWindow(goal, self.node.global_theory()) + details_window.show_all() + details_window.present() + + @Gtk.Template.Callback() + def update_comorphisms(self, widget): + self.comorphism_filtered.refilter() + if len(self.comorphism_filtered) > 0: + self.combo_comorphism.set_active(0) + + def _init_prove_progress(self): + self.btn_prove.set_sensitive(False) + self.notebook.set_current_page(1) + + for goal in self.goals_model: + if goal[1]: # if selected to be proven + goal[2] = 'Waiting...' + color = color_name_to_rgba("white") + goal[5] = color + + def _update_prove_progress(self, next_goal_name: Optional[str], prev_goal_name: Optional[str]): + if prev_goal_name is not None: + goal_row = next(iter(g for g in self.goals_model if g[0] == prev_goal_name), None) + goal = next(iter(g for g in self.node.global_theory().goals() if g.name() == prev_goal_name), None) + + if goal_row is not None: + color, text = self._goal_style(goal) + goal_row[2] = text + goal_row[5] = color + + if next_goal_name is not None: + goal_row = next(iter(g for g in self.goals_model if g[0] == next_goal_name), None) + if goal_row is not None: + goal_row[2] = 'Proving...' + + def _finish_prove_progress(self): + self.btn_prove.set_sensitive(True) + self.notebook.set_current_page(1) + + def _prove(self): + GLib.idle_add(self._init_prove_progress) + + goals = [row[0] for row in self.goals_model if row[1]] + axioms = [row[0] for row in self.axioms_model if row[1]] + + prover = self.selected_prover + comorphism = self.selected_comorphism + timeout = self.txt_timeout.get_value_as_int() + include_theorems = self.switch_include_proven_theorems.get_active() + + prev_goal = None + for i, goal in enumerate(goals): + GLib.idle_add(self._update_prove_progress, goal, prev_goal) + + self.node.prove(prover, comorphism, include_theorems, [goal], axioms, timeout) + prev_goal = goal + + GLib.idle_add(self._update_prove_progress, None, prev_goal) + + GLib.idle_add(self._finish_prove_progress) diff --git a/python/hetsgui/src/windows/ProveWindow.ui b/python/hetsgui/src/windows/ProveWindow.ui new file mode 100644 index 0000000000..93642f35ba --- /dev/null +++ b/python/hetsgui/src/windows/ProveWindow.ui @@ -0,0 +1,420 @@ + + + + + 4294967295 + 1 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + comorphism_model + + + diff --git a/python/hetsgui/src/windows/StartUpWindow.css b/python/hetsgui/src/windows/StartUpWindow.css new file mode 100644 index 0000000000..624c72868d --- /dev/null +++ b/python/hetsgui/src/windows/StartUpWindow.css @@ -0,0 +1,5 @@ +window.startup-window { + background-color: blue; + background: linear-gradient(45deg, rgba(9,9,121,1) 0%, rgba(0,212,255,1) 100%); + color: white; +} diff --git a/python/hetsgui/src/windows/StartUpWindow.py b/python/hetsgui/src/windows/StartUpWindow.py new file mode 100644 index 0000000000..e5ee93d30b --- /dev/null +++ b/python/hetsgui/src/windows/StartUpWindow.py @@ -0,0 +1,18 @@ +import os.path + +from gi.repository import Gtk + +from GtkSmartTemplate import GtkSmartTemplate + + +@GtkSmartTemplate +class StartUpWindow(Gtk.Window): + __gtype_name__ = "StartUpWindow" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + icon = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../resources/icon.png")) + self.set_default_icon_from_file(icon) + + self.show_all() diff --git a/python/hetsgui/src/windows/StartUpWindow.ui b/python/hetsgui/src/windows/StartUpWindow.ui new file mode 100644 index 0000000000..4fada700cd --- /dev/null +++ b/python/hetsgui/src/windows/StartUpWindow.ui @@ -0,0 +1,69 @@ + + + + + + diff --git a/python/hetsgui/windows/ProofDetailsWindow.py b/python/hetsgui/windows/ProofDetailsWindow.py deleted file mode 100644 index 5ca737d529..0000000000 --- a/python/hetsgui/windows/ProofDetailsWindow.py +++ /dev/null @@ -1,150 +0,0 @@ -import re - -import xdot.dot.lexer -from gi.repository import Gtk, Pango - -from formatting.Colors import PROOF_KIND_BG_COLORS, PROOF_KIND_FG_COLORS -from hets import Sentence, Theory - -from graphviz import Graph, Digraph -from xdot import DotWidget -import time - - -class ProofDetailsWindow(Gtk.Window): - def __init__(self, goal: Sentence, theory: Theory, **kwargs): - super().__init__(**kwargs) - - provider = Gtk.CssProvider() - provider.load_from_data(b""" - .axiom { background: #00BBFF; } - .proof-tree { background: white; } - .proof-lines { font-family: monospace; } - """) - # self.get_style_context().add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) - self.get_style_context().add_provider_for_screen(self.get_screen(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) - - self.goal = goal - self.theory = theory - - self.set_default_size(800, 600) - self.maximize() - self.set_title(f"Proof details for {goal.name()}") - - # self.header = Gtk.HeaderBar(title=self.get_title()) - # self.set_titlebar(self.header) - - self.scrolled_window = Gtk.ScrolledWindow(hexpand=True, vexpand=True, hscrollbar_policy=Gtk.PolicyType.NEVER) - self.add(self.scrolled_window) - - self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - self.scrolled_window.add(self.box) - - for comorphism, proof in goal.theorem_status(): - expander = Gtk.Expander() - expander_label = Gtk.Label() - expander_label.set_tooltip_text(f"{proof.kind().to_str()} with {proof.details().used_prover()} via {comorphism.name()}") - expander_label.set_markup(f"{proof.kind().to_str()} with {proof.details().used_prover()} via {comorphism.name()}") - expander_label.set_ellipsize(Pango.EllipsizeMode.MIDDLE) - expander.set_label_widget(expander_label) - - expander_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=4, margin_start=14) - expander.add(expander_box) - - details_grid = Gtk.Grid(row_spacing=4, column_spacing=14) - expander_box.pack_start(details_grid, False, False, 0) - row = 0 - - details_grid.attach(Gtk.Label(label="Status:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(Gtk.Label(label=f"{proof.kind().to_str()}", use_markup=True, halign=Gtk.Align.START), 1, row, 1, 1) - row += 1 - - details_grid.attach(Gtk.Label(label="Prover:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(Gtk.Label(label=proof.details().used_prover(), halign=Gtk.Align.START), 1, row, 1, 1) - row += 1 - - details_grid.attach(Gtk.Label(label="Comorphism:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(Gtk.Label(label=comorphism.name(), halign=Gtk.Align.START, ellipsize=Pango.EllipsizeMode.MIDDLE, tooltip_text=comorphism.name()), 1, row, 1, 1) - row += 1 - - used_axioms_box = Gtk.FlowBox(column_spacing=8, row_spacing=4) - used_axioms = proof.details().used_axioms() - for axiom in used_axioms: - sentence = theory.sentence_by_name(axiom) - axiom_label = Gtk.Label(label=axiom, tooltip_text=str(sentence) if sentence else axiom) - axiom_label.get_style_context().add_class("axiom") - used_axioms_box.add(axiom_label) - - details_grid.attach(Gtk.Label(label="Used axioms:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(used_axioms_box, 1, row, 1, 1) - row += 1 - - details_grid.attach(Gtk.Label(label="Time used:", halign=Gtk.Align.START), 0, row, 1, 1) - # used_time = time.strftime("%H:%M:%S", proof.details().used_time()) - used_time = proof.details().used_time() - details_grid.attach(Gtk.Label(label=used_time, halign=Gtk.Align.START), 1, row, 1, 1) - row += 1 - - tactic_script = proof.details().tactic_script() - ts_regex = [ - re.compile(r"^ATPTacticScript \{tsTimeLimit = (\d+), tsExtraOpts = \[(.*)\]\}$"), - re.compile(r"^TacticScript \{timeLimit = (\d+), extraOptions = \[(.*)\]\}$") - ] - ts_time, ts_opts = None, None - - for regex in ts_regex: - match = regex.match(tactic_script) - if match: - ts_time = match.group(1) - ts_opts_list = match.group(2) - list_regex = re.compile(r"\"((?:\\\"|[^\"])*)\"") - ts_opts = [] - for match in list_regex.finditer(ts_opts_list): - ts_opts.append(match.group(1)) - - break - - if ts_time is not None and ts_opts is not None: - details_grid.attach(Gtk.Label(label="Time limit:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(Gtk.Label(label=f"{ts_time}s", halign=Gtk.Align.START), 1, row, 1, 1) - row += 1 - - details_grid.attach(Gtk.Label(label="Extra options:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(Gtk.Label(label=" ".join(ts_opts), halign=Gtk.Align.START), 1, row, 1, 1) - row += 1 - else: - details_grid.attach(Gtk.Label(label="Tactic script:", halign=Gtk.Align.START), 0, row, 1, 1) - details_grid.attach(Gtk.Label(label=proof.details().tactic_script(), halign=Gtk.Align.START), 1, row, 1, 1) - row += 1 - - proof_tree_text = proof.details().proof_tree().strip() - proof_tree_widget = DotWidget() - proof_tree_widget.get_style_context().add_class("proof-tree") - if proof_tree_text != "" and proof_tree_widget.set_dotcode(proof_tree_text.encode("utf-8")): - proof_tree_widget.set_size_request(-1, 800) - else: - proof_tree_widget.destroy() - proof_tree_widget = Gtk.Label(label=proof_tree_text, halign=Gtk.Align.START) - - proof_tree_expander = Gtk.Expander(label="Proof tree:", hexpand=True) - proof_tree_expander.add(proof_tree_widget) - expander_box.pack_start(proof_tree_expander, False, False, 0) - # details_grid.attach(proof_tree_expander, 0, row, 2, 1) - # row += 1 - - proof_lines_expander = Gtk.Expander(label="Proof lines:", hexpand=True) - proof_lines_widget = Gtk.Label(label="\n".join(proof.details().proof_lines()), halign=Gtk.Align.START, selectable=True, lines=len(proof.details().proof_lines()), wrap=True) - proof_lines_widget.get_style_context().add_class("proof-lines") - # proof_lines_widget = Gtk.TextView() - # proof_lines_widget.set_property('editable', False) - # proof_lines_widget.set_property('monospace', True) - # text_buffer = proof_lines_widget.get_buffer() - # text_buffer.set_text("\n".join(proof.details().proof_lines())) - proof_lines_expander.add(proof_lines_widget) - expander_box.pack_start(proof_lines_expander, False, False, 0) - # details_grid.attach(proof_lines_expander, 0, row, 2, 1) - # row += 1 - - self.box.pack_start(expander, False, True, 4) - - self.show_all() diff --git a/python/hetsgui/windows/ProveWindow.py b/python/hetsgui/windows/ProveWindow.py deleted file mode 100644 index 9a87e6e001..0000000000 --- a/python/hetsgui/windows/ProveWindow.py +++ /dev/null @@ -1,382 +0,0 @@ -import threading -from typing import Optional - -from gi.repository import Gtk, Pango, GLib, Gdk - -from hets import DevGraphNode, ProofKind -from formatting.Colors import PROOF_KIND_BG_COLORS, color_name_to_rgba -from widgets.CellRendererLink import CellRendererLink -from windows.ProofDetailsWindow import ProofDetailsWindow - - -def model_toggle_handle(model, index=1, header: Optional[Gtk.CheckButton] = None): - def cb(widget, path): - next_state = not model[path][index] - - model[path][index] = next_state - - if header is not None: - consistent = all(row[index] == next_state for row in model) - header.set_inconsistent(not consistent) - header.set_active(next_state) - - return cb - - -def model_toggle_column_handle(model, index=1): - def cb(column: Gtk.TreeViewColumn): - widget = column.get_widget() - if not isinstance(widget, Gtk.CheckButton): - return - - new_state = not (widget.get_inconsistent() or widget.get_active()) - - for row in model: - row[index] = new_state - - widget.set_inconsistent(False) - widget.set_active(new_state) - - return cb - - -@Gtk.Template() -class ProveWindow(Gtk.Window): - def __init__(self, node: DevGraphNode, **kwargs): - super().__init__(title=f"Prove {node.name()}", **kwargs) - # def __init__(self, **kwargs): - # super().__init__(title=f"Prove {{node.name()}}", **kwargs) - self.set_default_size(800, -1) - self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) - self.set_destroy_with_parent(True) - - self.proving_thread: Optional[threading.Thread] = None - self.node = node - - goals = self.goal_widget() - axioms = self.axioms_widget() - provers = self.prover_widget() - prover_settings = self.prover_settings_widget() - - self.header = Gtk.HeaderBar(title=self.get_title()) - self.header.set_show_close_button(True) - self.btn_prove = Gtk.Button(label="Prove") - self.header.pack_start(self.btn_prove) - self.set_titlebar(self.header) - - self.notebook = Gtk.Notebook(tab_pos=Gtk.PositionType.LEFT) - self.add(self.notebook) - - self.page_prove = provers - self.page_prove.set_border_width(10) - self.notebook.append_page(self.page_prove, Gtk.Label(label="Prove")) - - self.page_goals = goals - self.page_goals.set_border_width(10) - self.notebook.append_page(self.page_goals, Gtk.Label(label="Goals")) - - self.page_axioms = axioms - self.page_axioms.set_border_width(10) - self.notebook.append_page(self.page_axioms, Gtk.Label(label="Axioms")) - - self.page_prover_settings = prover_settings - self.page_prover_settings.set_border_width(10) - self.notebook.append_page(self.page_prover_settings, Gtk.Label(label="Prover Settings")) - - self.connect("delete_event", self.on_close) - - self.btn_prove.connect("clicked", self.on_prove_clicked) - - def _goal_style(self, goal): - proof = goal.best_proof() - kind = proof.kind() if proof is not None else ProofKind.OPEN - text = f'{kind.to_str()}' - color_name = PROOF_KIND_BG_COLORS[kind] - color = color_name_to_rgba(color_name) - return color, text - - def on_close(self, widget, event): - if self.proving_thread is not None and self.proving_thread.is_alive(): - return True # Stop the window from being closed if a proving process is currently running - - return False - - def goal_widget(self) -> Gtk.Widget: - self.goals_model = Gtk.ListStore(str, bool, str, str, str, Gdk.RGBA) - - for goal in self.node.global_theory().goals(): - color, text = self._goal_style(goal) - - self.goals_model.append([goal.name(), True, text, goal.name(), str(goal), color]) - - # self.goals_model.append(["Ax5", True, "", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) - # self.goals_model.append(["Ax7", True, "P", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) - # self.goals_model.append(["Ax8", False, "P", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) - # self.goals_model.append(["Ax9", False, "D", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) - # self.goals_model.append(["Ax10", True, "D", 'ClassAssertion( Annotation( :Implied "true"^^:string ) Annotation( :Implied "true"^^xsd:boolean ) :Mother :mary )']) - - treeview = Gtk.TreeView(model=self.goals_model, hexpand=True, hover_expand=True, headers_clickable=True, - tooltip_column=4) - - prove_renderer = Gtk.CellRendererToggle() - prove_all_check: Gtk.CheckButton = Gtk.CheckButton.new() - prove_all_check.set_active(1) # By default all goals are selected for proving - prove_renderer.connect("toggled", model_toggle_handle(self.goals_model, header=prove_all_check)) - prove_column = Gtk.TreeViewColumn("Prove", prove_renderer, active=1) - prove_column.set_widget(prove_all_check) - prove_column.set_clickable(True) - prove_all_check.show_all() - prove_column.connect("clicked", model_toggle_column_handle(self.goals_model)) - treeview.append_column(prove_column) - - state_renderer = CellRendererLink() - state_renderer.connect("clicked", self.on_proof_details_clicked) - state_column = Gtk.TreeViewColumn("State", state_renderer, markup=2, background_rgba=5) - state_column.set_sort_column_id(2) - treeview.append_column(state_column) - - name_column = Gtk.TreeViewColumn("Name", - Gtk.CellRendererText(width_chars=20, ellipsize=Pango.EllipsizeMode.END), - text=3) - name_column.set_sort_column_id(3) - name_column.set_resizable(True) - treeview.append_column(name_column) - goal_column = Gtk.TreeViewColumn("Goal", - Gtk.CellRendererText(width_chars=100, ellipsize=Pango.EllipsizeMode.END), - text=4) - goal_column.set_sort_column_id(4) - goal_column.set_resizable(True) - treeview.append_column(goal_column) - - scrollable_treeview = Gtk.ScrolledWindow(vexpand=True, min_content_height=100) - scrollable_treeview.add(treeview) - - box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - - box.pack_start(scrollable_treeview, True, True, 0) - - return box - - def axioms_widget(self) -> Gtk.Widget: - self.axioms_model = Gtk.ListStore(str, bool, str, str) - - for axiom in self.node.global_theory().axioms(): - self.axioms_model.append([axiom.name(), True, axiom.name(), str(axiom)]) - - # self.axioms_model.append(["Ax1", True, 'Class: Mother EquivalentTo: Woman and (hasChild some Person)']) - # self.axioms_model.append(["Ax2", True, 'Class: Woman SubClassOf: Person']) - # self.axioms_model.append(["Ax3", False, 'Individual: björn Types: Person']) - # self.axioms_model.append(["Ax4", True, 'Individual: mary Types: Woman ']) - # self.axioms_model.append(["Ax6", False, 'Individual: mary Facts: hasChild john']) - - treeview = Gtk.TreeView(model=self.axioms_model, hexpand=True, headers_clickable=True, tooltip_column=3) - - include_renderer = Gtk.CellRendererToggle() - include_all_check: Gtk.CheckButton = Gtk.CheckButton.new() - include_all_check.set_active(1) # By default all axioms are selected - include_renderer.connect("toggled", model_toggle_handle(self.axioms_model, header=include_all_check)) - include_column = Gtk.TreeViewColumn("Include", include_renderer, active=1) - include_column.set_widget(include_all_check) - include_column.set_clickable(True) - include_all_check.show_all() - include_column.connect("clicked", model_toggle_column_handle(self.axioms_model)) - - treeview.append_column(include_column) - name_column = Gtk.TreeViewColumn("Name", - Gtk.CellRendererText(width_chars=20, ellipsize=Pango.EllipsizeMode.END), - text=2) - name_column.set_sort_column_id(2) - name_column.set_resizable(True) - treeview.append_column(name_column) - axiom_column = Gtk.TreeViewColumn("Axiom", - Gtk.CellRendererText(width_chars=100, ellipsize=Pango.EllipsizeMode.END), - text=3) - axiom_column.set_sort_column_id(3) - axiom_column.set_resizable(True) - treeview.append_column(axiom_column) - - scrollable_treeview = Gtk.ScrolledWindow(vexpand=True, min_content_height=200) - scrollable_treeview.add(treeview) - - box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - - box.pack_start(scrollable_treeview, True, True, 0) - - return box - - def prover_widget(self) -> Gtk.Widget: - prover_model = Gtk.ListStore(str, str, int) - - for prover, comorphisms in self.node.global_theory().get_usable_provers_with_comorphisms().items(): - shortest_comorphism_path_len = min(c.path_length() for c in comorphisms) - prover_model.append([prover.name(), prover.name(), shortest_comorphism_path_len]) - - prover_model.set_sort_column_id(2, Gtk.SortType.ASCENDING) - - # prover_model.append(["P_Darwin", "Darwin"]) - # prover_model.append(["P_EProver", "EProver"]) - # prover_model.append(["P_Pellet", "Pellet"]) - # prover_model.append(["P_QuickCheck", "QuickCheck"]) - - prover_name_renderer = Gtk.CellRendererText(width_chars=-1, ellipsize=Pango.EllipsizeMode.END) - self.combo_prover: Gtk.ComboBox = Gtk.ComboBox.new_with_model(prover_model) - self.combo_prover.pack_start(prover_name_renderer, True) - self.combo_prover.add_attribute(prover_name_renderer, "text", 1) - if len(prover_model) > 0: - self.combo_prover.set_active(0) - - comorphism_model = Gtk.ListStore(str, str, str, int) - - for prover, comorphism in self.node.global_theory().get_usable_provers_and_comorphisms(): - comorphism_model.append([comorphism.name(), prover.name(), comorphism.name(), comorphism.path_length()]) - comorphism_model.set_sort_column_id(3, Gtk.SortType.ASCENDING) - - # comorphism_model.append(["C0", "id_OWL.EL-ALC-D|boolean| : OWL -> OWL"]) - # comorphism_model.append(["C1", "id_OWL.EL-ALC-D|boolean|;OWL2CASL;OWL2TPTP : OWL -> TPTP"]) - - comorphism_filtered: Gtk.TreeModelFilter = comorphism_model.filter_new() - comorphism_filtered.set_visible_func(self._comorphism_filter) - - comorphism_name_renderer = Gtk.CellRendererText(width_chars=-1, ellipsize=Pango.EllipsizeMode.END) - self.combo_comorphism: Gtk.ComboBox = Gtk.ComboBox.new_with_model(comorphism_filtered) - self.combo_comorphism.pack_start(comorphism_name_renderer, True) - self.combo_comorphism.add_attribute(comorphism_name_renderer, "text", 2) - - self._update_comorphisms(self.combo_comorphism) - self.combo_prover.connect("changed", self._update_comorphisms) - - grid = Gtk.Grid( - row_homogeneous=False, - column_spacing=14, - row_spacing=4 - ) - - grid.attach(Gtk.Label(label="Prover:", halign=Gtk.Align.START), 0, 1, 1, 1) - grid.attach(self.combo_prover, 1, 1, 1, 1) - grid.attach(Gtk.Label(label="Comorphism:", halign=Gtk.Align.START), 0, 2, 1, 1) - grid.attach(self.combo_comorphism, 1, 2, 1, 1) - - grid.attach(Gtk.Label(label="Sublogic of theory:", halign=Gtk.Align.START), 0, 3, 1, 1) - grid.attach(Gtk.Label(label="OWL.EL-ALC-D|boolean|", halign=Gtk.Align.START), 1, 3, 1, 1) - - return grid - - def prover_settings_widget(self) -> Gtk.Widget: - grid = Gtk.Grid( - row_homogeneous=False, - column_spacing=14, - row_spacing=4 - ) - - self.btn_timeout: Gtk.SpinButton = Gtk.SpinButton.new_with_range(0, 2 ** 32 - 1, 1) - self.btn_timeout.set_value(10) - - self.txt_extra_options = Gtk.Entry() - - self.switch_include_proven_theorems = Gtk.Switch(halign=Gtk.Align.END) - - grid.attach(Gtk.Label(label="Timeout in s:", halign=Gtk.Align.START, hexpand=True), 0, 1, 1, 1) - grid.attach(self.btn_timeout, 1, 1, 1, 1) - grid.attach(Gtk.Label(label="Extra options:", halign=Gtk.Align.START), 0, 2, 1, 1) - grid.attach(self.txt_extra_options, 1, 2, 1, 1) - grid.attach(Gtk.Label(label="Include proven theorems:", halign=Gtk.Align.START, - tooltip_text="Include preceding proven theorems in next proof attempt"), 0, 3, 1, 1) - grid.attach(self.switch_include_proven_theorems, 1, 3, 1, 1) - - return grid - - def on_prove_clicked(self, _): - self.proving_thread = threading.Thread(target=self._prove) - # self.proving_thread.daemon = True - self.proving_thread.start() - - def _comorphism_filter(self, model, iter, data): - prover_model = self.combo_prover.get_model() - active_prover_iter = self.combo_prover.get_active_iter() - - if active_prover_iter is not None: - prover_name = prover_model[active_prover_iter][0] - return model[iter][1] == prover_name - else: - return False - - def _update_comorphisms(self, _): - model = self.combo_comorphism.get_model() - model.refilter() - if len(model) > 0: - self.combo_comorphism.set_active(0) - - def _init_prove_progress(self): - self.btn_prove.set_sensitive(False) - self.notebook.set_current_page(1) - - for goal in self.goals_model: - if goal[1]: # if selected to be proven - goal[2] = 'Waiting...' - color = color_name_to_rgba("white") - goal[5] = color - - def _update_prove_progress(self, next_goal_name: Optional[str], prev_goal_name: Optional[str]): - if prev_goal_name is not None: - goal_row = next(iter(g for g in self.goals_model if g[0] == prev_goal_name), None) - goal = next(iter(g for g in self.node.global_theory().goals() if g.name() == prev_goal_name), None) - - if goal_row is not None: - color, text = self._goal_style(goal) - goal_row[2] = text - goal_row[5] = color - - if next_goal_name is not None: - goal_row = next(iter(g for g in self.goals_model if g[0] == next_goal_name), None) - if goal_row is not None: - goal_row[2] = 'Proving...' - - def _finish_prove_progress(self): - self.btn_prove.set_sensitive(True) - self.notebook.set_current_page(1) - - @property - def selected_comorphism(self) -> Optional[str]: - comorphism_model = self.combo_comorphism.get_model() - comorphism_index = self.combo_comorphism.get_active() - return comorphism_model[comorphism_index][0] if comorphism_index >= 0 else None - - def _prove(self): - GLib.idle_add(self._init_prove_progress) - - goals = [row[0] for row in self.goals_model if row[1]] - axioms = [row[0] for row in self.axioms_model if row[1]] - - prover_model = self.combo_prover.get_model() - prover_index = self.combo_prover.get_active() - prover = prover_model[prover_index][0] if prover_index >= 0 else None - - comorphism_name = self.selected_comorphism - comorphism = None if comorphism_name is None else next( - c for c in self.node.global_theory().get_available_comorphisms() if c.name() == comorphism_name) - - timeout = self.btn_timeout.get_value_as_int() - - include_theorems = self.switch_include_proven_theorems.get_active() - - prev_goal = None - for i, goal in enumerate(goals): - GLib.idle_add(self._update_prove_progress, goal, prev_goal) - - self.node.prove(self.node.global_theory().get_prover_by_name(prover), comorphism, include_theorems, [goal], - axioms, - timeout) - prev_goal = goal - - GLib.idle_add(self._update_prove_progress, None, prev_goal) - - GLib.idle_add(self._finish_prove_progress) - - def on_proof_details_clicked(self, widget, path): - goal_name = self.goals_model[path][0] - goal = next(iter(g for g in self.node.global_theory().goals() if g.name() == goal_name), None) - - if goal is not None: - details_window = ProofDetailsWindow(goal, self.node.global_theory()) - details_window.show_all() - details_window.present() diff --git a/python/hetsgui/windows/StartUpWindow.py b/python/hetsgui/windows/StartUpWindow.py deleted file mode 100644 index d72a1ce7fc..0000000000 --- a/python/hetsgui/windows/StartUpWindow.py +++ /dev/null @@ -1,42 +0,0 @@ -import os.path - -from gi.repository import Gtk, Gdk - - -class StartUpWindow(Gtk.Window): - def __init__(self, **kwargs): - super().__init__(**kwargs) - - icon = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../hets.png")) - self.set_default_icon_from_file(icon) - - self.set_decorated(False) - self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) - self.set_resizable(False) - self.set_auto_startup_notification(False) - # self.set_skip_taskbar_hint(True) - self.set_skip_pager_hint(True) - - print(self.class_path()) - provider = Gtk.CssProvider() - provider.load_from_data(b""" - window { - background-color: blue; - background: linear-gradient(45deg, rgba(9,9,121,1) 0%, rgba(0,212,255,1) 100%); - color: white; - } - """) - self.get_style_context().add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) - - box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, margin=14) - title = Gtk.Label() - title.set_markup('Hets - Heterogeneous Tool Set') - spinner = Gtk.Spinner(active=True) - info = Gtk.Label(label="Loading libraries ...") - - box.pack_start(title, True, False, 14) - box.pack_start(spinner, True, False, 4) - box.pack_start(info, True, False, 4) - - self.add(box) - self.show_all() From c53921ab57ba7406e775668d65784809916ca6f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Fri, 14 Jul 2023 16:39:09 +0200 Subject: [PATCH 20/69] Add docker file for hets gui --- Docker/hetsapi.Dockerfile | 9 +++++++-- Docker/hetsgui.Dockerfile | 20 ++++++++++++++++++++ python/Dockerfile | 9 --------- 3 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 Docker/hetsgui.Dockerfile delete mode 100644 python/Dockerfile diff --git a/Docker/hetsapi.Dockerfile b/Docker/hetsapi.Dockerfile index 424879310b..0030fba778 100644 --- a/Docker/hetsapi.Dockerfile +++ b/Docker/hetsapi.Dockerfile @@ -1,4 +1,4 @@ -FROM hyphen:20.04 +FROM hyphen:22.04 ENV TZ=Europe/Berlin RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone @@ -32,7 +32,6 @@ RUN apt-get install -y openjdk-8-jdk-headless ant cabal-install\ libghc-xeno-dev\ libghc-heap-dev - # RUN git clone https://github.com/spechub/Hets.git /hets ## OR COPY ./ /hets @@ -56,3 +55,9 @@ RUN runhaskell Setup.hs configure \ lib:Hets RUN runhaskell Setup.hs build -j$(nproc) lib:Hets RUN runhaskell Setup.hs install + +RUN apt-get install hets-provers +RUN git clone https://github.com/spechub/Hets-lib.git /Hets-lib +ENV HETS_LIB /Hets-lib + +WORKDIR /root diff --git a/Docker/hetsgui.Dockerfile b/Docker/hetsgui.Dockerfile new file mode 100644 index 0000000000..d2ed68bfd7 --- /dev/null +++ b/Docker/hetsgui.Dockerfile @@ -0,0 +1,20 @@ +FROM hets-api + +RUN apt-get update && apt-get upgrade -y + +RUN apt-get install -y libgtk-3-dev python3-gi python3-gi-cairo gir1.2-gtk-3.0 python3-pip graphviz + +RUN pip3 install xdot numpy graphviz + +COPY python/hetsgui /opt/hetsgui + +WORKDIR /opt/hetsgui/src + +RUN glib-compile-resources hetsgui.gresource.xml + +RUN ln -s /opt/hetsgui/src/application.py /usr/bin/hetsgui +RUN chmod +x /usr/bin/hetsgui + +ENV PYTHONPATH /hets/python/ + +ENTRYPOINT /usr/bin/hetsgui diff --git a/python/Dockerfile b/python/Dockerfile deleted file mode 100644 index 46b1bd3288..0000000000 --- a/python/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM hets-api - -RUN apt-get update && apt-get upgrade -y - -RUN apt-get install -y python3-gi python3-gi-cairo gir1.2-gtk-3.0 python3-pip graphviz - -RUN pip3 install xdot numpy graphviz - -ENV PYTHONPATH /hets/python/ From d2b28009981e5a68629c6c5554d49c812b47f996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Fri, 14 Jul 2023 16:40:26 +0200 Subject: [PATCH 21/69] Added options to specify Hetcats opts when loading a library --- HetsAPI/Internal.hs | 168 ++++++++++++++++- python/hets/Library.py | 166 ++++++++++++++++- python/hets/haskell/Internal.py | 49 ++++- python/hets/haskell/Internal.pyi | 52 +++++- python/hetsgui/src/application.py | 2 + python/hetsgui/src/hetsgui.gresource.xml | 4 + .../hetsgui/src/widgets/EditableListView.py | 39 ++++ .../hetsgui/src/widgets/EditableListView.ui | 116 ++++++++++++ python/hetsgui/src/widgets/__init__.py | 1 + .../src/windows/LibrarySettingsWindow.ui | 173 ++++++++++++++++++ python/hetsgui/src/windows/MainWindow.py | 16 +- 11 files changed, 774 insertions(+), 12 deletions(-) create mode 100644 python/hetsgui/src/widgets/EditableListView.py create mode 100644 python/hetsgui/src/widgets/EditableListView.ui create mode 100644 python/hetsgui/src/windows/LibrarySettingsWindow.ui diff --git a/HetsAPI/Internal.hs b/HetsAPI/Internal.hs index bf39a00635..d1e0967cbd 100644 --- a/HetsAPI/Internal.hs +++ b/HetsAPI/Internal.hs @@ -7,7 +7,7 @@ License : GPLv2 or higher, see LICENSE.txt module HetsAPI.Internal ( fromJust , Result, resultToMaybe, Diagnosis - , HetcatsOpts, defaultHetcatsOpts + , HetcatsOpts(..), defaultHetcatsOpts , DGraph, DGNodeLab, DGLinkLab() , DGNodeType, nodeTypeIsProven, nodeTypeIsProvenConsistent, nodeTypeIsReference , DevGraphLinkType(..), DevGraphLinkKind(..), getDevGraphLinkType @@ -57,6 +57,62 @@ module HetsAPI.Internal ( , showGlobalDoc , showDoc + + -- , optsWithAnalysis + -- , optsWithGuiType + , optsWithUrlCatalog + , optsWithInfiles + , optsWithSpecNames + , optsWithTransNames + , optsWithLossyTrans + , optsWithViewNames + -- , optsWithIntype + , optsWithLibdirs + , optsWithModelSparQ + , optsWithCounterSparQ + , optsWithOutdir + -- , optsWithOuttypes + , optsWithDatabaseDoMigrate + , optsWithDatabaseOutputFile + , optsWithDatabaseConfigFile + , optsWithDatabaseSubConfigKey + , optsWithDatabaseFileVersionId + , optsWithDatabaseReanalyze + -- , optsWithDatabaseConfig + -- , optsWithDatabaseContext + , optsWithXupdate + , optsWithRecurse + , optsWithVerbose + , optsWithDefLogic + , optsWithDefSyntax + , optsWithOutputToStdout + -- , optsWithCaslAmalg + , optsWithInteractive + , optsWithConnectP + , optsWithConnectH + , optsWithUncolored + , optsWithXmlFlag + , optsWithApplyAutomatic + , optsWithComputeNormalForm + , optsWithDumpOpts + , optsWithDisableCertificateVerification + -- , optsWithIoEncoding + , optsWithUseLibPos + , optsWithUnlit + , optsWithServe + , optsWithListen + , optsWithPidFile + , optsWithWhitelist + , optsWithBlacklist + , optsWithRunMMT + , optsWithFullTheories + , optsWithOutputLogicList + , optsWithOutputLogicGraph + , optsWithFileType + , optsWithAccessToken + , optsWithHttpRequestHeaders + , optsWithFullSign + , optsWithPrintAST ) where @@ -71,7 +127,7 @@ import Common.Id import Common.IRI import Common.LibName (LibName) import Common.Result (Result, resultToMaybe, Diagnosis) -import Driver.Options (HetcatsOpts, defaultHetcatsOpts) +import Driver.Options (HetcatsOpts(..), defaultHetcatsOpts) import Static.DevGraph (DGraph, DGNodeLab(..), DGLinkLab(..), getNodeConsStatus, getNodeCons, getDGNodeName, globalAnnos, LibEnv, isInternalNode, getRealDGLinkType) import Static.DgUtils (ConsStatus(..), getConsOfStatus, isProvenConsStatusLink, NodeName, DGNodeType(..), DGEdgeType(..), DGEdgeTypeModInc(..), Scope(..), ThmTypes(..), FreeOrCofree(..), getEdgeNum) import Logic.Prover (ProofStatus(..), GoalStatus(..), TacticScript(..)) @@ -152,6 +208,114 @@ getDevGraphLinkType l = case edgeTypeModInc (getRealDGLinkType l) of +-- optsWithAnalysis :: HetcatsOpts -> AnaType -> HetcatsOpts +-- optsWithAnalysis o v = o {analysis = v} +optsWithUrlCatalog :: HetcatsOpts -> [(String, String)] -> HetcatsOpts +optsWithUrlCatalog o v = o {urlCatalog = v} +optsWithInfiles :: HetcatsOpts -> [FilePath] -> HetcatsOpts +optsWithInfiles o v = o {infiles = v} +optsWithSpecNames :: HetcatsOpts -> [SIMPLE_ID] -> HetcatsOpts +optsWithSpecNames o v = o {specNames = v} +optsWithTransNames :: HetcatsOpts -> [SIMPLE_ID] -> HetcatsOpts +optsWithTransNames o v = o {transNames = v} +optsWithLossyTrans :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithLossyTrans o v = o {lossyTrans = v} +optsWithViewNames :: HetcatsOpts -> [SIMPLE_ID] -> HetcatsOpts +optsWithViewNames o v = o {viewNames = v} +-- optsWithIntype :: HetcatsOpts -> InType -> HetcatsOpts +-- optsWithIntype o v = o {intype = v} +optsWithLibdirs :: HetcatsOpts -> [FilePath] -> HetcatsOpts +optsWithLibdirs o v = o {libdirs = v} +optsWithModelSparQ :: HetcatsOpts -> FilePath -> HetcatsOpts +optsWithModelSparQ o v = o {modelSparQ = v} +optsWithCounterSparQ :: HetcatsOpts -> Int -> HetcatsOpts +optsWithCounterSparQ o v = o {counterSparQ = v} +optsWithOutdir :: HetcatsOpts -> FilePath -> HetcatsOpts +optsWithOutdir o v = o {outdir = v} +-- optsWithOuttypes :: HetcatsOpts -> [OutType] -> HetcatsOpts +-- optsWithOuttypes o v = o {outtypes = v} +optsWithDatabaseDoMigrate :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithDatabaseDoMigrate o v = o {databaseDoMigrate = v} +optsWithDatabaseOutputFile :: HetcatsOpts -> FilePath -> HetcatsOpts +optsWithDatabaseOutputFile o v = o {databaseOutputFile = v} +optsWithDatabaseConfigFile :: HetcatsOpts -> FilePath -> HetcatsOpts +optsWithDatabaseConfigFile o v = o {databaseConfigFile = v} +optsWithDatabaseSubConfigKey :: HetcatsOpts -> String -> HetcatsOpts +optsWithDatabaseSubConfigKey o v = o {databaseSubConfigKey = v} +optsWithDatabaseFileVersionId :: HetcatsOpts -> String -> HetcatsOpts +optsWithDatabaseFileVersionId o v = o {databaseFileVersionId = v} +optsWithDatabaseReanalyze :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithDatabaseReanalyze o v = o {databaseReanalyze = v} +-- optsWithDatabaseConfig :: HetcatsOpts -> DBConfig.DBConfig -> HetcatsOpts +-- optsWithDatabaseConfig o v = o {databaseConfig = v} +-- optsWithDatabaseContext :: HetcatsOpts -> DBConfig.DBContext -> HetcatsOpts +-- optsWithDatabaseContext o v = o {databaseContext = v} +optsWithXupdate :: HetcatsOpts -> FilePath -> HetcatsOpts +optsWithXupdate o v = o {xupdate = v} +optsWithRecurse :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithRecurse o v = o {recurse = v} +optsWithVerbose :: HetcatsOpts -> Int -> HetcatsOpts +optsWithVerbose o v = o {verbose = v} +optsWithDefLogic :: HetcatsOpts -> String -> HetcatsOpts +optsWithDefLogic o v = o {defLogic = v} +optsWithDefSyntax :: HetcatsOpts -> String -> HetcatsOpts +optsWithDefSyntax o v = o {defSyntax = v} +optsWithOutputToStdout :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithOutputToStdout o v = o {outputToStdout = v} +-- optsWithCaslAmalg :: HetcatsOpts -> [CASLAmalgOpt] -> HetcatsOpts +-- optsWithCaslAmalg o v = o {caslAmalg = v} +optsWithInteractive :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithInteractive o v = o {interactive = v} +optsWithConnectP :: HetcatsOpts -> Int -> HetcatsOpts +optsWithConnectP o v = o {connectP = v} +optsWithConnectH :: HetcatsOpts -> String -> HetcatsOpts +optsWithConnectH o v = o {connectH = v} +optsWithUncolored :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithUncolored o v = o {uncolored = v} +optsWithXmlFlag :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithXmlFlag o v = o {xmlFlag = v} +optsWithApplyAutomatic :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithApplyAutomatic o v = o {applyAutomatic = v} +optsWithComputeNormalForm :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithComputeNormalForm o v = o {computeNormalForm = v} +optsWithDumpOpts :: HetcatsOpts -> [String] -> HetcatsOpts +optsWithDumpOpts o v = o {dumpOpts = v} +optsWithDisableCertificateVerification :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithDisableCertificateVerification o v = o {disableCertificateVerification = v} +-- optsWithIoEncoding :: HetcatsOpts -> Enc -> HetcatsOpts +-- optsWithIoEncoding o v = o {ioEncoding = v} +optsWithUseLibPos :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithUseLibPos o v = o {useLibPos = v} +optsWithUnlit :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithUnlit o v = o {unlit = v} +optsWithServe :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithServe o v = o {serve = v} +optsWithListen :: HetcatsOpts -> Int -> HetcatsOpts +optsWithListen o v = o {listen = v} +optsWithPidFile :: HetcatsOpts -> FilePath -> HetcatsOpts +optsWithPidFile o v = o {pidFile = v} +optsWithWhitelist :: HetcatsOpts -> [[String]] -> HetcatsOpts +optsWithWhitelist o v = o {whitelist = v} +optsWithBlacklist :: HetcatsOpts -> [[String]] -> HetcatsOpts +optsWithBlacklist o v = o {blacklist = v} +optsWithRunMMT :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithRunMMT o v = o {runMMT = v} +optsWithFullTheories :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithFullTheories o v = o {fullTheories = v} +optsWithOutputLogicList :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithOutputLogicList o v = o {outputLogicList = v} +optsWithOutputLogicGraph :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithOutputLogicGraph o v = o {outputLogicGraph = v} +optsWithFileType :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithFileType o v = o {fileType = v} +optsWithAccessToken :: HetcatsOpts -> String -> HetcatsOpts +optsWithAccessToken o v = o {accessToken = v} +optsWithHttpRequestHeaders :: HetcatsOpts -> [String] -> HetcatsOpts +optsWithHttpRequestHeaders o v = o {httpRequestHeaders = v} +optsWithFullSign :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithFullSign o v = o {fullSign = v} +optsWithPrintAST :: HetcatsOpts -> Bool -> HetcatsOpts +optsWithPrintAST o v = o {printAST = v} diff --git a/python/hets/Library.py b/python/hets/Library.py index 3f0488a5fa..55ecfef8b6 100644 --- a/python/hets/Library.py +++ b/python/hets/Library.py @@ -5,11 +5,14 @@ """ from typing import Optional +import typing from .HsWrapper import HsWrapper, HsHierarchyElement from .haskell import defaultHetcatsOpts, loadLibrary as loadHsLibrary, fst, snd, getGraphForLibrary, HetcatsOpts, \ checkConsistencyAndRecord, Result, resultToMaybe, Just, fromJust +import hets.haskell.Internal as Internal + from .DevelopmentGraph import DevelopmentGraph from .result import result_or_raise @@ -141,8 +144,167 @@ def hs_update_result(self, new_env_r: Result): if isinstance(new_env_m, Just): self.hs_update(fromJust(new_env_m)) -def load_library(path: str, options: HetcatsOpts = defaultHetcatsOpts) -> Library: - result = loadHsLibrary(path, options).act() + +def load_library(path: str, + url_catalog: Optional[typing.List[typing.Tuple[str, str]]] = None, + infiles: Optional[typing.List[str]] = None, + spec_names: Optional[typing.List[typing.Any]] = None, + trans_names: Optional[typing.List[typing.Any]] = None, + lossy_trans: Optional[bool] = None, + view_names: Optional[typing.List[typing.Any]] = None, + libdirs: Optional[typing.List[str]] = None, + model_spar_q: Optional[str] = None, + counter_spar_q: Optional[int] = None, + outdir: Optional[str] = None, + database_do_migrate: Optional[bool] = None, + database_output_file: Optional[str] = None, + database_config_file: Optional[str] = None, + database_sub_config_key: Optional[str] = None, + database_file_version_id: Optional[str] = None, + database_reanalyze: Optional[bool] = None, + xupdate: Optional[str] = None, + recurse: Optional[bool] = None, + verbose: Optional[int] = None, + def_logic: Optional[str] = None, + def_syntax: Optional[str] = None, + output_to_stdout: Optional[bool] = None, + interactive: Optional[bool] = None, + connect_p: Optional[int] = None, + connect_h: Optional[str] = None, + uncolored: Optional[bool] = None, + xml_flag: Optional[bool] = None, + apply_automatic: Optional[bool] = None, + compute_normal_form: Optional[bool] = None, + dump_opts: Optional[typing.List[str]] = None, + disable_certificate_verification: Optional[bool] = None, + use_lib_pos: Optional[bool] = None, + unlit: Optional[bool] = None, + serve: Optional[bool] = None, + listen: Optional[int] = None, + pid_file: Optional[str] = None, + whitelist: Optional[typing.List[typing.List[str]]] = None, + blacklist: Optional[typing.List[typing.List[str]]] = None, + run_mmt: Optional[bool] = None, + full_theories: Optional[bool] = None, + output_logic_list: Optional[bool] = None, + output_logic_graph: Optional[bool] = None, + file_type: Optional[bool] = None, + access_token: Optional[str] = None, + http_request_headers: Optional[typing.List[str]] = None, + full_sign: Optional[bool] = None, + print_ast: Optional[bool] = None, + ) -> Library: + def get_hetcats_opts(**kwargs): + python_names_to_haskell_fns = { + "url_catalog": Internal.optsWithUrlCatalog, + "infiles": Internal.optsWithInfiles, + "spec_names": Internal.optsWithSpecNames, + "trans_names": Internal.optsWithTransNames, + "lossy_trans": Internal.optsWithLossyTrans, + "view_names": Internal.optsWithViewNames, + "libdirs": Internal.optsWithLibdirs, + "model_spar_q": Internal.optsWithModelSparQ, + "counter_spar_q": Internal.optsWithCounterSparQ, + "outdir": Internal.optsWithOutdir, + "database_do_migrate": Internal.optsWithDatabaseDoMigrate, + "database_output_file": Internal.optsWithDatabaseOutputFile, + "database_config_file": Internal.optsWithDatabaseConfigFile, + "database_sub_config_key": Internal.optsWithDatabaseSubConfigKey, + "database_file_version_id": Internal.optsWithDatabaseFileVersionId, + "database_reanalyze": Internal.optsWithDatabaseReanalyze, + "xupdate": Internal.optsWithXupdate, + "recurse": Internal.optsWithRecurse, + "verbose": Internal.optsWithVerbose, + "def_logic": Internal.optsWithDefLogic, + "def_syntax": Internal.optsWithDefSyntax, + "output_to_stdout": Internal.optsWithOutputToStdout, + "interactive": Internal.optsWithInteractive, + "connect_p": Internal.optsWithConnectP, + "connect_h": Internal.optsWithConnectH, + "uncolored": Internal.optsWithUncolored, + "xml_flag": Internal.optsWithXmlFlag, + "apply_automatic": Internal.optsWithApplyAutomatic, + "compute_normal_form": Internal.optsWithComputeNormalForm, + "dump_opts": Internal.optsWithDumpOpts, + "disable_certificate_verification": Internal.optsWithDisableCertificateVerification, + "use_lib_pos": Internal.optsWithUseLibPos, + "unlit": Internal.optsWithUnlit, + "serve": Internal.optsWithServe, + "listen": Internal.optsWithListen, + "pid_file": Internal.optsWithPidFile, + "whitelist": Internal.optsWithWhitelist, + "blacklist": Internal.optsWithBlacklist, + "run_mmt": Internal.optsWithRunMMT, + "full_theories": Internal.optsWithFullTheories, + "output_logic_list": Internal.optsWithOutputLogicList, + "output_logic_graph": Internal.optsWithOutputLogicGraph, + "file_type": Internal.optsWithFileType, + "access_token": Internal.optsWithAccessToken, + "http_request_headers": Internal.optsWithHttpRequestHeaders, + "full_sign": Internal.optsWithFullSign, + "print_ast": Internal.optsWithPrintAST, + } + + options = defaultHetcatsOpts + + for key, value in kwargs.items(): + if key in python_names_to_haskell_fns and value is not None: + hs_fn = python_names_to_haskell_fns[key] + options = hs_fn(options, value) + + return options + + opts = get_hetcats_opts( + url_catalog=url_catalog, + infiles=infiles, + spec_names=spec_names, + trans_names=trans_names, + lossy_trans=lossy_trans, + view_names=view_names, + libdirs=libdirs, + model_spar_q=model_spar_q, + counter_spar_q=counter_spar_q, + outdir=outdir, + database_do_migrate=database_do_migrate, + database_output_file=database_output_file, + database_config_file=database_config_file, + database_sub_config_key=database_sub_config_key, + database_file_version_id=database_file_version_id, + database_reanalyze=database_reanalyze, + xupdate=xupdate, + recurse=recurse, + verbose=verbose, + def_logic=def_logic, + def_syntax=def_syntax, + output_to_stdout=output_to_stdout, + interactive=interactive, + connect_p=connect_p, + connect_h=connect_h, + uncolored=uncolored, + xml_flag=xml_flag, + apply_automatic=apply_automatic, + compute_normal_form=compute_normal_form, + dump_opts=dump_opts, + disable_certificate_verification=disable_certificate_verification, + use_lib_pos=use_lib_pos, + unlit=unlit, + serve=serve, + listen=listen, + pid_file=pid_file, + whitelist=whitelist, + blacklist=blacklist, + run_mmt=run_mmt, + full_theories=full_theories, + output_logic_list=output_logic_list, + output_logic_graph=output_logic_graph, + file_type=file_type, + access_token=access_token, + http_request_headers=http_request_headers, + full_sign=full_sign, + print_ast=print_ast, + ) + + result = loadHsLibrary(path, opts).act() name_and_env = result_or_raise(result, "Failed to load library") diff --git a/python/hets/haskell/Internal.py b/python/hets/haskell/Internal.py index b81581df38..154fad0aa2 100644 --- a/python/hets/haskell/Internal.py +++ b/python/hets/haskell/Internal.py @@ -65,5 +65,52 @@ Proved, Disproved, tacticScriptContent, - goalStatusOpenReason + goalStatusOpenReason, + optsWithUrlCatalog, + optsWithInfiles, + optsWithSpecNames, + optsWithTransNames, + optsWithLossyTrans, + optsWithViewNames, + optsWithLibdirs, + optsWithModelSparQ, + optsWithCounterSparQ, + optsWithOutdir, + optsWithDatabaseDoMigrate, + optsWithDatabaseOutputFile, + optsWithDatabaseConfigFile, + optsWithDatabaseSubConfigKey, + optsWithDatabaseFileVersionId, + optsWithDatabaseReanalyze, + optsWithXupdate, + optsWithRecurse, + optsWithVerbose, + optsWithDefLogic, + optsWithDefSyntax, + optsWithOutputToStdout, + optsWithInteractive, + optsWithConnectP, + optsWithConnectH, + optsWithUncolored, + optsWithXmlFlag, + optsWithApplyAutomatic, + optsWithComputeNormalForm, + optsWithDumpOpts, + optsWithDisableCertificateVerification, + optsWithUseLibPos, + optsWithUnlit, + optsWithServe, + optsWithListen, + optsWithPidFile, + optsWithWhitelist, + optsWithBlacklist, + optsWithRunMMT, + optsWithFullTheories, + optsWithOutputLogicList, + optsWithOutputLogicGraph, + optsWithFileType, + optsWithAccessToken, + optsWithHttpRequestHeaders, + optsWithFullSign, + optsWithPrintAST ) diff --git a/python/hets/haskell/Internal.pyi b/python/hets/haskell/Internal.pyi index 4721ad860d..dca767bef0 100644 --- a/python/hets/haskell/Internal.pyi +++ b/python/hets/haskell/Internal.pyi @@ -132,7 +132,55 @@ def getLEdgesFromDevelopmentGraph(g: DGraph) -> typing.List[typing.Tuple[int, in class HetcatsOpts: ... -def defaultHetcatsOpts() -> HetcatsOpts: ... +defaultHetcatsOpts: HetcatsOpts + +def optsWithUrlCatalog(x0: HetcatsOpts, x1: typing.List[typing.Tuple[str, str]]) -> HetcatsOpts: ... +def optsWithInfiles(x0: HetcatsOpts, x1: typing.List[str]) -> HetcatsOpts: ... +def optsWithSpecNames(x0: HetcatsOpts, x1: typing.List[typing.Any]) -> HetcatsOpts: ... +def optsWithTransNames(x0: HetcatsOpts, x1: typing.List[typing.Any]) -> HetcatsOpts: ... +def optsWithLossyTrans(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithViewNames(x0: HetcatsOpts, x1: typing.List[typing.Any]) -> HetcatsOpts: ... +def optsWithLibdirs(x0: HetcatsOpts, x1: typing.List[str]) -> HetcatsOpts: ... +def optsWithModelSparQ(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithCounterSparQ(x0: HetcatsOpts, x1: int) -> HetcatsOpts: ... +def optsWithOutdir(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithDatabaseDoMigrate(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithDatabaseOutputFile(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithDatabaseConfigFile(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithDatabaseSubConfigKey(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithDatabaseFileVersionId(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithDatabaseReanalyze(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithXupdate(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithRecurse(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithVerbose(x0: HetcatsOpts, x1: int) -> HetcatsOpts: ... +def optsWithDefLogic(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithDefSyntax(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithOutputToStdout(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithInteractive(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithConnectP(x0: HetcatsOpts, x1: int) -> HetcatsOpts: ... +def optsWithConnectH(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithUncolored(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithXmlFlag(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithApplyAutomatic(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithComputeNormalForm(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithDumpOpts(x0: HetcatsOpts, x1: typing.List[str]) -> HetcatsOpts: ... +def optsWithDisableCertificateVerification(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithUseLibPos(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithUnlit(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithServe(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithListen(x0: HetcatsOpts, x1: int) -> HetcatsOpts: ... +def optsWithPidFile(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithWhitelist(x0: HetcatsOpts, x1: typing.List[typing.List[str]]) -> HetcatsOpts: ... +def optsWithBlacklist(x0: HetcatsOpts, x1: typing.List[typing.List[str]]) -> HetcatsOpts: ... +def optsWithRunMMT(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithFullTheories(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithOutputLogicList(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithOutputLogicGraph(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithFileType(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithAccessToken(x0: HetcatsOpts, x1: str) -> HetcatsOpts: ... +def optsWithHttpRequestHeaders(x0: HetcatsOpts, x1: typing.List[str]) -> HetcatsOpts: ... +def optsWithFullSign(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... +def optsWithPrintAST(x0: HetcatsOpts, x1: bool) -> HetcatsOpts: ... def isInternalNode(x0: DGNodeLab) -> bool: ... @@ -171,3 +219,5 @@ def getDevGraphLinkType(x0: DGLinkLab) -> DevGraphLinkType: ... def showGlobalDoc(x0: GlobalAnnos, x1: typing.Any, x2: str) -> str: ... def showDoc(x0: typing.Any, x2: str) -> str: ... + + diff --git a/python/hetsgui/src/application.py b/python/hetsgui/src/application.py index 8ea24160e4..a827b2a2fd 100644 --- a/python/hetsgui/src/application.py +++ b/python/hetsgui/src/application.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import os.path import sys import threading diff --git a/python/hetsgui/src/hetsgui.gresource.xml b/python/hetsgui/src/hetsgui.gresource.xml index ab00118f78..f11f5fbc25 100644 --- a/python/hetsgui/src/hetsgui.gresource.xml +++ b/python/hetsgui/src/hetsgui.gresource.xml @@ -1,12 +1,16 @@ + resources/icon.png + windows/StartUpWindow.ui windows/StartUpWindow.css windows/ProveWindow.ui + windows/LibrarySettingsWindow.ui windows/ProofDetailsWindow.ui widgets/ProofDetail.ui widgets/ProofDetail.css + widgets/EditableListView.ui resources/application-menu.xml diff --git a/python/hetsgui/src/widgets/EditableListView.py b/python/hetsgui/src/widgets/EditableListView.py new file mode 100644 index 0000000000..2c0e5b87b2 --- /dev/null +++ b/python/hetsgui/src/widgets/EditableListView.py @@ -0,0 +1,39 @@ +import gi +from gi.repository import Gtk, GObject + +from GtkSmartTemplate import GtkSmartTemplate + + +@GtkSmartTemplate +class EditableListView(Gtk.Bin): + __gtype_name__ = "EditableListView" + + model = GObject.Property(type=Gtk.ListStore, default=Gtk.ListStore(str)) + + _btn_delete: Gtk.Button = Gtk.Template.Child() + _treeview: Gtk.TreeView = Gtk.Template.Child() + + def __init__(self): + super().__init__() + + self._treeview.set_model(self.model) + + @Gtk.Template.Callback() + def on_add_button_clicked(self, *args): + self._treeview.get_model().append([""]) + + @Gtk.Template.Callback() + def on_delete_button_clicked(self, *args): + model, selected = self._treeview.get_selection().get_selected() + + model.remove(selected) + + @Gtk.Template.Callback() + def on_treeview_selection_changed(self, *args): + model, selected = self._treeview.get_selection().get_selected() + + self._btn_delete.set_sensitive(selected) + + @Gtk.Template.Callback() + def on_text_edited(self, widget, path, text: str): + self.model[path][0] = text diff --git a/python/hetsgui/src/widgets/EditableListView.ui b/python/hetsgui/src/widgets/EditableListView.ui new file mode 100644 index 0000000000..fc442eba9c --- /dev/null +++ b/python/hetsgui/src/widgets/EditableListView.ui @@ -0,0 +1,116 @@ + + + + + + diff --git a/python/hetsgui/src/widgets/__init__.py b/python/hetsgui/src/widgets/__init__.py index aaaa36d60c..f021911e65 100644 --- a/python/hetsgui/src/widgets/__init__.py +++ b/python/hetsgui/src/widgets/__init__.py @@ -13,3 +13,4 @@ from .CellRendererLink import CellRendererLink from .SelectableTreeView import SelectableTreeView from .ExtendedDotWidget import ExtendedDotWidget +from .EditableListView import EditableListView diff --git a/python/hetsgui/src/windows/LibrarySettingsWindow.ui b/python/hetsgui/src/windows/LibrarySettingsWindow.ui new file mode 100644 index 0000000000..3459355b43 --- /dev/null +++ b/python/hetsgui/src/windows/LibrarySettingsWindow.ui @@ -0,0 +1,173 @@ + + + + + diff --git a/python/hetsgui/src/windows/MainWindow.py b/python/hetsgui/src/windows/MainWindow.py index 0ade3024b3..d200b03319 100644 --- a/python/hetsgui/src/windows/MainWindow.py +++ b/python/hetsgui/src/windows/MainWindow.py @@ -13,7 +13,6 @@ from windows.ProveWindow import ProveWindow - T = typing.TypeVar("T") @@ -74,21 +73,25 @@ def __init__(self, **kwargs): self._action("proofs.lib_flat_heterogen", self.on_lib_flat_heterogen) self._action("proofs.qualify_lib_env", self.on_qualify_lib_env) - def _action(self, name: str, cb: Callable[[Gio.SimpleAction, T], Any], param_type_str: Optional[str] = None) -> Gio.SimpleAction: + def _action(self, name: str, cb: Callable[[Gio.SimpleAction, T], Any], + param_type_str: Optional[str] = None) -> Gio.SimpleAction: action = Gio.SimpleAction.new(name, GLib.VariantType(param_type_str) if param_type_str else None) action.connect("activate", cb) self.add_action(action) return action - def _action_toggle(self, name: str, cb: Callable[[Gio.SimpleAction, bool], Any], default: bool = False) -> Gio.SimpleAction: - action = Gio.SimpleAction.new_stateful(name, None, GLib.Variant.new_boolean(default)) + def _action_toggle(self, name: str, cb: Callable[[Gio.SimpleAction, bool], Any], + default: bool = False) -> Gio.SimpleAction: + action = Gio.SimpleAction.new_stateful(name, None, GLib.Variant.new_boolean(default)) action.connect("change-state", cb) self.add_action(action) return action def open_file(self, file: str): + opts = {"libdirs": [os.environ["HETS_LIB"]] if "HETS_LIB" in os.environ else []} + self.file = file - self.library = hets.load_library(file) + self.library = hets.load_library(file, **opts) if self.ui_graph: self.ui_graph.load_graph(self.library.development_graph()) @@ -157,7 +160,8 @@ def on_show_edge_info(self, action, parameter: GLib.Variant): origin_id = parameter.get_child_value(0).get_child_value(0).get_string() target_id = parameter.get_child_value(1).get_child_value(0).get_string() if self.library: - edge = [e for e in self.library.development_graph().edges() if str(e.origin()) == origin_id and str(e.target()) == target_id][0] + edge = [e for e in self.library.development_graph().edges() if + str(e.origin()) == origin_id and str(e.target()) == target_id][0] info_dialog = EdgeInfoDialog(self, edge) info_dialog.run() From 76713bfe4ba28c6066dae6a23fef9e1eb1d8002e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gehrke?= <5106696+b-gehrke@users.noreply.github.com> Date: Sun, 16 Jul 2023 12:36:02 +0200 Subject: [PATCH 22/69] Added automatic update sublogic --- HetsAPI/ProveCommands.hs | 7 ++- HetsAPI/Python.hs | 16 ++++-- Proofs/AbstractState.hs | 29 +++++----- python/hets/Theory.py | 28 ++++++++-- python/hets/haskell/Python.py | 3 +- python/hets/haskell/Python.pyi | 5 ++ python/hetsgui/hetsgui | 1 + .../hetsgui/src/widgets/EditableListView.py | 3 ++ .../hetsgui/src/widgets/EditableListView.ui | 1 - .../src/windows/LibrarySettingsWindow.ui | 2 +- python/hetsgui/src/windows/ProveWindow.py | 54 ++++++++++++++----- python/hetsgui/src/windows/ProveWindow.ui | 4 +- 12 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 python/hetsgui/hetsgui diff --git a/HetsAPI/ProveCommands.hs b/HetsAPI/ProveCommands.hs index 515f6f3ae5..de3884d34e 100644 --- a/HetsAPI/ProveCommands.hs +++ b/HetsAPI/ProveCommands.hs @@ -4,7 +4,8 @@ Copyright : (c) Otto-von-Guericke University of Magdeburg License : GPLv2 or higher, see LICENSE.txt -} module HetsAPI.ProveCommands ( - getAvailableComorphisms + getTheoryForSelection + , getAvailableComorphisms , getUsableProvers , getUsableConsistencyCheckers @@ -46,7 +47,7 @@ import Logic.Comorphism (AnyComorphism) import Logic.Grothendieck (findComorphismPaths) import Logic.Prover (ProofStatus, ProverKind (..)) -import Proofs.AbstractState (G_prover, ProofState, G_proof_tree, autoProofAtNode, G_cons_checker (..), getProverName, getConsCheckers, getCcName) +import Proofs.AbstractState (G_prover, ProofState, G_proof_tree, autoProofAtNode, G_cons_checker (..), getProverName, getConsCheckers, getCcName, makeTheoryForSentences) import qualified Proofs.AbstractState as PAS import Proofs.ConsistencyCheck (ConsistencyStatus, SType(..), consistencyCheck, sType) import Proofs.BatchProcessing (genericProveBatch) @@ -94,6 +95,8 @@ type ProofResult = (G_theory -- The new theory , [ProofStatus G_proof_tree]) -- ProofStatus of each goal +getTheoryForSelection :: [String] -> [String] -> [String] -> G_theory -> G_theory +getTheoryForSelection = makeTheoryForSentences -- | @getAvailableComorphisms theory@ yields all available comorphisms for @theory@ getAvailableComorphisms :: G_theory -> [AnyComorphism] diff --git a/HetsAPI/Python.hs b/HetsAPI/Python.hs index 5b302fc50b..bfef8bf7c0 100644 --- a/HetsAPI/Python.hs +++ b/HetsAPI/Python.hs @@ -19,6 +19,8 @@ module HetsAPI.Python ( , mkPyProofOptions -- Wrapped with Py* + , getTheoryForSelection + , sublogicOfPyTheory , theoryOfNode , getUsableProvers , translateTheory @@ -87,7 +89,7 @@ module HetsAPI.Python ( , HC.qualifyLibEnv , HC.loadLibrary , HC.showTheory - + , HI.getGraphForLibrary , HI.getNodesFromDevelopmentGraph , HI.getLNodesFromDevelopmentGraph @@ -149,7 +151,7 @@ import Logic.Prover (ProofStatus(..), ThmStatus(..)) import Static.DevGraph (DGNodeLab (dgn_theory), DGLinkLab(dgl_morphism), LibEnv, DGraph, dgBody) import qualified Static.DevGraph (DGNodeLab(globalTheory)) import qualified Static.GTheory as GT -import Static.GTheory (G_theory, BasicProof(..)) +import Static.GTheory (G_theory, BasicProof(..), sublogicOfTh) import qualified Proofs.AbstractState import Proofs.AbstractState (G_prover, ProofState, G_proof_tree(..), G_cons_checker) @@ -206,7 +208,7 @@ type PyTheorySentence = SenAttr Sentence (ThmStatus (PyComorphism, PyBasicProof) type PyTheorySentenceByName = OMap.OMap String PyTheorySentence toPyTheorySentence :: TheorySentence -> PyTheorySentence -toPyTheorySentence sen = sen {senAttr = ThmStatus (fmap (\(c, p) -> (PyComorphism c, toPyBasicProof p)) $ getThmStatus . senAttr $ sen)} +toPyTheorySentence sen = sen {senAttr = ThmStatus (fmap (bimap PyComorphism toPyBasicProof) $ getThmStatus . senAttr $ sen)} pyProofStatusOfPyBasicProof :: PyBasicProof -> Maybe (ProofStatus PyProofTree) pyProofStatusOfPyBasicProof b = case b of @@ -310,6 +312,12 @@ consCheckerName (PyConsChecker cc) = Proofs.AbstractState.getCcName cc theoryOfNode :: DGNodeLab -> PyTheory theoryOfNode = PyTheory . dgn_theory +sublogicOfPyTheory :: PyTheory -> String +sublogicOfPyTheory (PyTheory th) = show . sublogicOfTh $ th + +getTheoryForSelection :: [String] -> [String] -> [String] -> PyTheory -> PyTheory +getTheoryForSelection axioms goals theorems (PyTheory th) = PyTheory (HP.getTheoryForSelection axioms goals theorems th) + -- | @getUsableProvers theory@ checks for usable provers available on the machine getUsableProvers :: PyTheory -> IO [(PyProver, PyComorphism)] getUsableProvers (PyTheory th) = do @@ -322,7 +330,7 @@ toPyProofStatus status = status { proofTree = toPyProofTree (proofTree status) } proveNode :: PyTheory -> PyProofOptions -> IO (Result (PyTheory, [ProofStatus PyProofTree])) proveNode (PyTheory theory) opts = - runResultT $ (\(th, statuses) -> (PyTheory th, toPyProofStatus <$> statuses)) <$> HP.proveNode theory (toProofOptions opts) + runResultT $ bimap PyTheory (toPyProofStatus <$>) <$> HP.proveNode theory (toProofOptions opts) proveNodeAndRecord :: HDT.TheoryPointer -> PyProofOptions -> IO (Result ((PyTheory, [ProofStatus PyProofTree]), LibEnv)) proveNodeAndRecord ptr opts = diff --git a/Proofs/AbstractState.hs b/Proofs/AbstractState.hs index 961ca20491..9fa4657fde 100644 --- a/Proofs/AbstractState.hs +++ b/Proofs/AbstractState.hs @@ -33,6 +33,7 @@ module Proofs.AbstractState , toAxioms , getAxioms , getGoals + , makeTheoryForSentences , recalculateSublogicAndSelectedTheory , markProved , G_theory_with_prover (..) @@ -340,22 +341,26 @@ prepareForProving st (G_prover lid4 p, co) = do p' <- coerceProver lid4 lidT "" p return $ G_theory_with_prover lidT th p' --- | creates the currently selected theory -makeSelectedTheory :: ProofState -> G_theory -makeSelectedTheory s = case currentTheory s of - G_theory lid syn sig si sens _ -> - -- axiom map, goal map - let (aMap, gMap) = OMap.partition isAxiom sens +makeTheoryForSentences :: [String] -> [String] -> [String] -> G_theory -> G_theory +makeTheoryForSentences axioms goals theorems (G_theory lid syn sig si sens _ ) = + let (aMap, gMap) = OMap.partition isAxiom sens -- proven goals map - pMap = OMap.filter isProvenSenStatus gMap - in - G_theory lid syn sig si + pMap = OMap.filter isProvenSenStatus gMap + in + G_theory lid syn sig si (Map.unions - [ filterMapWithList (selectedGoals s) gMap - , filterMapWithList (includedAxioms s) aMap - , markAsAxiom True $ filterMapWithList (includedTheorems s) pMap + [ filterMapWithList goals gMap + , filterMapWithList axioms aMap + , markAsAxiom True $ filterMapWithList theorems pMap ]) startThId +-- | creates the currently selected theory +makeSelectedTheory :: ProofState -> G_theory +makeSelectedTheory s = makeTheoryForSentences + (includedAxioms s) + (selectedGoals s) + (includedTheorems s) $ currentTheory s + {- | recalculation of sublogic upon (de)selection of goals, axioms and proven theorems diff --git a/python/hets/Theory.py b/python/hets/Theory.py index b6629976a8..6a7db9125c 100644 --- a/python/hets/Theory.py +++ b/python/hets/Theory.py @@ -18,7 +18,7 @@ prettySentence, getUnprovenGoals, OMap, snd, logicNameOfTheory, - logicDescriptionOfTheory, signatureOfTheory) + logicDescriptionOfTheory, signatureOfTheory, sublogicOfPyTheory, getTheoryForSelection) class Theory(HsHierarchyElement): @@ -122,19 +122,22 @@ def axioms(self) -> List[Sentence]: def goals(self) -> List[Sentence]: if self._goals is None: - self._goals = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(getAllGoals(self._hs_theory))] + self._goals = [Sentence(x, self._hs_pretty_sentence, self) for x in + OMap.toList(getAllGoals(self._hs_theory))] return self._goals def proven_goals(self) -> List[Sentence]: if self._proven_goals is None: - self._proven_goals = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(getProvenGoals(self._hs_theory))] + self._proven_goals = [Sentence(x, self._hs_pretty_sentence, self) for x in + OMap.toList(getProvenGoals(self._hs_theory))] return self._proven_goals def unproven_goals(self) -> List[Sentence]: if self._unproven_goals is None: - self._unproven_goals = [Sentence(x, self._hs_pretty_sentence, self) for x in OMap.toList(getUnprovenGoals(self._hs_theory))] + self._unproven_goals = [Sentence(x, self._hs_pretty_sentence, self) for x in + OMap.toList(getUnprovenGoals(self._hs_theory))] return self._unproven_goals @@ -147,3 +150,20 @@ def signature(self) -> Signature: def sentence_by_name(self, name: str) -> Optional[Sentence]: return next(iter(s for s in self.sentences() if s.name() == name), None) + def get_sublogic(self) -> str: + return sublogicOfPyTheory(self._hs_theory) + + def with_selection(self, + axioms: Optional[List[str]] = None, + goals: Optional[List[str]] = None, + theorems: Optional[List[str]] = None): + if axioms is None: + axioms = self.axioms() + if goals is None: + goals = self.goals() + if theorems is None: + theorems = [] + + theory = getTheoryForSelection(axioms, goals, theorems, self._hs_theory) + + return Theory(theory, self.parent()) diff --git a/python/hets/haskell/Python.py b/python/hets/haskell/Python.py index d4b323f236..f9aa7cb224 100644 --- a/python/hets/haskell/Python.py +++ b/python/hets/haskell/Python.py @@ -24,4 +24,5 @@ PyBasicProofGuessed, PyBasicProofConjectured, PyBasicProofHandwritten, PyTheorySentence, PyTheorySentenceByName, theorySentenceIsAxiom, theorySentenceWasTheorem, theorySentenceIsDefined, theorySentenceGetTheoremStatus, theorySentenceBestProof, - theorySentencePriority, theorySentenceContent, pyProofStatusOfPyBasicProof) + theorySentencePriority, theorySentenceContent, pyProofStatusOfPyBasicProof, + sublogicOfPyTheory, getTheoryForSelection) diff --git a/python/hets/haskell/Python.pyi b/python/hets/haskell/Python.pyi index 020e357e4d..6433616260 100644 --- a/python/hets/haskell/Python.pyi +++ b/python/hets/haskell/Python.pyi @@ -125,6 +125,10 @@ def sourceLogicDescriptionName(x0: PyComorphism) -> str: ... def consCheckerName(x0: PyConsChecker) -> str: ... +def getTheoryForSelection(x0: typing.List[str], x1: typing.List[str], x2: typing.List[str], x3: PyTheory) -> PyTheory: ... + +def sublogicOfPyTheory(x0: PyTheory) -> str: ... + def theoryOfNode(x0: DGNodeLab) -> PyTheory: ... @@ -299,3 +303,4 @@ def qualifyLibEnv(name: LibName, env: LibEnv) -> Result[LibEnv]: ... def getDevelopmentGraphNodeType(x0: DGNodeLab) -> DGNodeType: ... + diff --git a/python/hetsgui/hetsgui b/python/hetsgui/hetsgui new file mode 100644 index 0000000000..273cd54ad1 --- /dev/null +++ b/python/hetsgui/hetsgui @@ -0,0 +1 @@ +python3 diff --git a/python/hetsgui/src/widgets/EditableListView.py b/python/hetsgui/src/widgets/EditableListView.py index 2c0e5b87b2..5d8e0e7f8c 100644 --- a/python/hetsgui/src/widgets/EditableListView.py +++ b/python/hetsgui/src/widgets/EditableListView.py @@ -17,6 +17,9 @@ def __init__(self): super().__init__() self._treeview.set_model(self.model) + self.bind_property("model", self._treeview, "model", GObject.BindingFlags.BIDIRECTIONAL) + + @Gtk.Template.Callback() def on_add_button_clicked(self, *args): diff --git a/python/hetsgui/src/widgets/EditableListView.ui b/python/hetsgui/src/widgets/EditableListView.ui index fc442eba9c..12f3ae71e7 100644 --- a/python/hetsgui/src/widgets/EditableListView.ui +++ b/python/hetsgui/src/widgets/EditableListView.ui @@ -1,5 +1,4 @@ -