Analysis.hs revision 40988f50f3e378a38ab97702f6cc69fc7f43be6f
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringModule : $Header$
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringDescription : Basic analysis for common logic
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringCopyright : (c) Eugen Kuksa, Karl Luc, Uni Bremen 2010
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringLicense : GPLv2 or higher, see LICENSE.txt
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringMaintainer : eugenk@informatik.uni-bremen.de
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringStability : experimental
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringPortability : portable
4ba93280223ceb5de1bcedb196c38252f334521aLennart PoetteringBasic and static analysis for common logic
4ba93280223ceb5de1bcedb196c38252f334521aLennart Poettering ( basicCommonLogicAnalysis
4ba93280223ceb5de1bcedb196c38252f334521aLennart Poettering , symsOfTextMeta
4ba93280223ceb5de1bcedb196c38252f334521aLennart Poettering , mkStatSymbItems
4ba93280223ceb5de1bcedb196c38252f334521aLennart Poettering , mkStatSymbMapItem
4ba93280223ceb5de1bcedb196c38252f334521aLennart Poettering , inducedFromMorphism
4ba93280223ceb5de1bcedb196c38252f334521aLennart Poettering , inducedFromToMorphism
a8fbdf5424be099ba1b2b1ec261c02b8759d6b0cThomas Hindoe Paaboel Andersenimport Common.Result as Result
023fb90b83871a15ef7f57e8cd126e3426f99b9eLennart Poetteringimport qualified Common.AS_Annotation as AS_Anno
ae3dde801253b1d5f7363bb9fb06bcb230f00eb8Lennart Poetteringimport Common.IRI (parseIRIReference)
ae3dde801253b1d5f7363bb9fb06bcb230f00eb8Lennart Poetteringimport qualified CommonLogic.AS_CommonLogic as AS
023fb90b83871a15ef7f57e8cd126e3426f99b9eLennart Poetteringimport qualified Data.Set as Set
0ec5543c4c0318552a4dcdd83210793347b93081Lennart Poetteringimport qualified Data.Map as Map
0ec5543c4c0318552a4dcdd83210793347b93081Lennart Poetteringimport qualified Common.Lib.MapSet as MapSet
da054c3782f25b3b18243f6c76dcfcf90ba70274Lennart Poetteringimport qualified Data.List as List
da054c3782f25b3b18243f6c76dcfcf90ba70274Lennart Poetteringimport Data.Graph.Inductive.Graph as Graph
023fb90b83871a15ef7f57e8cd126e3426f99b9eLennart Poetteringdata DIAG_FORM = DiagForm
diagnosis :: Result.Diagnosis
retrieveBasicItem sig x = case AS_Anno.item x of
retrieveSign sig (AS_Anno.Annoted tm _ _ _) =
(propsOfFormula $ AS.getText tm)
Nothing -> Sign.emptySig
makeFormulas (AS.Basic_spec bspec) sig =
List.foldl (\ xs bs -> retrieveFormulaItem xs bs sig) [] bspec
-> Sign.Sign -> [DIAG_FORM]
case AS_Anno.item x of
AS.Axiom_items ax ->
List.foldl (\ xs bs -> addFormula xs bs sig) axs $ numberFormulae ax 0
if null $ AS_Anno.getRLabel x
-> Sign.Sign
, diagnosis = Result.Diag
, Result.diagString = "All fine"
, Result.diagPos = lnum
lnum = AS_Anno.opt_pos f
) $ 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 _ xs s _) =
Sign.sigDiff (propsOfSentence s) (uniteMap propsOfNames xs)
propsOfSentence (AS.Bool_sent bs _) = case bs of
AS.Junction _ 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.That_term s _ -> propsOfSentence s
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
let mor2fun (x,mor) = (x, Morphism.propMap mor)
dGraph = emap mor2fun $ nmap Sign.discourseNames diag
ndGraph = emap mor2fun $ nmap Sign.nondiscourseNames diag
sGraph = emap mor2fun $ nmap Sign.sequenceMarkers diag
sig = Sign { Sign.discourseNames = dCol
, Sign.nondiscourseNames = ndCol
, Sign.sequenceMarkers = sCol
mors = Map.unions $ map (\ (x, nsig) ->
let m = Morphism.Morphism {
Morphism.source = nsig
, Morphism.target = sig
[ Map.findWithDefault (error "dmap") x dmap,
Map.findWithDefault (error "ndmap") x ndmap,
Map.findWithDefault (error "smap") x smap]