Analysis.hs revision 1da120eb84c9d3ed16f64d6defd9bc30569dc45b
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenModule : $Header$
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenDescription : Basic analysis for common logic
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenCopyright : (c) Eugen Kuksa, Karl Luc, Uni Bremen 2010
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenLicense : GPLv2 or higher, see LICENSE.txt
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenMaintainer : eugenk@informatik.uni-bremen.de
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenStability : experimental
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenPortability : portable
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenBasic and static analysis for common logic
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen ( basicCommonLogicAnalysis
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen , symsOfTextMeta
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen , mkStatSymbItems
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen , mkStatSymbMapItem
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen , inducedFromMorphism
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen , inducedFromToMorphism
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersenimport Common.Result as Result
39d8db043b599a7382f94bfc904d5e108af438bdLennart Poetteringimport qualified Common.AS_Annotation as AS_Anno
4e945a6f7971fd7d1f6b2c62ee3afdaff3c95ce4Lennart Poetteringimport Common.IRI (parseIRIReference)
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersenimport qualified CommonLogic.AS_CommonLogic as AS
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersenimport CommonLogic.Morphism as Morphism
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersenimport qualified Data.Set as Set
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersenimport qualified Data.Map as Map
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersenimport qualified Common.Lib.MapSet as MapSet
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersenimport qualified Data.List as List
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersendata DIAG_FORM = DiagForm
cc56fafeebf814ef035e549115cf1850e6473fa5WaLyong Cho-- | retrieves the signature out of a basic spec
a5a807e63a50314e190e9166d8a453cd8dd258e3Zbigniew Jędrzejewski-SzmekmakeSig :: AS.BASIC_SPEC -> Sign.Sign -> Sign.Sign
da927ba997d68401563b927f92e6e40e021a8e5cMichal SchmidtmakeSig (AS.Basic_spec spec) sig = List.foldl retrieveBasicItem sig spec
a5a807e63a50314e190e9166d8a453cd8dd258e3Zbigniew Jędrzejewski-SzmekretrieveBasicItem :: Sign.Sign -> AS_Anno.Annoted AS.BASIC_ITEMS -> Sign.Sign
a5a807e63a50314e190e9166d8a453cd8dd258e3Zbigniew Jędrzejewski-SzmekretrieveBasicItem sig x = case AS_Anno.item x of
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersen AS.Axiom_items xs -> List.foldl retrieveSign sig xs
da927ba997d68401563b927f92e6e40e021a8e5cMichal SchmidtretrieveSign :: Sign.Sign -> AS_Anno.Annoted AS.TEXT_META -> Sign.Sign
74b2466e14a1961bf3ac0e8a60cfaceec705bd59Lennart PoetteringretrieveSign sig (AS_Anno.Annoted tm _ _ _) =
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersen Sign.unite (Sign.unite sig $ nondiscItems $ AS.nondiscourseNames tm)
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersen (propsOfFormula $ AS.getText tm)
682265d5e2157882861b0091c6b81fa92699b72aTom GundersennondiscItems :: Maybe (Set.Set AS.NAME) -> Sign.Sign
682265d5e2157882861b0091c6b81fa92699b72aTom GundersennondiscItems s = case s of
74b2466e14a1961bf3ac0e8a60cfaceec705bd59Lennart Poettering Just ns -> Sign.emptySig {Sign.nondiscourseNames = Set.map Id.simpleIdToId ns}
682265d5e2157882861b0091c6b81fa92699b72aTom Gundersen-- | retrieve sentences
682265d5e2157882861b0091c6b81fa92699b72aTom GundersenmakeFormulas :: AS.BASIC_SPEC -> Sign.Sign -> [DIAG_FORM]
682265d5e2157882861b0091c6b81fa92699b72aTom GundersenmakeFormulas (AS.Basic_spec bspec) sig =
74b2466e14a1961bf3ac0e8a60cfaceec705bd59Lennart Poettering List.foldl (\ xs bs -> retrieveFormulaItem xs bs sig) [] bspec
b9e7a9d870ac41d4db954edd52a1f5dd7d153389Lennart PoetteringretrieveFormulaItem :: [DIAG_FORM] -> AS_Anno.Annoted AS.BASIC_ITEMS
b9e7a9d870ac41d4db954edd52a1f5dd7d153389Lennart Poettering -> Sign.Sign -> [DIAG_FORM]
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenretrieveFormulaItem axs x sig =
74b2466e14a1961bf3ac0e8a60cfaceec705bd59Lennart Poettering List.foldl (\ xs bs -> addFormula xs bs sig) axs $ numberFormulae ax 0
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersendata NUM_FORM = NumForm
74b2466e14a1961bf3ac0e8a60cfaceec705bd59Lennart Poettering nfformula :: AS_Anno.Annoted AS.TEXT_META
da927ba997d68401563b927f92e6e40e021a8e5cMichal Schmidt , nfnum :: Int
edc501d4674dadc304d45a7e1c5b69e207eb8cd4Lennart PoetteringnumberFormulae :: [AS_Anno.Annoted AS.TEXT_META] -> Int -> [NUM_FORM]
da927ba997d68401563b927f92e6e40e021a8e5cMichal SchmidtnumberFormulae [] _ = []
edc501d4674dadc304d45a7e1c5b69e207eb8cd4Lennart PoetteringnumberFormulae (x : xs) i =
edc501d4674dadc304d45a7e1c5b69e207eb8cd4Lennart Poettering then NumForm {nfformula = x, nfnum = i} : numberFormulae xs (i + 1)
4e945a6f7971fd7d1f6b2c62ee3afdaff3c95ce4Lennart Poettering else NumForm {nfformula = x, nfnum = 0} : numberFormulae xs i
74b2466e14a1961bf3ac0e8a60cfaceec705bd59Lennart PoetteringaddFormula :: [DIAG_FORM]
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen -> [DIAG_FORM]
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenaddFormula formulae nf _ = formulae ++
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen formula = makeNamed (setTextIRI f) i
96e6e394431dcc1db52847be311e2c8e61d7a9d6Lennart Poettering f = nfformula nf
af4ec4309e8f82aad87a8d574785c12f8763d5f8Lennart Poettering-- | generates a named formula
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenmakeNamed :: AS_Anno.Annoted AS.TEXT_META -> Int
091a364c802e34a58f3260c9cb5db9b75c62215cTom GundersenmakeNamed f i =
) $ AS_Anno.item f)
{ AS_Anno.isAxiom = not isTheorem }
label = AS_Anno.getRLabel f
annos = AS_Anno.r_annos f
isImplies = any AS_Anno.isImplies annos
isImplied = any AS_Anno.isImplied annos
let mi = case AS.getText tm of
propsOfFormula (AS.Named_text _ txt _) = propsOfFormula txt
propsOfPhrase (AS.Module m) = propsOfModule m
propsOfPhrase (AS.Sentence s) = propsOfSentence s
propsOfPhrase (AS.Comment_text _ txt _) = propsOfFormula txt
$ Sign.uniteL $ nameToSign n : map nameToSign exs
where nameToSign x = Sign.emptySig {
propsOfSentence (AS.Atom_sent form _) = case form of
propsOfSentence (AS.Quant_sent qs _) = case qs of
propsOfSentence (AS.Bool_sent bs _) = case bs of
AS.Conjunction xs -> uniteMap propsOfSentence xs
AS.Disjunction xs -> uniteMap propsOfSentence xs
AS.Negation x -> propsOfSentence x
propsOfSentence (AS.Comment_sent _ s _) = propsOfSentence s
propsOfSentence (AS.Irregular_sent s _) = propsOfSentence s
AS.Comment_term t _ _ -> propsOfTerm t -- fix
AS.Term_seq term -> propsOfTerm term
uniteMap :: (a -> Sign.Sign) -> [a] -> Sign
-> Result (AS.BASIC_SPEC,
Result.Result [] $ if exErrs then Nothing else
-> Sign.Sign
, nondiscourseNames = Set.map (applyMap p) $ nondiscourseNames s
, sequenceMarkers = Set.map (applyMap p) $ sequenceMarkers s
tsy = Set.fold (\ r -> let (q, f) = splitFragment $ symName r
Just r -> Map.insert n $ symName r
Nothing -> if Set.member sy ty then id else
[q] -> Map.insert n $ simpleIdToId
_ -> id) Map.empty sys
t2 = Sign.emptySig
{ discourseNames = Set.map (applyMap p) $ discourseNames s
, nondiscourseNames = Set.map (applyMap p) $ nondiscourseNames s
, sequenceMarkers = Set.map (applyMap p) $ sequenceMarkers s
AS.Bool_sent bs r -> case bs of
AS.Negation s -> s
mkStatSymbMapItem :: [AS.SYMB_MAP_ITEMS]
Result.diags = []
, Result.maybeResult = Just $
AS.Symb_map_items sitem _ ->
Map.union smap $ statSymbMapItem sitem
AS.Symb_mapN s1 s2 _
-> Map.insert (symbToSymbol s1) (symbToSymbol s2) mmap
AS.Symb_mapS s1 s2 _
-> Map.insert (symbToSymbol s1) (symbToSymbol s2) mmap
mkStatSymbItems a = Result.Result
Result.diags = []
, Result.maybeResult = Just $ statSymbItems a
symbItemsToSymbol (AS.Symb_items syms _) = map nosToSymbol syms
AS.Name tok -> symbToSymbol tok
AS.SeqMark tok -> symbToSymbol tok