CASL2TopSort.inline.hs revision bba825b39570777866d560bfde3807731131097e
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederModule : $Header$
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian MaederCopyright : (c) Klaus L�ttich, Uni Bremen 2002-2004
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
b4fbc96e05117839ca409f5f20f97b3ac872d1edTill MossakowskiMaintainer : luettich@tzi.de
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederStability : provisional
2ac1742771a267119f1d839054b5e45d0a468085Christian MaederPortability : portable
35597678f1c9da703de8d0b6b66ea63247ebe884Christian MaederCoding out subsorting into unary predicates.
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder New concept for proving Ontologies.
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maedermodule Comorphisms.CASL2TopSort (CASL2TopSort(..)) where
d42a01c4eb6892fe23ca9eff107bb29f4a229480Christian Maederimport qualified Data.Map as Map
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maederimport qualified Data.Set as Set
c18e9c3c6d5039618f1f2c05526ece84c7794ea3Christian Maederimport qualified Common.Lib.Rel as Rel
2ac1742771a267119f1d839054b5e45d0a468085Christian Maederimport CASL.Inject (injName)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder-- | The identity of the comorphism
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maederdata CASL2TopSort = CASL2TopSort deriving (Show)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederinstance Language CASL2TopSort -- default definition is okay
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maederinstance Comorphism CASL2TopSort
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder CASL CASL_Sublogics
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder CASLBasicSpec CASLFORMULA SYMB_ITEMS SYMB_MAP_ITEMS
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder Symbol RawSymbol ()
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder CASL CASL_Sublogics
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder CASLBasicSpec CASLFORMULA SYMB_ITEMS SYMB_MAP_ITEMS
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder Symbol RawSymbol () where
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder sourceLogic CASL2TopSort = CASL
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder sourceSublogic CASL2TopSort = SL.top
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder { sub_features = LocFilSub,
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder cons_features = SortGen { emptyMapping = True,
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder onlyInjConstrs = True}
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder targetLogic CASL2TopSort = CASL
d48085f765fca838c1d972d2123601997174583dChristian Maeder mapSublogic CASL2TopSort sub =
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder if sub `isSubElem` sourceSublogic CASL2TopSort
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder sub { sub_features = NoSub -- subsorting is coded out
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder , cons_features = NoSortGen -- special Sort_gen_ax is coded out
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder , which_logic = max Horn (which_logic sub)
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder , has_eq = True -- was in the original targetLogic
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder -- may be avoided through predications of sort-preds
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder -- with the result terms of functions instead of formulas like:
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder -- forall x : T . bot = x => a(x)
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder -- better: . a(bot)
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder , has_pred = True}
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder -- subsorting is coded out and
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder -- special Sort_gen_ax are coded out
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder map_theory CASL2TopSort = mkTheoryMapping transSig transSen
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder map_morphism CASL2TopSort mor =
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder let rsigSour = trSig $ msource mor
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder rsigTarg = trSig $ mtarget mor
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder in case rsigSour of
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder Result diags1 mrs ->
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder case rsigTarg of
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maeder Result diags2 mrt
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder | isJust mrs && isJust mrt ->
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Result (diags1++diags2) (Just
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder (mor { msource = fromJust mrs
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder , mtarget = fromJust mrt }))
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder | otherwise ->
7c35990c03276d1e675ea6f4ba38f47081620d77Christian Maeder (Result (diags1++diags2) Nothing)
7c35990c03276d1e675ea6f4ba38f47081620d77Christian Maeder where trSig sig = case transSig sig of
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder Result dias mr ->
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder Result dias (maybe Nothing
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder map_sentence CASL2TopSort = transSen
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder map_symbol CASL2TopSort = Set.singleton . id
840b2a6f37ec58f3281da16fafbc4121462c856aChristian Maederdata PredInfo = PredInfo { topSort_PI :: SORT
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maeder , directSuperSorts_PI :: Set.Set SORT
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maeder , predicate_PI :: PRED_NAME
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder } deriving (Show, Ord, Eq)
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maedertype SubSortMap = Map.Map SORT PredInfo
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedergenerateSubSortMap :: Rel.Rel SORT
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder -> Result SubSortMap
2ac1742771a267119f1d839054b5e45d0a468085Christian MaedergenerateSubSortMap sortRels pMap =
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder let disAmbMap m = Map.map disAmbPred m
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder disAmbPred v = if (predicate_PI v) `Map.member` pMap
55ea7f4cb33abac6a8d539741e457cf686d1f26cChristian Maeder then disAmbPred' (1::Int) v'
2118d66b6aa3c90458925019c9b2fb986e2b2aabChristian Maeder where v' = add "_s" v
2118d66b6aa3c90458925019c9b2fb986e2b2aabChristian Maeder disAmbPred' x v1 =
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder if (predicate_PI v1) `Map.member` pMap
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder then disAmbPred' (x+1) (add (show x) v')
d48085f765fca838c1d972d2123601997174583dChristian Maeder add s v1 = v1 {predicate_PI =
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder case predicate_PI v1 of
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder Id ts is ps ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder assert (not (null ts))
d48085f765fca838c1d972d2123601997174583dChristian Maeder (Id (init ts ++
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder [(last ts) {tokStr =
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder tokStr (last ts)++s}
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Rel.partSet (\ x y -> Rel.member x y sortRels &&
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder toPredInfo k e =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder let ts = case filter (\pts -> Rel.member k pts sortRels)
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maeder _ -> error "CASL2TopSort.generateSubSortMap.toPredInfo"
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder in PredInfo { topSort_PI = ts
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder , directSuperSorts_PI = Set.difference e mR
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder , predicate_PI = k }
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder initMap = Map.filterWithKey (\k _ -> not (Set.member k mR))
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder in return (disAmbMap initMap)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-- | Finds Top-sort(s) and transforms for each top-sort all subsorts
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-- into unary predicates. All predicates typed with subsorts are now
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder-- typed with the top-sort and axioms reflecting the typing are
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder-- generated. The operations are treated analogous. Axioms are
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-- generated that each generated unary predicate must hold on at least
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder-- one element of the top-sort.
35597678f1c9da703de8d0b6b66ea63247ebe884Christian MaedertransSig :: Sign () e -> Result (Sign () e, [Named (FORMULA ())])
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder | Rel.null (sortRel sig) =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Result [Diag Hint (
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder "CASL2TopSort.transSig: Signature is unchanged (no subsorting present)"
8dcc70ff9afdfe4aff258676718677a4d7076fd0Christian Maeder ) nullRange] (Just (sig,[]))
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder | otherwise =
975642b989852fc24119c59cf40bc1af653608ffChristian Maeder case generateSubSortMap (sortRel sig) (predMap sig) of
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Result dias m_subSortMap ->
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder maybe (Result dias Nothing)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder (\ subSortMap -> -- trace (show subSortMap) $
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder let (dias2,newPredMap) =
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder Map.mapAccum (\ds (un,ds1) -> (ds++ds1,un)) [] $
d48085f765fca838c1d972d2123601997174583dChristian Maeder (transPredMap subSortMap (predMap sig))
d48085f765fca838c1d972d2123601997174583dChristian Maeder (newPreds subSortMap)
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder (Result dias3 maxioms) =
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder generateAxioms subSortMap (predMap sig) (opMap sig)
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder dias' = dias ++ dias2 ++ dias3
d93bbbec133697cc79d59f9d7cc8e97458976c15Christian Maeder in maybe (Result dias' Nothing)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder (\axs -> Result dias' $ Just $
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder (sig { sortSet =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Set.fromList (map topSort_PI
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder , opMap = transOpMap subSortMap (opMap sig)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder , assocOps= transOpMap subSortMap (assocOps sig)
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder , predMap = newPredMap
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder },axs ++ symmetryAxioms subSortMap (sortRel sig)))
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder repError k (v1,d1) (v2,d2) =
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder (Diag Warning
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder "overloading: Predicate "++show k++
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder " gets additional type(s): "++show v2) nullRange)
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder newPreds mp =
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder foldr (\ pI nm -> Map.insert (predicate_PI pI)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder (PredType [topSort_PI pI]),[]) nm)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedertransPredMap :: SubSortMap -> Map.Map PRED_NAME (Set.Set PredType)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder -> Map.Map PRED_NAME (Set.Set PredType, [Diagnosis])
2ac1742771a267119f1d839054b5e45d0a468085Christian MaedertransPredMap subSortMap = Map.map (\s -> (Set.map transType s,[]))
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder where transType t = t { predArgs = map (\s -> maybe s topSort_PI
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder (Map.lookup s subSortMap))
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder (predArgs t)}
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedertransOpMap :: SubSortMap -> Map.Map OP_NAME (Set.Set OpType)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedertransOpMap subSortMap = Map.map (tidySet . Set.map transType)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder where tidySet s = Set.fold joinPartial s s
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder where joinPartial t@(OpType {opKind = Partial})
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder | t {opKind = Total} `Set.member` s = Set.delete t
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder | otherwise = id
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian Maeder joinPartial _ = id
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder transType t =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder t { opArgs = map lkp (opArgs t)
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder , opRes = lkp (opRes t)}
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder lkp = (\s -> maybe s topSort_PI (Map.lookup s subSortMap))
5ba383b1607c20c57e14324e72cee2c789436d5fChristian MaederprocOpMapping :: SubSortMap
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder -> OP_NAME -> Set.Set OpType
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder -> Result [Named (FORMULA ())] -> Result [Named (FORMULA ())]
2ac1742771a267119f1d839054b5e45d0a468085Christian MaederprocOpMapping subSortMap opName set r@(Result ds1 mal) =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder case mkProfMapOp opName subSortMap set of
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Result ds2 (Just profMap) ->
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder -- trace (show profMap)
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Result (ds1++ds2)
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder procProfMapOpMapping
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder [] profMap))) mal)
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder Result ds2 Nothing -> Result (ds1++ds2) Nothing
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder procProfMapOpMapping :: [SORT] -> (FunKind,Set.Set [Maybe PRED_NAME])
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder -> [Named (FORMULA ())] -> [Named (FORMULA ())]
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder procProfMapOpMapping sl (kind,spl) =
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian Maeder (genSenName "o" opName (length sl))
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian Maeder (genOpEquation kind opName)
5ba383b1607c20c57e14324e72cee2c789436d5fChristian MaedersymmetryAxioms :: SubSortMap -> Rel.Rel SORT -> [Named (FORMULA ())]
5ba383b1607c20c57e14324e72cee2c789436d5fChristian MaedersymmetryAxioms ssMap sortRels =
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian Maeder let symSets = Rel.sccOfClosure sortRels
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder symTopSorts symSet = not (Set.null (Set.intersection mR symSet))
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder xVar = mkSimpleId "x"
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder updateLabel ts symS [sen] =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder reName ( \ s -> show ts ++ s ++ show symS) sen
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder updateLabel _ _ _ = error "CASL2TopSort.symmetryAxioms"
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian Maeder toAxioms symSet =
d48085f765fca838c1d972d2123601997174583dChristian Maeder [updateLabel ts symS (inlineAxioms CASL
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian Maeder "sort ts pred symS:ts\n\
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder \forall xVar : ts\n\
7c35990c03276d1e675ea6f4ba38f47081620d77Christian Maeder \. symS(xVar) %(_symmetric_with_)%")
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder | s<-(Set.toList(Set.difference symSet mR)),
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder let ts = lkupTop ssMap s,
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder let symS = fromJust (lkupPRED_NAME ssMap s)]
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder in concatMap toAxioms (filter symTopSorts symSets)
d9953bc9d3d8aa7290bf6d3c2c86b84c984a0f09Christian MaedergenerateAxioms :: SubSortMap -> Map.Map PRED_NAME (Set.Set PredType)
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder -> Result [Named (FORMULA ())]
35597678f1c9da703de8d0b6b66ea63247ebe884Christian MaedergenerateAxioms subSortMap pMap oMap =
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder -- generate argument restrictions for operations
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder case Map.foldWithKey (procOpMapping subSortMap) (return []) oMap of
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder Result dias m_opAxs -> maybe (Result dias Nothing)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder (\axs -> -- trace (show dias) $
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder (Just (reverse hi_axs ++
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder reverse p_axs ++
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder reverse axs)))
9fb0db7f56cbb44c3df49552c04afc881267b84eChristian Maeder where p_axs =
840b2a6f37ec58f3281da16fafbc4121462c856aChristian Maeder -- generate argument restrictions for predicates
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Map.foldWithKey (\ pName set al ->
bb13d067514a3f474166f345e098b81f3de11dbeChristian Maeder case mkProfMapPred subSortMap set of
bb13d067514a3f474166f345e098b81f3de11dbeChristian Maeder -- trace (show profMap)
bb13d067514a3f474166f345e098b81f3de11dbeChristian Maeder (\sl -> genArgRest
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder (genSenName "p" pName (length sl))
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder (genPredication pName)
bb13d067514a3f474166f345e098b81f3de11dbeChristian Maeder -- generate subclass_of axioms derived from subsorts
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder -- and non-emptyness axioms
9fb0db7f56cbb44c3df49552c04afc881267b84eChristian Maeder Map.fold (\ (PredInfo { topSort_PI = ts
9fb0db7f56cbb44c3df49552c04afc881267b84eChristian Maeder , predicate_PI = subS
9fb0db7f56cbb44c3df49552c04afc881267b84eChristian Maeder , directSuperSorts_PI = set
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder let supPreds =
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder maybe (error ("CASL2TopSort: genAxioms:"++
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder " impossible happend: "++show s))
predicate_PI (Map.lookup s subSortMap))
(Set.toList set)
mkProfMapPred :: SubSortMap -> Set.Set PredType
where seperate pt = Rel.setInsert (pt2topSorts pt) (pt2preds pt)
mkProfMapOp :: OP_NAME -> SubSortMap -> Set.Set OpType
(Map.insertWith (\ (k1,s1) (k2,s2) ->
(min k1 k2,Set.union s1 s2))
Set.singleton (pt2preds joinedList))
lkupTop ssm s = maybe s topSort_PI (Map.lookup s ssm)
maybe Nothing (Just . predicate_PI) (Map.lookup s ssm)
-> [SORT] -> (Set.Set [Maybe PRED_NAME])
-> (Set.Set [Maybe PRED_NAME])
error "CASL2TopSort.toVarDecl: can only handle Qual_var"
-> (Set.Set [Maybe PRED_NAME])
| Set.size spn == 1 =
_ -> error "CASL2TopSort.genDisjunction: this cannot happen"
where disjs = foldl genConjunction [] (Set.toList spn)
error "CASL2TopSort.genPred: can only handle Qual_var"
| otherwise = case Set.partition
combineTypes :: SubSortMap -> Map.Map Int [PredType]
Map.mapWithKey (\ arity types ->
(replicate arity Map.empty) types)
(\v -> Rel.setInsert (topSort_PI v) so mp)
(Map.lookup so subSortMap)
| Rel.null (sortRel sig) =
"CASL2TopSort.transSen: Sentence is unchanged (no subsorting present)"
error "CASL2TopSort.mapSen1"
error "CASL2TopSort.mapSen: got untyped predication"
error "CASL2TopSort.mapTerm"
error "CASL2TopSort.mapTerm: got untyped application"
_ -> error "CASL2TopSort.genEitherAxiom.groupedInjOps"
Op_name _ -> error "CASL2TopSort.genEitherAxiom.isInjObj"
resultSort _ = error "CASL2TopSort.genEitherAxiom.resultSort"
argSort _ = error "CASL2TopSort.genEitherAxiom.argSort"
lPredName s = maybe (error ("CASL2TopSort.genEitherAxiom: \