changeset 80601 | 4e8845bbcd81 |
parent 80589 | 7849b6370425 |
child 80910 | 406a85a25189 |
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) |