src/Pure/drule.ML
changeset 11163 14732e3eaa6e
parent 11120 5254d35e4f7c
child 11512 da3a96ab5630
equal deleted inserted replaced
11162:9e2ec5f02217 11163:14732e3eaa6e
    38   val instantiate       :
    38   val instantiate       :
    39     (indexname * ctyp) list * (cterm * cterm) list -> thm -> thm
    39     (indexname * ctyp) list * (cterm * cterm) list -> thm -> thm
    40   val zero_var_indexes  : thm -> thm
    40   val zero_var_indexes  : thm -> thm
    41   val standard          : thm -> thm
    41   val standard          : thm -> thm
    42   val rotate_prems      : int -> thm -> thm
    42   val rotate_prems      : int -> thm -> thm
       
    43   val rearrange_prems   : int list -> thm -> thm
    43   val assume_ax         : theory -> string -> thm
    44   val assume_ax         : theory -> string -> thm
    44   val RSN               : thm * (int * thm) -> thm
    45   val RSN               : thm * (int * thm) -> thm
    45   val RS                : thm * thm -> thm
    46   val RS                : thm * thm -> thm
    46   val RLN               : thm list * (int * thm list) -> thm list
    47   val RLN               : thm list * (int * thm list) -> thm list
    47   val RL                : thm list * thm list -> thm list
    48   val RL                : thm list * thm list -> thm list
   365 
   366 
   366 
   367 
   367 (*Rotates a rule's premises to the left by k*)
   368 (*Rotates a rule's premises to the left by k*)
   368 val rotate_prems = permute_prems 0;
   369 val rotate_prems = permute_prems 0;
   369 
   370 
       
   371 (* permute prems, where the i-th position in the argument list (counting from 0)
       
   372    gives the position within the original thm to be transferred to position i.
       
   373    Any remaining trailing positions are left unchanged. *)
       
   374 val rearrange_prems = let
       
   375   fun rearr new []      thm = thm
       
   376   |   rearr new (p::ps) thm = rearr (new+1) 
       
   377      (map (fn q => if new<=q andalso q<p then q+1 else q) ps)
       
   378      (permute_prems (new+1) (new-p) (permute_prems new (p-new) thm))
       
   379   in rearr 0 end;
   370 
   380 
   371 (*Assume a new formula, read following the same conventions as axioms.
   381 (*Assume a new formula, read following the same conventions as axioms.
   372   Generalizes over Free variables,
   382   Generalizes over Free variables,
   373   creates the assumption, and then strips quantifiers.
   383   creates the assumption, and then strips quantifiers.
   374   Example is [| ALL x:?A. ?P(x) |] ==> [| ?P(?a) |]
   384   Example is [| ALL x:?A. ?P(x) |] ==> [| ?P(?a) |]