CASL2IsabelleHOL.hs revision 7f6b97541fdee30d62a0a3cfa58173212a6cd002
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederModule : $Header$
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederCopyright : (c) Till Mossakowski and Uni Bremen 2003
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederLicence : similar to LGPL, see HetCATS/LICENCE.txt or LIZENZ.txt
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederMaintainer : hets@tzi.de
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederStability : provisional
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederPortability : non-portable (imports Logic.Logic)
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder The embedding comorphism from CASL to Isabelle-HOL.
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder disambiguate names (i.e. those coming from Main)
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maederimport qualified Common.Lib.Map as Map
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maederimport qualified Common.Lib.Set as Set
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederimport Isabelle.IsaSign as IsaSign
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- | The identity of the comorphism
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederdata CASL2IsabelleHOL = CASL2IsabelleHOL deriving (Show)
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- Isabelle theories
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maedertype IsaTheory = (IsaSign.Sign,[Named IsaSign.Sentence])
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- extended signature translation
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maedertype SignTranslator f e = CASL.Sign.Sign f e -> e -> IsaTheory -> IsaTheory
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- extended signature translation for CASL
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedersigTrCASL :: SignTranslator () ()
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedersigTrCASL _ _ = id
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- extended formula translation
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maedertype FormulaTranslator f e = CASL.Sign.Sign f e -> f -> Term
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- extended formula translation for CASL
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederformTrCASL :: FormulaTranslator () ()
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederformTrCASL _ _ = error "CASL2IsabelleHOL: No extended formulas allowed in CASL"
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Language CASL2IsabelleHOL -- default definition is okay
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maederinstance Comorphism CASL2IsabelleHOL
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder CASLBasicSpec CASLFORMULA SYMB_ITEMS SYMB_MAP_ITEMS
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder CASL.Morphism.Symbol CASL.Morphism.RawSymbol ()
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Isabelle () () IsaSign.Sentence () ()
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder IsabelleMorphism () () () where
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder sourceLogic _ = CASL
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder sourceSublogic _ = CASL_SL
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder { has_sub = False, -- no subsorting yet ...
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder has_part = False, -- no partiality yet ...
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder has_cons = True,
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder has_eq = True,
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder has_pred = True,
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder which_logic = FOL
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder targetLogic _ = Isabelle
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder targetSublogic _ = ()
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder map_theory _ = transTheory sigTrCASL formTrCASL
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder map_morphism CASL2IsabelleHOL mor = do
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder (sig1,_) <- map_sign CASL2IsabelleHOL (Logic.dom CASL mor)
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder (sig2,_) <- map_sign CASL2IsabelleHOL (cod CASL mor)
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder inclusion Isabelle sig1 sig2
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder map_sentence _ sign =
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder return . mapSen formTrCASL sign
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder map_symbol _ _ = error "CASL2Isabelle.map_symbol"
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder------------------------------ Ids ---------------------------------
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder---------------------------- Signature -----------------------------
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederbaseSign :: BaseSig
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederbaseSign = Main_thy
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedertransTheory :: SignTranslator f e ->
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder FormulaTranslator f e ->
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder (CASL.Sign.Sign f e, [Named (FORMULA f)])
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder -> Result IsaTheory
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedertransTheory trSig trForm (sign,sens) =
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder fmap (trSig sign (extendedInfo sign)) $
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder baseSig = baseSign,
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder tsig = emptyTypeSig {arities =
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Set.fold (\s -> let s1 = (showIsaT s baseSign) in
else Map.insert s1 [(isaTerm, [])])
Map.empty (sortSet sign)},
constTab = Map.foldWithKey insertPreds
(Map.filterWithKey (isNotIn dtDefs)
(real_sens, sort_gen_axs) = List.partition
if Set.size ts == 1
foldl (\m1 (t,i) -> Map.insert (showIsaIT op i baseSign)
if Set.size ts == 1
then Map.insert (showIsaT pre baseSign)
(transPredType (Set.findMin ts)) m
foldl (\m1 (t,i) -> Map.insert (showIsaIT pre i baseSign)
count as = length (List.filter (> 0) as)
updateIn [] _ _ = error "topoSort.updateIn"
makeDtDefs :: CASL.Sign.Sign f e -> [Named (FORMULA f)]
addSortList x xs = (List.nub (x :xs))
makeDtDef :: CASL.Sign.Sign f e -> Named (FORMULA f) ->
makeDt s = (transSort s, map makeOp (List.filter (hasTheSort s) ops))
hasTheSort _ _ = error "CASL2IsabelleHOL.hasTheSort"
transArgs _ = error "CASL2IsabelleHOL.transArgs"
--(c) var v = IsaSign.Free v noType isaTerm
var v = IsaSign.Free v noType
transOP_SYMB :: CASL.Sign.Sign f e -> OP_SYMB -> String
case (do ots <- Map.lookup op (opMap sign)
if Set.size ots == 1 then return $ showIsaT op baseSign
else do i <- elemIndex (toOpType ot) (Set.toList ots)
transPRED_SYMB :: CASL.Sign.Sign f e -> PRED_SYMB -> String
case (do pts <- Map.lookup p (predMap sign)
if Set.size pts == 1 then return $ showIsaT p baseSign
else do i <- elemIndex (toPredType pt) (Set.toList pts)
mapSen :: FormulaTranslator f e -> CASL.Sign.Sign f e -> FORMULA f -> Sentence
transFORMULA :: CASL.Sign.Sign f e -> FormulaTranslator f e
error "CASL2Isabelle.transFORMULA"
transTERM :: CASL.Sign.Sign f e
-> (CASL.Sign.Sign f e -> f -> Term) -> TERM f -> Term
error "CASL2IsabelleHOL.transTERM"