src/Pure/drule.ML
changeset 1194 563ecd14c1d8
parent 952 9e10962866b0
child 1218 59ed8ef1a3a1
equal deleted inserted replaced
1193:026221bc9b2d 1194:563ecd14c1d8
    28   val eq_thm		: thm * thm -> bool
    28   val eq_thm		: thm * thm -> bool
    29   val eq_thm_sg		: thm * thm -> bool
    29   val eq_thm_sg		: thm * thm -> bool
    30   val flexpair_abs_elim_list: cterm list -> thm -> thm
    30   val flexpair_abs_elim_list: cterm list -> thm -> thm
    31   val forall_intr_list	: cterm list -> thm -> thm
    31   val forall_intr_list	: cterm list -> thm -> thm
    32   val forall_intr_frees	: thm -> thm
    32   val forall_intr_frees	: thm -> thm
       
    33   val forall_intr_vars	: thm -> thm
    33   val forall_elim_list	: cterm list -> thm -> thm
    34   val forall_elim_list	: cterm list -> thm -> thm
    34   val forall_elim_var	: int -> thm -> thm
    35   val forall_elim_var	: int -> thm -> thm
    35   val forall_elim_vars	: int -> thm -> thm
    36   val forall_elim_vars	: int -> thm -> thm
    36   val implies_elim_list	: thm -> thm list -> thm
    37   val implies_elim_list	: thm -> thm list -> thm
    37   val implies_intr_list	: cterm list -> thm -> thm
    38   val implies_intr_list	: cterm list -> thm -> thm
   642 
   643 
   643 (*Useful "distance" function for BEST_FIRST*)
   644 (*Useful "distance" function for BEST_FIRST*)
   644 val size_of_thm = size_of_term o #prop o rep_thm;
   645 val size_of_thm = size_of_term o #prop o rep_thm;
   645 
   646 
   646 
   647 
       
   648 (** Mark Staples's weaker version of eq_thm: ignores variable renaming and
       
   649     (some) type variable renaming **)
       
   650 
       
   651  (* Can't use term_vars, because it sorts the resulting list of variable names.
       
   652     We instead need the unique list noramlised by the order of appearance
       
   653     in the term. *)
       
   654 fun term_vars' (t as Var(v,T)) = [t]
       
   655   | term_vars' (Abs(_,_,b)) = term_vars' b
       
   656   | term_vars' (f$a) = (term_vars' f) @ (term_vars' a)
       
   657   | term_vars' _ = [];
       
   658 
       
   659 fun forall_intr_vars th =
       
   660   let val {prop,sign,...} = rep_thm th;
       
   661       val vars = distinct (term_vars' prop);
       
   662   in forall_intr_list (map (cterm_of sign) vars) th end;
       
   663 
       
   664 fun weak_eq_thm (tha,thb) = 
       
   665     eq_thm(forall_intr_vars (freezeT tha), forall_intr_vars (freezeT thb));
       
   666 
       
   667 
       
   668 
   647 (*** Meta-Rewriting Rules ***)
   669 (*** Meta-Rewriting Rules ***)
   648 
   670 
   649 
   671 
   650 val reflexive_thm =
   672 val reflexive_thm =
   651   let val cx = cterm_of Sign.proto_pure (Var(("x",0),TVar(("'a",0),logicS)))
   673   let val cx = cterm_of Sign.proto_pure (Var(("x",0),TVar(("'a",0),logicS)))