src/Pure/drule.ML
changeset 12725 7ede865e1fe5
parent 12719 41e0d086f8b6
child 12756 08bf3d911968
equal deleted inserted replaced
12724:beedc794bd67 12725:7ede865e1fe5
    29   val forall_intr_frees : thm -> thm
    29   val forall_intr_frees : thm -> thm
    30   val forall_intr_vars  : thm -> thm
    30   val forall_intr_vars  : thm -> thm
    31   val forall_elim_list  : cterm list -> thm -> thm
    31   val forall_elim_list  : cterm list -> thm -> thm
    32   val forall_elim_var   : int -> thm -> thm
    32   val forall_elim_var   : int -> thm -> thm
    33   val forall_elim_vars  : int -> thm -> thm
    33   val forall_elim_vars  : int -> thm -> thm
    34   val forall_elim_vars_safe  : thm -> thm
    34   val gen_all           : thm -> thm
    35   val freeze_thaw       : thm -> thm * (thm -> thm)
    35   val freeze_thaw       : thm -> thm * (thm -> thm)
    36   val implies_elim_list : thm -> thm list -> thm
    36   val implies_elim_list : thm -> thm list -> thm
    37   val implies_intr_list : cterm list -> thm -> thm
    37   val implies_intr_list : cterm list -> thm -> thm
    38   val instantiate       :
    38   val instantiate       :
    39     (indexname * ctyp) list * (cterm * cterm) list -> thm -> thm
    39     (indexname * ctyp) list * (cterm * cterm) list -> thm -> thm
   313     end;
   313     end;
   314 
   314 
   315 val forall_elim_var = PureThy.forall_elim_var;
   315 val forall_elim_var = PureThy.forall_elim_var;
   316 val forall_elim_vars = PureThy.forall_elim_vars;
   316 val forall_elim_vars = PureThy.forall_elim_vars;
   317 
   317 
   318 fun forall_elim_vars_safe thm =
   318 fun gen_all thm =
   319   let
   319   let
   320     val {sign, prop, maxidx, ...} = Thm.rep_thm thm;
   320     val {sign, prop, maxidx, ...} = Thm.rep_thm thm;
   321     fun elim (th, (x, T)) = Thm.forall_elim (Thm.cterm_of sign (Var ((x, maxidx + 1), T))) th;
   321     fun elim (th, (x, T)) = Thm.forall_elim (Thm.cterm_of sign (Var ((x, maxidx + 1), T))) th;
   322     val vs = Term.strip_all_vars prop;
   322     val vs = Term.strip_all_vars prop;
   323   in foldl elim (thm, Term.variantlist (map #1 vs, []) ~~ map #2 vs) end;
   323   in foldl elim (thm, Term.variantlist (map #1 vs, []) ~~ map #2 vs) end;