Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
curry-packages
currycheck
Commits
02ca5686
Commit
02ca5686
authored
Oct 31, 2018
by
Michael Hanus
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Loads only module-relevant proof files
parent
40441970
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
26 additions
and
20 deletions
+26
-20
src/CurryCheck.curry
src/CurryCheck.curry
+13
-10
src/TheoremUsage.curry
src/TheoremUsage.curry
+13
-10
No files found.
src/CurryCheck.curry
View file @
02ca5686
...
...
@@ -39,24 +39,25 @@ import FlatCurry.Files
import qualified FlatCurry.Goodies as FCG
import Text.Pretty ( pPrint )
import CC.AnalysisHelpers
( getTerminationInfos, getProductivityInfos
, getUnsafeModuleInfos, dropPublicSuffix )
import CC.Config
( packagePath, packageVersion )
import CC.AnalysisHelpers ( getTerminationInfos, getProductivityInfos
, getUnsafeModuleInfos, dropPublicSuffix )
import CC.Config ( packagePath, packageVersion )
import CC.Options
import CheckDetUsage
( checkDetUse, containsDetOperations)
import CheckDetUsage ( checkDetUse, containsDetOperations)
import ContractUsage
import DefaultRuleUsage
( checkDefaultRules, containsDefaultRules )
import DefaultRuleUsage ( checkDefaultRules, containsDefaultRules )
import PropertyUsage
import SimplifyPostConds ( simplifyPostConditionsWithTheorems )
import TheoremUsage
import UsageCheck ( checkBlacklistUse, checkSetUse )
import SimplifyPostConds ( simplifyPostConditionsWithTheorems )
import TheoremUsage ( determinismTheoremFor, existsProofFor
, getModuleProofFiles, getTheoremFunctions )
import UsageCheck ( checkBlacklistUse, checkSetUse )
-- Banner of this tool:
ccBanner :: String
ccBanner = unlines [bannerLine,bannerText,bannerLine]
where
bannerText = "CurryCheck: a tool for testing Curry programs (Version " ++
packageVersion ++ " of 3
0
/10/2018)"
packageVersion ++ " of 3
1
/10/2018)"
bannerLine = take (length bannerText) (repeat '-')
-- Help text
...
...
@@ -870,7 +871,9 @@ analyseCurryProg opts modname orgprog = do
maybe (error $ "Source file of module '"++modname++"' not found!") id
let srcdir = takeDirectory srcfilename
putStrLnIfDebug opts $ "Source file: " ++ srcfilename
prooffiles <- if optProof opts then getProofFiles srcdir else return []
prooffiles <- if optProof opts
then getModuleProofFiles srcdir modname
else return []
unless (null prooffiles) $ putStrIfDetails opts $
unlines ("Proof files found:" : map ("- " ++) prooffiles)
progtxt <- readFile srcfilename
...
...
src/TheoremUsage.curry
View file @
02ca5686
...
...
@@ -26,7 +26,7 @@
module TheoremUsage
( determinismTheoremFor
, getProofFiles, existsProofFor,
isProofFileName,
isProofFileNameFor
, get
Module
ProofFiles, existsProofFor, isProofFileNameFor
, getTheoremFunctions
) where
...
...
@@ -50,11 +50,11 @@ determinismTheoremFor funcname = funcname ++ "isdeterministic"
-- Operations for proof files:
--- Get the names of all files in the directory (first argument) containing
--- proofs of theorems.
getProofFiles :: String -> IO [String]
getProofFiles dir = do
--- proofs of theorems
of the module (second argument)
.
get
Module
ProofFiles :: String ->
String ->
IO [String]
get
Module
ProofFiles dir
mod
= do
files <- getDirectoryContents dir
return (filter isProofFileName files)
return (filter
(
is
Module
ProofFileName
mod)
files)
--- Does the list of file names (second argument) contain a proof of the
--- qualified theorem name given as the first argument?
...
...
@@ -62,9 +62,12 @@ existsProofFor :: QName -> [String] -> Bool
existsProofFor qpropname filenames =
any (isProofFileNameFor qpropname) filenames
--- Is this a file name with a proof, i.e., start it with `proof`?
isProofFileName :: String -> Bool
isProofFileName fn = "proof" `isPrefixOf` (map toLower fn)
--- Is the second argument a file name with a proof of some theorem of a module
--- (first argument), i.e., start it with `proof` and the module name?
isModuleProofFileName :: String -> String -> Bool
isModuleProofFileName mn fn =
deleteNonAlphanNum ("proof" ++ map toLower mn)
`isPrefixOf` deleteNonAlphanNum (map toLower fn)
--- Is this the file name of a proof of property `prop`?
isProofFileNameFor :: QName -> String -> Bool
...
...
@@ -84,9 +87,9 @@ deleteNonAlphanNum = filter isAlphaNum
--- A theorem is a property for which a proof file exists in the
--- directory provided as first argument.
getTheoremFunctions :: String -> CurryProg -> IO [CFuncDecl]
getTheoremFunctions proofdir (CurryProg
_
_ _ _ _ _ functions _) = do
getTheoremFunctions proofdir (CurryProg
mn
_ _ _ _ _ functions _) = do
let propfuncs = filter isProperty functions -- all properties
prooffiles <- getProofFiles proofdir
prooffiles <- get
Module
ProofFiles proofdir
mn
return $ filter (\fd -> existsProofFor (funcName fd) prooffiles)
propfuncs
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment