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))) |