src/HOL/Tools/typedef_package.ML
changeset 27691 ce171cbd4b93
parent 27353 71c4dd53d4cb
child 28662 64ab5bb68d4c
equal deleted inserted replaced
27690:24738db98d34 27691:ce171cbd4b93
   126     val typedef_deps = Term.fold_aterms (fn Const c => insert (op =) c | _ => I) set' [];
   126     val typedef_deps = Term.fold_aterms (fn Const c => insert (op =) c | _ => I) set' [];
   127 
   127 
   128     fun add_def eq thy =
   128     fun add_def eq thy =
   129       if def then
   129       if def then
   130         thy
   130         thy
   131         |> PureThy.add_defs_i false [Thm.no_attributes eq]
   131         |> PureThy.add_defs false [Thm.no_attributes eq]
   132         |-> (fn [th] => pair (SOME th))
   132         |-> (fn [th] => pair (SOME th))
   133       else (NONE, thy);
   133       else (NONE, thy);
   134 
   134 
   135     fun typedef_result nonempty =
   135     fun typedef_result nonempty =
   136       ObjectLogic.typedecl (t, vs, mx)
   136       ObjectLogic.typedecl (t, vs, mx)
   138       #> Sign.add_consts_i
   138       #> Sign.add_consts_i
   139        ((if def then [(name, setT', NoSyn)] else []) @
   139        ((if def then [(name, setT', NoSyn)] else []) @
   140         [(Rep_name, newT --> oldT, NoSyn),
   140         [(Rep_name, newT --> oldT, NoSyn),
   141          (Abs_name, oldT --> newT, NoSyn)])
   141          (Abs_name, oldT --> newT, NoSyn)])
   142       #> add_def (PrimitiveDefs.mk_defpair (setC, set))
   142       #> add_def (PrimitiveDefs.mk_defpair (setC, set))
   143       ##>> PureThy.add_axioms_i [((typedef_name, typedef_prop),
   143       ##>> PureThy.add_axioms [((typedef_name, typedef_prop),
   144           [apsnd (fn cond_axm => nonempty RS cond_axm)])]
   144           [apsnd (fn cond_axm => nonempty RS cond_axm)])]
   145       ##> Theory.add_deps "" (dest_Const RepC) typedef_deps
   145       ##> Theory.add_deps "" (dest_Const RepC) typedef_deps
   146       ##> Theory.add_deps "" (dest_Const AbsC) typedef_deps
   146       ##> Theory.add_deps "" (dest_Const AbsC) typedef_deps
   147       #-> (fn (set_def, [type_definition]) => fn thy1 =>
   147       #-> (fn (set_def, [type_definition]) => fn thy1 =>
   148         let
   148         let