HasCASL2IsabelleHOL.hs revision 3d86f079b07a6a058cdd6c112d287e01a69d9c0c
020cdb5dad6b871aba61136a0e1567c00426de87Andy Gimblett{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}
e071fb22ea9923a2a4ff41184d80ca46b55ee932Till MossakowskiModule : $Header$
020cdb5dad6b871aba61136a0e1567c00426de87Andy GimblettDescription : old translation that is only better for case terms
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuCopyright : (c) Sonja Groening, C. Maeder, Uni Bremen 2003-2006
020cdb5dad6b871aba61136a0e1567c00426de87Andy GimblettLicense : GPLv2 or higher, see LICENSE.txt
020cdb5dad6b871aba61136a0e1567c00426de87Andy GimblettMaintainer : Christian.Maeder@dfki.de
020cdb5dad6b871aba61136a0e1567c00426de87Andy GimblettStability : provisional
020cdb5dad6b871aba61136a0e1567c00426de87Andy GimblettPortability : non-portable (imports Logic.Logic)
020cdb5dad6b871aba61136a0e1567c00426de87Andy GimblettThis embedding comorphism from HasCASL to Isabelle-HOL is an old
020cdb5dad6b871aba61136a0e1567c00426de87Andy Gimblettversion that can be deleted as soon as case terms are implemented elsewhere
020cdb5dad6b871aba61136a0e1567c00426de87Andy Gimblettimport Logic.Logic as Logic
567db7182e691cce5816365d8c912d09ffe92f86Andy Gimblettimport Isabelle.IsaSign as IsaSign
12b2ae689353ecbaad720a9af9f9be01c1a3fe2dChristian Maederimport qualified Data.Map as Map
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblettimport qualified Data.Set as Set
9aeda2b3ae8ce0b018955521e4ca835a8ba8a27bLiam O'Reillyimport Data.List (elemIndex)
9f93b2a8b552789cd939d599504d39732672dc84Christian Maederimport Data.Maybe (catMaybes)
9f93b2a8b552789cd939d599504d39732672dc84Christian Maeder-- | The identity of the comorphism
9f93b2a8b552789cd939d599504d39732672dc84Christian Maederdata HasCASL2IsabelleHOL = HasCASL2IsabelleHOL deriving Show
dd7da1b5fedc05b92ba023ebd803e6f4a662503bChristian Maederinstance Language HasCASL2IsabelleHOL where
dd7da1b5fedc05b92ba023ebd803e6f4a662503bChristian Maeder language_name HasCASL2IsabelleHOL = "HasCASL2IsabelleDeprecated"
9f93b2a8b552789cd939d599504d39732672dc84Christian Maederinstance Comorphism HasCASL2IsabelleHOL
dd7da1b5fedc05b92ba023ebd803e6f4a662503bChristian Maeder HasCASL Sublogic
9f93b2a8b552789cd939d599504d39732672dc84Christian Maeder BasicSpec Le.Sentence SymbItems SymbMapItems
0b8146e4f675518993a34eb2255ad7ddd7bf82a4Christian Maeder Symbol RawSymbol ()
23a073e0a3433ca80a286d46202841b569ec36fdChristian Maeder Isabelle () () IsaSign.Sentence () ()
05cc55892e6c93bdd7b9c3f100ab1bb65fe6a21eLiam O'Reilly IsabelleMorphism () () () where
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblett sourceLogic HasCASL2IsabelleHOL = HasCASL
53f89daf88665d3ea96d871110a5c0d9d8326bd2Andy Gimblett sourceSublogic HasCASL2IsabelleHOL = sublogic_min noSubtypes noClasses
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblett targetLogic HasCASL2IsabelleHOL = Isabelle
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblett mapSublogic cid sl = if sl `isSubElem` sourceSublogic cid
53f89daf88665d3ea96d871110a5c0d9d8326bd2Andy Gimblett then Just () else Nothing
53f89daf88665d3ea96d871110a5c0d9d8326bd2Andy Gimblett map_theory HasCASL2IsabelleHOL = mkTheoryMapping transSignature
12b2ae689353ecbaad720a9af9f9be01c1a3fe2dChristian Maeder (map_sentence HasCASL2IsabelleHOL)
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblett map_sentence HasCASL2IsabelleHOL sign phi =
c052e3ee4a53ee3a2da829aa142fd596ef6c9e3dAndy Gimblett case transSentence sign phi of
c052e3ee4a53ee3a2da829aa142fd596ef6c9e3dAndy Gimblett Nothing -> warning (mkSen true)
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblett "translation of sentence not implemented" nullRange
b25c72845890740c2f8a21214752574990b943cfChristian Maeder Just (ts) -> return $ mkSen ts
b25c72845890740c2f8a21214752574990b943cfChristian Maeder isInclusionComorphism HasCASL2IsabelleHOL = True
c052e3ee4a53ee3a2da829aa142fd596ef6c9e3dAndy Gimblett-- * Signature
a09bfcbcb0fba5663fca1968aa82daebf2e092c4Andy GimblettbaseSign :: BaseSig
a5f3a8cdc3ceb045c3c166ee840d3e59ec7efac6Christian MaederbaseSign = MainHC_thy
a5f3a8cdc3ceb045c3c166ee840d3e59ec7efac6Christian MaedertransSignature :: Env -> Result (IsaSign.Sign,[Named IsaSign.Sentence])
a5f3a8cdc3ceb045c3c166ee840d3e59ec7efac6Christian MaedertransSignature sign =
b25c72845890740c2f8a21214752574990b943cfChristian Maeder baseSig = baseSign,
1c7c4d95775a8ad5f7373e5cf0bad86f8301c56cAndy Gimblett -- translation of typeconstructors
61051521e4d82769a47f23aecb5fb477de47d534Andy Gimblett tsig = emptyTypeSig
61051521e4d82769a47f23aecb5fb477de47d534Andy Gimblett { arities = Map.foldWithKey extractTypeName
61051521e4d82769a47f23aecb5fb477de47d534Andy Gimblett (typeMap sign) },
61051521e4d82769a47f23aecb5fb477de47d534Andy Gimblett -- translation of operation declarations
b25c72845890740c2f8a21214752574990b943cfChristian Maeder constTab = Map.foldWithKey insertOps
b22c258cca179a5ffe777b64b32e10687c5f6b2cAndy Gimblett (assumps sign),
a5f3a8cdc3ceb045c3c166ee840d3e59ec7efac6Christian Maeder -- translation of datatype declarations
23a073e0a3433ca80a286d46202841b569ec36fdChristian Maeder domainTab = transDatatype (typeMap sign),
23a073e0a3433ca80a286d46202841b569ec36fdChristian Maeder showLemmas = True },
aa0d5f8be9950e788884f7431cf4cb7bee74788cAndy Gimblett extractTypeName tyId typeInfo m =
aa0d5f8be9950e788884f7431cf4cb7bee74788cAndy Gimblett if isDatatypeDefn typeInfo then m
aa0d5f8be9950e788884f7431cf4cb7bee74788cAndy Gimblett else Map.insert (showIsaTypeT tyId baseSign) [(isaTerm, [])] m
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett -- translate the kind here!
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett isDatatypeDefn t = case typeDefn t of
197888c54795ec1e79e77289b7e20436a6db74c0Andy Gimblett DatatypeDefn _ -> True
197888c54795ec1e79e77289b7e20436a6db74c0Andy Gimblett insertOps name ops m =
b25c72845890740c2f8a21214752574990b943cfChristian Maeder if isSingleton ops then
b25c72845890740c2f8a21214752574990b943cfChristian Maeder let transOp = transOpInfo (Set.findMin ops)
a1f6118e7ce7f8892fc4299e316630ec74083f0aAndy Gimblett in case transOp of
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett Map.insert (mkVName $ showIsaConstT name baseSign) op m
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder let transOps = map transOpInfo $ Set.toList ops
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder in foldl (\ m' (transOp,i) ->
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett case transOp of
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder (mkVName $ showIsaConstIT name i baseSign)
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder Nothing -> m')
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett m $ number transOps
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- * translation of a type in an operation declaration
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- extract type from OpInfo
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett-- omit datatype constructors
b25c72845890740c2f8a21214752574990b943cfChristian MaedertransOpInfo :: OpInfo -> Maybe Typ
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransOpInfo (OpInfo t _ opDef) =
b25c72845890740c2f8a21214752574990b943cfChristian Maeder case opDef of
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder ConstructData _ -> Nothing
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett _ -> Just (transOpType t)
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- operation type
b25c72845890740c2f8a21214752574990b943cfChristian MaedertransOpType :: TypeScheme -> Typ
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransOpType (TypeScheme _ op _) = transType op
b25c72845890740c2f8a21214752574990b943cfChristian MaedertransType :: Type -> Typ
b25c72845890740c2f8a21214752574990b943cfChristian MaedertransType t = case getTypeAppl t of
b25c72845890740c2f8a21214752574990b943cfChristian Maeder (TypeName tid _ n, tyArgs) -> let num = length tyArgs in
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder if n == 0 then
b25c72845890740c2f8a21214752574990b943cfChristian Maeder if tid == unitTypeId && null tyArgs then boolType
b25c72845890740c2f8a21214752574990b943cfChristian Maeder else if tid == lazyTypeId && num == 1 then
b25c72845890740c2f8a21214752574990b943cfChristian Maeder transType $ head tyArgs
0a83f8dcd5598436966584b858313eb5efd95d5bLiam O'Reilly else if isArrow tid && num == 2 then
9aeda2b3ae8ce0b018955521e4ca835a8ba8a27bLiam O'Reilly let [t1, t2] = tyArgs
2f35e5f6757968746dbab385be21fcae52378a3fLiam O'Reilly tr = transType t2
2f35e5f6757968746dbab385be21fcae52378a3fLiam O'Reilly in mkFunType (transType t1) $
23a073e0a3433ca80a286d46202841b569ec36fdChristian Maeder if isPartialArrow tid && not (isPredType t)
23a073e0a3433ca80a286d46202841b569ec36fdChristian Maeder then mkOptionType tr else tr
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett else if isProductId tid && num > 1 then
fd4ad12563262ebe380d810df8f7755cfab5fb42Liam O'Reilly foldl1 prodType $ map transType tyArgs
fd4ad12563262ebe380d810df8f7755cfab5fb42Liam O'Reilly else Type (showIsaTypeT tid baseSign) [] $ map transType tyArgs
fd4ad12563262ebe380d810df8f7755cfab5fb42Liam O'Reilly else TFree (showIsaTypeT tid baseSign) []
fd4ad12563262ebe380d810df8f7755cfab5fb42Liam O'Reilly -- type arguments are not allowed here!
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett _ -> error $ "transType " ++ showDoc t "\n" ++ show t
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- * translation of a datatype declaration
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransDatatype :: TypeMap -> DomainTab
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransDatatype tm = map transDataEntry (Map.fold extractDataypes [] tm)
310d12b88f902a597cdb08a1c7d11ae7130855eeChristian Maeder where extractDataypes ti des = case typeDefn ti of
310d12b88f902a597cdb08a1c7d11ae7130855eeChristian Maeder DatatypeDefn de -> des++[de]
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- datatype with name (tyId) + args (tyArgs) and alternatives
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransDataEntry :: DataEntry -> [DomainEntry]
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransDataEntry (DataEntry _ tyId Le.Free tyArgs _ alts) =
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder [(transDName tyId tyArgs, map transAltDefn $ Set.toList alts)]
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder where transDName ti ta = Type (showIsaTypeT ti baseSign) []
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder $ map transTypeArg ta
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian MaedertransDataEntry _ = error "HasCASL2IsabelleHOL.transDataEntry"
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder-- arguments of datatype's typeconstructor
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian MaedertransTypeArg :: TypeArg -> Typ
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian MaedertransTypeArg ta = TFree (showIsaTypeT (getTypeVar ta) baseSign) []
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian MaedertransAltDefn :: AltDefn -> (VName, [Typ])
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian MaedertransAltDefn (Construct opId ts Total _) =
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder let ts' = map transType ts
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder in case opId of
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder Just opId' -> (mkVName $ showIsaConstT opId' baseSign, ts')
9efe365d7ce90313e53ea5cfeca391d118fd8629Christian Maeder Nothing -> (mkVName "", ts')
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransAltDefn _ = error "HasCASL2IsabelleHOL.transAltDefn"
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- simple variables
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransVar :: Id -> VName
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransVar v = mkVName $ showIsaConstT v baseSign
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransSentence :: Env -> Le.Sentence -> Maybe IsaSign.Term
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransSentence sign s = case s of
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder Le.Formula t -> Just (transTerm sign t)
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder DatatypeSen _ -> Nothing
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder ProgEqSen _ _ _pe -> Nothing
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder-- disambiguate operation names
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransOpId :: Env -> Id -> TypeScheme -> String
4f4e94264f48e255d4125f47649f585d9d062fabChristian MaedertransOpId sign op ts =
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder case (do ops <- Map.lookup op (assumps sign)
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder if isSingleton ops then return $ showIsaConstT op baseSign
4f4e94264f48e255d4125f47649f585d9d062fabChristian Maeder else do i <- elemIndex ts $ map opType $ Set.toList ops
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblett return $ showIsaConstIT op (i+1) baseSign) of
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett Just str -> str
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett Nothing -> showIsaConstT op baseSign
576a4ca6de740c90afd448607c2323477139de24Liam O'ReillytransProgEq :: Env -> ProgEq -> (IsaSign.Term, IsaSign.Term)
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy GimbletttransProgEq sign (ProgEq pat t _) =
fd4ad12563262ebe380d810df8f7755cfab5fb42Liam O'Reilly (transPattern sign pat, transPattern sign t)
b25c72845890740c2f8a21214752574990b943cfChristian MaedertransTerm sign trm = case trm of
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly QualVar (VarDecl var _ _ _) ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder termAppl conSome $ IsaSign.Free (transVar var)
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly QualOp _ (PolyId opId _ _) ts _ _ _ ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder if opId == trueId then true
b25c72845890740c2f8a21214752574990b943cfChristian Maeder else if opId == falseId then false
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly else termAppl conSome (conDouble (transOpId sign opId ts))
b25c72845890740c2f8a21214752574990b943cfChristian Maeder QuantifiedTerm quan varDecls phi _ ->
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly let quantify q gvd phi' = case gvd of
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly GenVarDecl (VarDecl var _ _ _) ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder termAppl (conDouble $ qname q)
b25c72845890740c2f8a21214752574990b943cfChristian Maeder $ Abs (IsaSign.Free $ transVar var) phi' NotCont
434c11a96bc623ebd5b60781efabef319bb15b0eChristian Maeder GenTypeVarDecl _ -> phi'
434c11a96bc623ebd5b60781efabef319bb15b0eChristian Maeder qname Universal = allS
b25c72845890740c2f8a21214752574990b943cfChristian Maeder qname Existential = exS
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly qname Unique = ex1S
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly in foldr (quantify quan) (transTerm sign phi) varDecls
b25c72845890740c2f8a21214752574990b943cfChristian Maeder TypedTerm t _ _ _ -> transTerm sign t
b25c72845890740c2f8a21214752574990b943cfChristian Maeder LambdaTerm pats p body _ ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder let lambdaAbs f = if null pats then termAppl conSome
b25c72845890740c2f8a21214752574990b943cfChristian Maeder (Abs (IsaSign.Free $ mkVName "dummyVar")
b25c72845890740c2f8a21214752574990b943cfChristian Maeder (f sign body) NotCont)
b25c72845890740c2f8a21214752574990b943cfChristian Maeder else termAppl conSome (foldr (abstraction sign)
b25c72845890740c2f8a21214752574990b943cfChristian Maeder (f sign body)
b25c72845890740c2f8a21214752574990b943cfChristian Maeder -- distinguishes between partial and total lambda abstraction
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly -- total lambda bodies are of type 'a' instead of type 'a option'
b25c72845890740c2f8a21214752574990b943cfChristian Maeder Partial -> lambdaAbs transTerm
b25c72845890740c2f8a21214752574990b943cfChristian Maeder Total -> lambdaAbs transTotalLambda
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly LetTerm As.Let peqs body _ ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder IsaSign.Let (map (transProgEq sign) peqs) $ transTerm sign body
b25c72845890740c2f8a21214752574990b943cfChristian Maeder TupleTerm ts@(_ : _) _ ->
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly foldl1 (binConst pairC) (map (transTerm sign) ts)
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly ApplTerm t1 t2 _ -> transAppl sign Nothing t1 t2
b25c72845890740c2f8a21214752574990b943cfChristian Maeder CaseTerm t peqs _ ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder -- flatten case alternatives
b25c72845890740c2f8a21214752574990b943cfChristian Maeder let alts = arangeCaseAlts sign peqs
b25c72845890740c2f8a21214752574990b943cfChristian Maeder -- introduces new case statement if case variable is
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly -- a term application that may evaluate to 'Some x' or 'None'
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly QualVar (VarDecl decl _ _ _) ->
b25c72845890740c2f8a21214752574990b943cfChristian Maeder Case (IsaSign.Free (transVar decl)) alts
b25c72845890740c2f8a21214752574990b943cfChristian Maeder _ -> Case (transTerm sign t)
b25c72845890740c2f8a21214752574990b943cfChristian Maeder [(conDouble "None", conDouble "None"),
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly (App conSome (IsaSign.Free (mkVName "caseVar")) NotCont,
576a4ca6de740c90afd448607c2323477139de24Liam O'Reilly Case (IsaSign.Free (mkVName "caseVar")) alts)]
b25c72845890740c2f8a21214752574990b943cfChristian Maeder _ -> error $ "HasCASL2IsabelleHOL.transTerm " ++ showDoc trm "\n"
576a4ca6de740c90afd448607c2323477139de24Liam O'ReillytransAppl :: Env -> Maybe As.Type -> As.Term -> As.Term -> IsaSign.Term
b25c72845890740c2f8a21214752574990b943cfChristian MaedertransAppl s ty' t' t'' = case t'' of
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett TupleTerm [] _ -> transTerm s t'
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett _ -> case t' of
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett QualVar (VarDecl _ ty _ _) -> transApplOp s ty t' t''
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett QualOp _ (PolyId opId _ _) (TypeScheme _ ty _) _ _ _ ->
7371f8fe3a9a286a74ea30a3cd18e7740f67d537Andy Gimblett if elem opId $ map fst bList then
dd7da1b5fedc05b92ba023ebd803e6f4a662503bChristian Maeder -- logical formulas are translated seperatly (transLog)
_ -> error "HasCASL2IsabelleHOL.transWhenElse.tuple"
_ -> error "HasCASL2IsabelleHOL.transWhenElse"
IsaSign.Free (transVar var)
IsaSign.Free (transVar var)
if (null pats) then Abs (IsaSign.Free (mkVName "dummyVar"))
from HasCASL to Isabelle/HOL patterns may take the form:
catMaybes $ map stripConstruct $ Set.toList altDefns
extractIds _ = error "HasCASL2Isabelle.extractIds"
findInMap :: Ord k => k -> Map.Map k a -> a
findInMap k m = maybe (error "HasCASL2isabelleHOL.findInMap") id $
Map.lookup k m
getTypeName :: As.Term -> Id
_ -> error "HasCASL2IsabelleHOL.getTypeName"
_ -> error "HasCASL2IsabelleHOL.name (of type)"
, cons :: Maybe As.Term
, args :: [As.Term]
, newArgs :: [As.Term]
, term :: As.Term
_ -> error "HasCASL2IsabelleHOL.matriArg"
As.Other nullRange)
| null peqs = error "HasCASL2IsabelleHOL.testPEQs"
shrinkPat :: CaseMatrix -> As.Term
Nothing -> error "HasCASL2IsabelleHOL.shrinkPat"
termIsVar :: As.Term -> Bool
termHasNoArg :: As.Term -> Bool
IsaSign.Free (transVar var)
transPat _ _ = error "HasCASL2IsabelleHOL.transPat"