OWL22CASL.hs revision 0c3badd7ad83eb89f64ef5ed1122c4fa856fb45d
66267bcb678a9c341272c323b299337bcfdb7cc5Christian Maeder{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}
66267bcb678a9c341272c323b299337bcfdb7cc5Christian MaederModule : $Header$
66267bcb678a9c341272c323b299337bcfdb7cc5Christian MaederDescription : Comorphism from OWL 2 to CASL_Dl
e7ce154edb906685b3fa7f6c0a764e18a4658068Christian MaederCopyright : (c) Francisc-Nicolae Bungiu, Felix Gabriel Mance
66267bcb678a9c341272c323b299337bcfdb7cc5Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
66267bcb678a9c341272c323b299337bcfdb7cc5Christian MaederMaintainer : f.bungiu@jacobs-university.de
66267bcb678a9c341272c323b299337bcfdb7cc5Christian MaederStability : provisional
fb69cd512eab767747f109e40322df7cae2f7bdfChristian MaederPortability : non-portable (via Logic.Logic)
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maedermodule OWL2.OWL22CASL (OWL22CASL (..)) where
08b724e8dcbba5820d80f0974b9a5385140815baChristian Maederimport qualified Data.Set as Set
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maederimport qualified Data.Map as Map
712f5e5ca1c3a5cfdd28518154ecf2dd0994cdb5Christian Maederimport qualified Common.Lib.MapSet as MapSet
da245da15da78363c896e44ea97a14ab1f83eb50Christian Maederimport qualified Common.Lib.Rel as Rel
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder-- the DL with the initial signature for OWL
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- OWL = domain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederimport qualified OWL2.Sign as OS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- CASL_DL = codomain
fb50920e621bfc152c19147cb52077ff06b3526bChristian Maederdata OWL22CASL = OWL22CASL deriving Show
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maederinstance Language OWL22CASL
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maederinstance Comorphism
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder OWL22CASL -- comorphism
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder OWL2 -- lid domain
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder ProfSub -- sublogics domain
fb69cd512eab767747f109e40322df7cae2f7bdfChristian Maeder OntologyDocument -- Basic spec domain
cf3232cec840a6945667bdb06f5b47b22243bc8fChristian Maeder Axiom -- sentence domain
c18e9c3c6d5039618f1f2c05526ece84c7794ea3Christian Maeder SymbItems -- symbol items domain
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder SymbMapItems -- symbol map items domain
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder OS.Sign -- signature domain
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder OWLMorphism -- morphism domain
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder Entity -- symbol domain
fb69cd512eab767747f109e40322df7cae2f7bdfChristian Maeder RawSymb -- rawsymbol domain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ProofTree -- proof tree codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder CASL -- lid codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder CASL_Sublogics -- sublogics codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder CASLBasicSpec -- Basic spec codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder CASLFORMULA -- sentence codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder SYMB_ITEMS -- symbol items codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder SYMB_MAP_ITEMS -- symbol map items codomain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder CASLSign -- signature codomain
31242f7541fd6ef179e4eb5be7522ddf54ae397bChristian Maeder CASLMor -- morphism codomain
31242f7541fd6ef179e4eb5be7522ddf54ae397bChristian Maeder Symbol -- symbol codomain
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder RawSymbol -- rawsymbol codomain
31242f7541fd6ef179e4eb5be7522ddf54ae397bChristian Maeder ProofTree -- proof tree domain
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder sourceLogic OWL22CASL = OWL2
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder sourceSublogic OWL22CASL = topS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder targetLogic OWL22CASL = CASL
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder mapSublogic OWL22CASL _ = Just $ cFol
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder { cons_features = emptyMapConsFeature }
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder map_theory OWL22CASL = mapTheory
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder map_morphism OWL22CASL = mapMorphism
628310b42327ad76ce471caf0dde6563d6fa6307Christian Maeder map_symbol OWL22CASL _ = mapSymbol
628310b42327ad76ce471caf0dde6563d6fa6307Christian Maeder isInclusionComorphism OWL22CASL = True
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder has_model_expansion OWL22CASL = True
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder-- s = emptySign ()
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederuniteL :: [CASLSign] -> CASLSign
ffd01020a4f35f434b912844ad6e0d6918fadffdChristian MaederuniteL = foldl1 uniteCASLSign
ffd01020a4f35f434b912844ad6e0d6918fadffdChristian MaederfailMsg :: Pretty a => a -> Result b
f0742398d4587242b1a115de113cd17f63dcb6d0Christian MaederfailMsg a = fail $ "cannot translate " ++ showDoc a "\n"
715ffaf874309df081d1e1cd8e05073fc1227729Christian MaederobjectPropPred :: PredType
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederobjectPropPred = PredType [thing, thing]
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian MaederdataPropPred :: PredType
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian MaederdataPropPred = PredType [thing, dataS]
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederindiConst :: OpType
c1031ac42b3f3d7d0fe7d9d6b54423a092d473a0Christian MaederindiConst = OpType Total [] thing
e7ce154edb906685b3fa7f6c0a764e18a4658068Christian MaederuriToIdM :: IRI -> Result Id
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederuriToIdM = return . uriToId
e7ce154edb906685b3fa7f6c0a764e18a4658068Christian Maeder-- | Extracts Id from URI
fb69cd512eab767747f109e40322df7cae2f7bdfChristian MaederuriToId :: IRI -> Id
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder let l = localPart urI
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ur = if isThing urI then mkQName l else urI
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder repl a = if isAlphaNum a then [a] else "_u"
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder nP = concatMap repl $ namePrefix ur
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder lP = concatMap repl l
05e2a3161e4589a717c6fe5c7306820273a473c5Christian Maeder in stringToId $ (if isDatatypeKey urI then "" else nP) ++ lP
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedertokDecl :: Token -> VAR_DECL
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedertokDecl = flip mkVarDecl thing
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedertokDataDecl :: Token -> VAR_DECL
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedertokDataDecl = flip mkVarDecl dataS
772abb916b994ad9461ddb11c88829251c5ac87aChristian MaedernameDecl :: Int -> SORT -> VAR_DECL
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaedernameDecl = mkVarDecl . mkNName
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederthingDecl :: Int -> VAR_DECL
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederthingDecl = flip nameDecl thing
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederdataDecl :: Int -> VAR_DECL
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederdataDecl = flip nameDecl dataS
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederqualThing :: Int -> TERM f
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaederqualThing = toQualVar . thingDecl
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaederqualData :: Int -> TERM f
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaederqualData = toQualVar . dataDecl
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaederimplConj :: [FORMULA f] -> FORMULA f -> FORMULA f
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaederimplConj = mkImpl . conjunct
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaedermkNC :: [FORMULA f] -> FORMULA f
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaedermkNC = mkNeg . conjunct
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaedermkEqVar :: VAR_DECL -> TERM f -> FORMULA f
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaedermkEqVar = mkStEq . toQualVar
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaedermkFEI :: [VAR_DECL] -> [VAR_DECL] -> FORMULA f -> FORMULA f -> FORMULA f
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaedermkFEI l1 l2 f = mkForall l1 . mkExist l2 . mkImpl f
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaedermkFIE :: [Int] -> [FORMULA f] -> Int -> Int -> FORMULA f
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaedermkFIE l1 l2 x y = mkVDecl l1 $ implConj l2 $ mkEqVar (thingDecl x) $ qualThing y
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian MaedermkRI :: [Int] -> Int -> FORMULA f -> FORMULA f
05e2a3161e4589a717c6fe5c7306820273a473c5Christian MaedermkRI l x so = mkVDecl l $ mkImpl (mkMember (qualThing x) thing) so
preds = Map.foldWithKey (\ (Entity ty u1) u2 -> let
Class -> Map.insert (i1, conceptPred) i2
ObjectProperty -> Map.insert (i1, objectPropPred) i2
DataProperty -> Map.insert (i1, dataPropPred) i2
_ -> id) Map.empty emap
ops = Map.foldWithKey (\ (Entity ty u1) u2 -> case ty of
Map.insert (uriToId u1, indiConst) (uriToId u2, Total)
_ -> id) Map.empty emap
mapSymbol :: Entity -> Set.Set Symbol
syN = Set.singleton . Symbol (uriToId iri)
AnnotationProperty -> Set.empty
Datatype -> Set.empty
mapSign :: OS.Sign -> Result CASLSign
let conc = OS.concepts sig
cvrt = map uriToId . Set.toList
tMp k = MapSet.fromList . map (\ u -> (u, [k]))
oPreds = cvrt $ OS.objectProperties sig
dPreds = cvrt $ OS.dataProperties sig
, opMap = tMp indiConst . cvrt $ OS.individuals sig
loadDataInformation _ = let dts = Set.fromList $ map stringToId datatypeKeys
in (emptySign ()) { sortRel = Rel.fromKeysSet dts }
mapTheory :: (OS.Sign, [Named Axiom]) -> Result (CASLSign, [Named CASLFORMULA])
{predMap = MapSet.fromList [(cf, [dataPred])]})