src/Pure/conv.ML
changeset 74545 6c123914883a
parent 74525 c960bfcb91db
child 74560 5c8177fd1295
equal deleted inserted replaced
74544:9864ab4c20ce 74545:6c123914883a
    37   val forall_conv: (cterm * Proof.context -> conv) -> Proof.context -> conv
    37   val forall_conv: (cterm * Proof.context -> conv) -> Proof.context -> conv
    38   val implies_conv: conv -> conv -> conv
    38   val implies_conv: conv -> conv -> conv
    39   val implies_concl_conv: conv -> conv
    39   val implies_concl_conv: conv -> conv
    40   val rewr_conv: thm -> conv
    40   val rewr_conv: thm -> conv
    41   val rewrs_conv: thm list -> conv
    41   val rewrs_conv: thm list -> conv
       
    42   val bottom_rewrs_conv: thm list -> Proof.context -> conv
       
    43   val top_rewrs_conv: thm list -> Proof.context -> conv
       
    44   val top_sweep_rewrs_conv: thm list -> Proof.context -> conv
    42   val sub_conv: (Proof.context -> conv) -> Proof.context -> conv
    45   val sub_conv: (Proof.context -> conv) -> Proof.context -> conv
    43   val bottom_conv: (Proof.context -> conv) -> Proof.context -> conv
    46   val bottom_conv: (Proof.context -> conv) -> Proof.context -> conv
    44   val top_conv: (Proof.context -> conv) -> Proof.context -> conv
    47   val top_conv: (Proof.context -> conv) -> Proof.context -> conv
    45   val top_sweep_conv: (Proof.context -> conv) -> Proof.context -> conv
    48   val top_sweep_conv: (Proof.context -> conv) -> Proof.context -> conv
    46   val params_conv: int -> (Proof.context -> conv) -> Proof.context -> conv
    49   val params_conv: int -> (Proof.context -> conv) -> Proof.context -> conv
   151   (case Thm.term_of ct of
   154   (case Thm.term_of ct of
   152     Const ("Pure.imp", _) $ _ $ _ => arg_conv cv ct
   155     Const ("Pure.imp", _) $ _ $ _ => arg_conv cv ct
   153   | _ => raise CTERM ("implies_concl_conv", [ct]));
   156   | _ => raise CTERM ("implies_concl_conv", [ct]));
   154 
   157 
   155 
   158 
   156 (* single rewrite step, cf. REWR_CONV in HOL *)
   159 (* rewrite steps *)
   157 
   160 
       
   161 (*cf. REWR_CONV in HOL*)
   158 fun rewr_conv rule ct =
   162 fun rewr_conv rule ct =
   159   let
   163   let
   160     val rule1 = Thm.incr_indexes (Thm.maxidx_of_cterm ct + 1) rule;
   164     val rule1 = Thm.incr_indexes (Thm.maxidx_of_cterm ct + 1) rule;
   161     val lhs = Thm.lhs_of rule1;
   165     val lhs = Thm.lhs_of rule1;
   162     val rule2 = Thm.rename_boundvars (Thm.term_of lhs) (Thm.term_of ct) rule1;
   166     val rule2 = Thm.rename_boundvars (Thm.term_of lhs) (Thm.term_of ct) rule1;
   170         in rule3 COMP Thm.trivial (Thm.mk_binop ceq ct (Thm.rhs_of rule3)) end;
   174         in rule3 COMP Thm.trivial (Thm.mk_binop ceq ct (Thm.rhs_of rule3)) end;
   171   in Thm.transitive rule4 (Thm.beta_conversion true (Thm.rhs_of rule4)) end;
   175   in Thm.transitive rule4 (Thm.beta_conversion true (Thm.rhs_of rule4)) end;
   172 
   176 
   173 fun rewrs_conv rules = first_conv (map rewr_conv rules);
   177 fun rewrs_conv rules = first_conv (map rewr_conv rules);
   174 
   178 
       
   179 fun bottom_rewrs_conv rewrs = bottom_conv (K (try_conv (rewrs_conv rewrs)));
       
   180 fun top_rewrs_conv rewrs = top_conv (K (try_conv (rewrs_conv rewrs)));
       
   181 fun top_sweep_rewrs_conv rewrs = top_sweep_conv (K (rewrs_conv rewrs));
       
   182 
   175 
   183 
   176 (* conversions on HHF rules *)
   184 (* conversions on HHF rules *)
   177 
   185 
   178 (*rewrite B in \<And>x1 ... xn. B*)
   186 (*rewrite B in \<And>x1 ... xn. B*)
   179 fun params_conv n cv ctxt ct =
   187 fun params_conv n cv ctxt ct =