src/Pure/Isar/local_defs.ML
changeset 67721 5348bea4accd
parent 67627 5cca859b2d2e
child 69575 f77cc54f6d47
equal deleted inserted replaced
67718:17874d43d3b3 67721:5348bea4accd
    80 val head_of_def =
    80 val head_of_def =
    81   Term.dest_Free o Term.head_of o #1 o Logic.dest_equals o Term.strip_all_body;
    81   Term.dest_Free o Term.head_of o #1 o Logic.dest_equals o Term.strip_all_body;
    82 
    82 
    83 
    83 
    84 (*
    84 (*
    85   [x, x == a]
    85   [x, x \<equiv> a]
    86        :
    86        :
    87       B x
    87       B x
    88   -----------
    88   -----------
    89       B a
    89       B a
    90 *)
    90 *)
   131 
   131 
   132 
   132 
   133 (* specific export -- result based on educated guessing *)
   133 (* specific export -- result based on educated guessing *)
   134 
   134 
   135 (*
   135 (*
   136   [xs, xs == as]
   136   [xs, xs \<equiv> as]
   137         :
   137         :
   138        B xs
   138        B xs
   139   --------------
   139   --------------
   140        B as
   140        B as
   141 *)
   141 *)
   156                   else (Drule.abs_def (Variable.gen_all outer asm), true))
   156                   else (Drule.abs_def (Variable.gen_all outer asm), true))
   157             end)));
   157             end)));
   158   in (apply2 (map #1) (List.partition #2 defs_asms), Assumption.export false inner outer th) end;
   158   in (apply2 (map #1) (List.partition #2 defs_asms), Assumption.export false inner outer th) end;
   159 
   159 
   160 (*
   160 (*
   161   [xs, xs == as]
   161   [xs, xs \<equiv> as]
   162         :
   162         :
   163      TERM b xs
   163      TERM b xs
   164   --------------  and  --------------
   164   --------------  and  --------------
   165      TERM b as          b xs == b as
   165      TERM b as          b xs \<equiv> b as
   166 *)
   166 *)
   167 fun export_cterm inner outer ct =
   167 fun export_cterm inner outer ct =
   168   export inner outer (Drule.mk_term ct) ||> Drule.dest_term;
   168   export inner outer (Drule.mk_term ct) ||> Drule.dest_term;
   169 
   169 
   170 fun contract ctxt defs ct th =
   170 fun contract ctxt defs ct th =