src/Pure/Isar/element.ML
changeset 30777 9960ff945c52
parent 30775 71f777103225
child 31794 71af1fd6a5e4
equal deleted inserted replaced
30776:fcd49e932503 30777:9960ff945c52
    59     (Attrib.binding * (thm list * Attrib.src list) list) list ->
    59     (Attrib.binding * (thm list * Attrib.src list) list) list ->
    60     (Attrib.binding * (thm list * Attrib.src list) list) list
    60     (Attrib.binding * (thm list * Attrib.src list) list) list
    61   val eq_morphism: theory -> thm list -> morphism
    61   val eq_morphism: theory -> thm list -> morphism
    62   val transfer_morphism: theory -> morphism
    62   val transfer_morphism: theory -> morphism
    63   val init: context_i -> Context.generic -> Context.generic
    63   val init: context_i -> Context.generic -> Context.generic
    64   val activate: (typ, term, Facts.ref) ctxt list -> Proof.context -> context_i list * Proof.context
    64   val activate_i: context_i -> Proof.context -> context_i * Proof.context
    65   val activate_i: context_i list -> Proof.context -> context_i list * Proof.context
    65   val activate: (typ, term, Facts.ref) ctxt -> Proof.context -> context_i * Proof.context
    66 end;
    66 end;
    67 
    67 
    68 structure Element: ELEMENT =
    68 structure Element: ELEMENT =
    69 struct
    69 struct
    70 
    70 
   514       in context' end);
   514       in context' end);
   515 
   515 
   516 
   516 
   517 (* activate *)
   517 (* activate *)
   518 
   518 
   519 local
   519 fun activate_i elem ctxt =
   520 
   520   let
   521 fun gen_activate prep_facts raw_elems ctxt =
   521     val elem' = map_ctxt_attrib Args.assignable elem;
   522   let
   522     val ctxt' = Context.proof_map (init elem') ctxt;
   523     fun activate elem ctxt' =
   523   in (map_ctxt_attrib Args.closure elem', ctxt') end;
   524       let val elem' = map_ctxt_attrib Args.assignable (prep_facts ctxt' elem)
   524 
   525       in (elem', Context.proof_map (init elem') ctxt') end;
   525 fun activate raw_elem ctxt =
   526     val (elems, ctxt') = fold_map activate raw_elems ctxt;
   526   let val elem = raw_elem |> map_ctxt
   527   in (elems |> map (map_ctxt_attrib Args.closure), ctxt') end;
       
   528 
       
   529 fun prep_facts ctxt =
       
   530   map_ctxt
       
   531    {binding = tap Name.of_binding,
   527    {binding = tap Name.of_binding,
   532     typ = I,
   528     typ = I,
   533     term = I,
   529     term = I,
   534     pattern = I,
   530     pattern = I,
   535     fact = ProofContext.get_fact ctxt,
   531     fact = ProofContext.get_fact ctxt,
   536     attrib = Attrib.intern_src (ProofContext.theory_of ctxt)};
   532     attrib = Attrib.intern_src (ProofContext.theory_of ctxt)}
   537 
   533   in activate_i elem ctxt end;
   538 in
       
   539 
       
   540 fun activate x = gen_activate prep_facts x;
       
   541 fun activate_i x = gen_activate (K I) x;
       
   542 
   534 
   543 end;
   535 end;
   544 
       
   545 end;