Analysis_DFOL.hs revision 94e2e03f6efde106de095ef4ea0ec87f74955a31
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederModule : $Header$
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederDescription : Static analysis for first-order logic with dependent types (DFOL)
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederCopyright : (c) Kristina Sojakova, DFKI Bremen 2009
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederMaintainer : k.sojakova@jacobs-university.de
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederStability : experimental
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian MaederPortability : portable
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian Maeder basicAnalysis -- static analysis of basic specifications
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian Maeder , symbAnalysis -- static analysis for symbols lists
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian Maeder , symbMapAnalysis -- static analysis for symbol map lists
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian Maederimport qualified Common.Result as Result
ad0b6d89fd72f0db461bfa6b43699157b6d2daf7Christian Maederimport qualified Common.AS_Annotation as Anno
8561bd2b32a5bfb81f18760fc9c221ddd0365031Christian Maederimport qualified Data.Set as Set
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian Maederimport qualified Data.Map as Map
215f5ca60813ce24c2ad4c89e66e975e621dde83Christian Maeder-- BASIC SPEC ANALYSIS
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian MaederbasicAnalysis :: (BASIC_SPEC, Sign, GlobalAnnos) ->
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder Result.Result (BASIC_SPEC, ExtSign Sign Symbol, [Anno.Named FORMULA])
a9bb88c51c6cffa4be78fa8ddd15029831ac2596Christian MaederbasicAnalysis (bs, sig, _) =
d16796d2e67b21942cb8869a2bd7727b0c49f602Christian Maeder then Result.Result diag Nothing
215f5ca60813ce24c2ad4c89e66e975e621dde83Christian Maeder else Result.Result [] $ Just (bs, ExtSign newSig declaredSyms, formulae)
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder where Diagn diag1 newSig = makeSig bs sig
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder Diagn diag2 formulae = makeFormulas bs newSig
a9bb88c51c6cffa4be78fa8ddd15029831ac2596Christian Maeder declaredSyms = Set.map Symbol
dc2ce67f56f9d4507503cc2a24f2646c7f2adf6dChristian Maeder $ Set.difference (getSymbols newSig) (getSymbols sig)
add3ebffeda5101eae1f7a952bf7a75382a6a5e4Christian Maeder diag = diag1 ++ diag2
addItemsToSig :: [Anno.Annoted BASIC_ITEM] -> Sign -> DIAGN Sign
(Anno.Annoted (Axiom_item _) _ _ _) -> addItemsToSig is sig
(Anno.Annoted (Decl_item d) _ _ _) ->
if (Result.hasErrors diag)
makeFormulas :: BASIC_SPEC -> Sign -> DIAGN [Anno.Named FORMULA]
makeFormulasFromItems :: [Anno.Annoted BASIC_ITEM] -> Int
-> Sign -> DIAGN [Anno.Named FORMULA]
(Anno.Annoted (Decl_item _) _ _ _) -> makeFormulasFromItems is num sig
(Anno.Annoted (Axiom_item a) _ _ annos) ->
where Result.Result diag fM = makeNamedFormula a nam annos sig
label = Anno.getRLabel i
makeNamedFormula :: FORMULA -> String -> [Anno.Annotation]
then Result.Result [] $ Just $ namedF
else Result.Result diag Nothing
isImplies = or $ map Anno.isImplies annos
isImplied = or $ map Anno.isImplied annos
-- determines whether a formula is valid w.r.t. a signature and a context
where Result.Result diag1 type1M = getTermType term1 sig cont
symbMapAnalysis xs = Result.Result []
makeSymbMap :: SYMB_MAP_ITEMS -> Map.Map Symbol Symbol
Symb s -> Map.insert (Symbol s) (Symbol s) m
Symb_map s1 s2 -> Map.insert (Symbol s1) (Symbol s2) m
symbAnalysis :: [SYMB_ITEMS] -> Result.Result [Symbol]
symbAnalysis xs = Result.Result [] $ Just $ concat $ map makeSymbols xs
noDiscourseTermError :: TERM -> TYPE -> CONTEXT -> Result.Diagnosis
, Result.diagString = "Term " ++ (show $ pretty term)
, Result.diagPos = nullRange