Logic_CASL.hs revision 68a0dfd3b2ae76877534ec1495aec6128dfbd287
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian Maeder{-# LANGUAGE CPP, MultiParamTypeClasses, TypeSynonymInstances
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian Maeder , FlexibleInstances #-}
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederModule : $Header$
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian MaederDescription : Instance of class Logic for the CASL logic
b4fbc96e05117839ca409f5f20f97b3ac872d1edTill MossakowskiCopyright : (c) Klaus Luettich, Uni Bremen 2002-2005
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederMaintainer : till@informatik.uni-bremen.de
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian MaederStability : provisional
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian MaederPortability : non-portable (imports Logic.Logic)
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian MaederInstance of class Logic for the CASL logic
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian Maeder Also the instances for Syntax and Category.
33a5d53a412ba0a4e5847f7538d6da2e22bd116cChristian Maederimport CASL.ToItem (bsToItem)
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maederimport CASL.CCC.OnePoint () -- currently unused
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maederimport qualified CASL.OMDocImport as OMI
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maederimport CASL.Formula (formula)
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder#ifdef UNI_PACKAGE
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maederimport qualified Data.Set as Set
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maederdata CASL = CASL deriving Show
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maederinstance Language CASL where
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder description _ = unlines
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder [ "CASL - the Common algebraic specification language"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , "This logic is subsorted partial first-order logic"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , " with sort generation constraints"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , "See the CASL User Manual, LNCS 2900, Springer Verlag"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , "and the CASL Reference Manual, LNCS 2960, Springer Verlag"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , "See also http://www.cofi.info/CASL.html"
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder , "Abbreviations of sublogic names indicate the following feature:"
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder , " Sub -> with subsorting"
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder , " Sul -> with a locally filtered subsort relation"
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder , " P -> with partial functions"
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder , " C -> with sort generation constraints"
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder , " eC -> C without renamings"
dfa74d066ea0f00a70276aedecc624c6b3c86deaChristian Maeder , " sC -> C with injective constructors"
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder , " seC -> sC and eC"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " FOL -> first order logic"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " FOAlg -> FOL without predicates"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " Horn -> positive conditional logic"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " GHorn -> generalized Horn"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " GCond -> GHorn without predicates"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " Cond -> Horn without predicates"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " Atom -> atomic logic"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " Eq -> Atom without predicates"
2a598ff0c1b7b51c33aee7029b43bc5cfcbea6b8Christian Maeder , " = -> with equality"
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder , "Examples:"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , " SubPCFOL= -> the CASL logic itself"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder , " FOAlg= -> first order algebra (without predicates)"
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder , " SubPHorn= -> the positive conditional fragement of CASL"
3c62e6ef442caf092adcbecf6fccd957dcd72689Christian Maeder , " SubPAtom -> the atomic subset of CASL"
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder , " SubPCAtom -> SubPAtom with sort generation constraints"
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder , " Eq= -> classical equational logic" ]
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maedertype CASLBasicSpec = BASIC_SPEC () () ()
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian MaedertrueC :: a -> b -> Bool
715ffaf874309df081d1e1cd8e05073fc1227729Christian MaedertrueC _ _ = True
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maederinstance (Ord f, Ord e, Ord m, MorphismExtension e m) =>
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder Category (Sign f e) (Morphism f e m) where
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder ide sig = idMor (ideMorphismExtension $ extendedInfo sig) sig
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder inverse = inverseMorphism inverseMorphismExtension
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder composeMorphisms = composeM composeMorphismExtension
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder dom = msource
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder cod = mtarget
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder isInclusion = isInclusionMorphism isInclusionMorphismExtension
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder legal_mor = legalMor
836e72a3c413366ba9801726f3b249c7791cb9caChristian Maederinstance Monoid (BASIC_SPEC b s f) where
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder mempty = Basic_spec []
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder mappend (Basic_spec l1) (Basic_spec l2) = Basic_spec $ l1 ++ l2
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- abstract syntax, parsing (and printing)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederinstance Syntax CASL CASLBasicSpec
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder Symbol SYMB_ITEMS SYMB_MAP_ITEMS
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder parsersAndPrinters CASL = addSyntax "KIF"
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder (const $ fmap kif2CASL kifBasic, pretty)
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder $ makeDefault (basicSpec [], pretty)
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian Maeder parseSingleSymbItem CASL = Just $ symbItem []
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder parse_symb_items CASL = Just $ symbItems []
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder parse_symb_map_items CASL = Just $ symbMapItems []
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder toItem CASL = bsToItem
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder-- lattices (for sublogics)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederinstance Lattice a => SemiLatticeWithTop (CASL_SL a) where
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder join = sublogics_max
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maederclass Lattice a => MinSL a f where
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder minSL :: f -> CASL_SL a
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maederinstance MinSL () () where
bbae6e6ca0de7f2ffbb44d2c8da179f2b717237fChristian Maeder minSL () = bottom
3c62e6ef442caf092adcbecf6fccd957dcd72689Christian Maederclass NameSL a where
149e43c4a2705a86a0e5fa301ba849fdf19db32eChristian Maeder nameSL :: a -> String
1738d16957389457347bee85075d3d33d002158fChristian Maederinstance NameSL () where
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder nameSL _ = ""
33a5d53a412ba0a4e5847f7538d6da2e22bd116cChristian Maederclass Lattice a => ProjForm a f where
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder projForm :: CASL_SL a -> f -> Maybe (FORMULA f)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederinstance Lattice a => ProjForm a () where
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder projForm _ = Just . ExtFORMULA
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maederclass (Lattice a, ProjForm a f) => ProjSigItem a s f where
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder projSigItems :: CASL_SL a -> s -> (Maybe (SIG_ITEMS s f), [SORT])
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederinstance (Lattice a, ProjForm a f) => ProjSigItem a () f where
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder projSigItems _ s = (Just $ Ext_SIG_ITEMS s, [])
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederclass (Lattice a, ProjForm a f) => ProjBasic a b s f where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder projBasicItems :: CASL_SL a -> b -> (Maybe (BASIC_ITEMS b s f), [SORT])
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederinstance (Lattice a, ProjForm a f, ProjSigItem a s f)
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder => ProjBasic a () s f where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder projBasicItems _ b = (Just $ Ext_BASIC_ITEMS b, [])
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederinstance (NameSL a) => SublogicName (CASL_SL a) where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder sublogicName = sublogics_name nameSL
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederinstance (MinSL a f, MinSL a s, MinSL a b) =>
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder MinSublogic (CASL_SL a) (BASIC_SPEC b s f) where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder minSublogic = sl_basic_spec minSL minSL minSL
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maederinstance MinSL a f => MinSublogic (CASL_SL a) (FORMULA f) where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder minSublogic = sl_sentence minSL
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederinstance Lattice a => MinSublogic (CASL_SL a) SYMB_ITEMS where
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder minSublogic = sl_symb_items
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maederinstance Lattice a => MinSublogic (CASL_SL a) SYMB_MAP_ITEMS where
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder minSublogic = sl_symb_map_items
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maederinstance MinSL a e => MinSublogic (CASL_SL a) (Sign f e) where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder minSublogic = sl_sign minSL
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederinstance MinSL a e => MinSublogic (CASL_SL a) (Morphism f e m) where
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder minSublogic = sl_morphism minSL
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maederinstance Lattice a => MinSublogic (CASL_SL a) Symbol where
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder minSublogic = sl_symbol
symsOfSen CASL = Set.toList
. foldFormula (symbolsRecord $ const Set.empty)
matches CASL = CASL.Morphism.matches
omdocToSen CASL = OMI.omdocToSen
omdocToSym CASL = OMI.omdocToSym
addOMadtToTheory CASL = OMI.addOMadtToTheory
addOmdocToTheory CASL = OMI.addOmdocToTheory