src/Tools/Haskell/Haskell.thy
changeset 80601 4e8845bbcd81
parent 80589 7849b6370425
child 80910 406a85a25189
equal deleted inserted replaced
80600:9efbbad0a834 80601:4e8845bbcd81
  2173 
  2173 
  2174 module Isabelle.Name (
  2174 module Isabelle.Name (
  2175   Name,
  2175   Name,
  2176   uu, uu_, aT,
  2176   uu, uu_, aT,
  2177   clean_index, clean, internal, skolem, is_internal, is_skolem, dest_internal, dest_skolem,
  2177   clean_index, clean, internal, skolem, is_internal, is_skolem, dest_internal, dest_skolem,
  2178   Context, declare, declare_renaming, is_declared, declared, context, make_context,
  2178   Context, declare, declare_renamed, is_declared, declared, context, make_context,
  2179   variant, variant_list
  2179   variant, variant_list
  2180 )
  2180 )
  2181 where
  2181 where
  2182 
  2182 
  2183 import Data.Maybe (fromMaybe)
  2183 import Data.Maybe (fromMaybe)
  2240 
  2240 
  2241 declare_renaming :: (Name, Name) -> Context -> Context
  2241 declare_renaming :: (Name, Name) -> Context -> Context
  2242 declare_renaming (x, x') (Context names) =
  2242 declare_renaming (x, x') (Context names) =
  2243   Context (Map.insert (clean x) (Just (clean x')) names)
  2243   Context (Map.insert (clean x) (Just (clean x')) names)
  2244 
  2244 
       
  2245 declare_renamed :: (Name, Name) -> Context -> Context
       
  2246 declare_renamed (x, x') =
       
  2247   (if clean x /= clean x' then declare_renaming (x, x') else id) #> declare x'
       
  2248 
  2245 is_declared :: Context -> Name -> Bool
  2249 is_declared :: Context -> Name -> Bool
  2246 is_declared (Context names) x = Map.member x names
  2250 is_declared (Context names) x = Map.member x names
  2247 
  2251 
  2248 declared :: Context -> Name -> Maybe (Maybe Name)
  2252 declared :: Context -> Name -> Maybe (Maybe Name)
  2249 declared (Context names) a = Map.lookup a names
  2253 declared (Context names) a = Map.lookup a names
  2287       if not (is_declared ctxt x) then (x, declare x ctxt)
  2291       if not (is_declared ctxt x) then (x, declare x ctxt)
  2288       else
  2292       else
  2289         let
  2293         let
  2290           x0 = bump_init x
  2294           x0 = bump_init x
  2291           x' = vary x0
  2295           x' = vary x0
  2292           ctxt' = ctxt
  2296           ctxt' = ctxt |> declare_renamed (x0, x')
  2293             |> (if x0 /= x' then declare_renaming (x0, x') else id)
       
  2294             |> declare x'
       
  2295         in (x', ctxt')
  2297         in (x', ctxt')
  2296   in (x' <> Bytes.pack (replicate n underscore), ctxt')
  2298   in (x' <> Bytes.pack (replicate n underscore), ctxt')
  2297 
  2299 
  2298 variant_list :: [Name] -> [Name] -> [Name]
  2300 variant_list :: [Name] -> [Name] -> [Name]
  2299 variant_list used names = fst (make_context used |> fold_map variant names)
  2301 variant_list used names = fst (make_context used |> fold_map variant names)