equal
deleted
inserted
replaced
672 val dummy = ss_ref := [] |
672 val dummy = ss_ref := [] |
673 val cut_lemma' = cut_lemma RS eq_reflection |
673 val cut_lemma' = cut_lemma RS eq_reflection |
674 fun prover used ss thm = |
674 fun prover used ss thm = |
675 let fun cong_prover ss thm = |
675 let fun cong_prover ss thm = |
676 let val dummy = say "cong_prover:" |
676 let val dummy = say "cong_prover:" |
677 val cntxt = MetaSimplifier.prems_of_ss ss |
677 val cntxt = Simplifier.prems_of_ss ss |
678 val dummy = print_thms "cntxt:" cntxt |
678 val dummy = print_thms "cntxt:" cntxt |
679 val dummy = say "cong rule:" |
679 val dummy = say "cong rule:" |
680 val dummy = say (Display.string_of_thm thm) |
680 val dummy = say (Display.string_of_thm thm) |
681 val dummy = thm_ref := (thm :: !thm_ref) |
681 val dummy = thm_ref := (thm :: !thm_ref) |
682 val dummy = ss_ref := (ss :: !ss_ref) |
682 val dummy = ss_ref := (ss :: !ss_ref) |
685 let val tych = cterm_of thy |
685 let val tych = cterm_of thy |
686 val dummy = print_cterms "To eliminate:" [tych imp] |
686 val dummy = print_cterms "To eliminate:" [tych imp] |
687 val ants = map tych (Logic.strip_imp_prems imp) |
687 val ants = map tych (Logic.strip_imp_prems imp) |
688 val eq = Logic.strip_imp_concl imp |
688 val eq = Logic.strip_imp_concl imp |
689 val lhs = tych(get_lhs eq) |
689 val lhs = tych(get_lhs eq) |
690 val ss' = MetaSimplifier.add_prems (map ASSUME ants) ss |
690 val ss' = Simplifier.add_prems (map ASSUME ants) ss |
691 val lhs_eq_lhs1 = MetaSimplifier.rewrite_cterm (false,true,false) (prover used) ss' lhs |
691 val lhs_eq_lhs1 = MetaSimplifier.rewrite_cterm (false,true,false) (prover used) ss' lhs |
692 handle U.ERR _ => Thm.reflexive lhs |
692 handle U.ERR _ => Thm.reflexive lhs |
693 val dummy = print_thms "proven:" [lhs_eq_lhs1] |
693 val dummy = print_thms "proven:" [lhs_eq_lhs1] |
694 val lhs_eq_lhs2 = implies_intr_list ants lhs_eq_lhs1 |
694 val lhs_eq_lhs2 = implies_intr_list ants lhs_eq_lhs1 |
695 val lhs_eeq_lhs2 = lhs_eq_lhs2 RS meta_eq_to_obj_eq |
695 val lhs_eeq_lhs2 = lhs_eq_lhs2 RS meta_eq_to_obj_eq |
706 val ants1 = map tych (Logic.strip_imp_prems imp_body1) |
706 val ants1 = map tych (Logic.strip_imp_prems imp_body1) |
707 val eq1 = Logic.strip_imp_concl imp_body1 |
707 val eq1 = Logic.strip_imp_concl imp_body1 |
708 val Q = get_lhs eq1 |
708 val Q = get_lhs eq1 |
709 val QeqQ1 = pbeta_reduce (tych Q) |
709 val QeqQ1 = pbeta_reduce (tych Q) |
710 val Q1 = #2(D.dest_eq(cconcl QeqQ1)) |
710 val Q1 = #2(D.dest_eq(cconcl QeqQ1)) |
711 val ss' = MetaSimplifier.add_prems (map ASSUME ants1) ss |
711 val ss' = Simplifier.add_prems (map ASSUME ants1) ss |
712 val Q1eeqQ2 = MetaSimplifier.rewrite_cterm (false,true,false) (prover used') ss' Q1 |
712 val Q1eeqQ2 = MetaSimplifier.rewrite_cterm (false,true,false) (prover used') ss' Q1 |
713 handle U.ERR _ => Thm.reflexive Q1 |
713 handle U.ERR _ => Thm.reflexive Q1 |
714 val Q2 = #2 (Logic.dest_equals (Thm.prop_of Q1eeqQ2)) |
714 val Q2 = #2 (Logic.dest_equals (Thm.prop_of Q1eeqQ2)) |
715 val Q3 = tych(list_comb(list_mk_aabs(vstrl,Q2),vstrl)) |
715 val Q3 = tych(list_comb(list_mk_aabs(vstrl,Q2),vstrl)) |
716 val Q2eeqQ3 = Thm.symmetric(pbeta_reduce Q3 RS eq_reflection) |
716 val Q2eeqQ3 = Thm.symmetric(pbeta_reduce Q3 RS eq_reflection) |
756 in SOME(eliminate (rename thm)) end |
756 in SOME(eliminate (rename thm)) end |
757 handle U.ERR _ => NONE (* FIXME handle THM as well?? *) |
757 handle U.ERR _ => NONE (* FIXME handle THM as well?? *) |
758 |
758 |
759 fun restrict_prover ss thm = |
759 fun restrict_prover ss thm = |
760 let val dummy = say "restrict_prover:" |
760 let val dummy = say "restrict_prover:" |
761 val cntxt = rev(MetaSimplifier.prems_of_ss ss) |
761 val cntxt = rev(Simplifier.prems_of_ss ss) |
762 val dummy = print_thms "cntxt:" cntxt |
762 val dummy = print_thms "cntxt:" cntxt |
763 val thy = Thm.theory_of_thm thm |
763 val thy = Thm.theory_of_thm thm |
764 val Const("==>",_) $ (Const("Trueprop",_) $ A) $ _ = Thm.prop_of thm |
764 val Const("==>",_) $ (Const("Trueprop",_) $ A) $ _ = Thm.prop_of thm |
765 fun genl tm = let val vlist = subtract (op aconv) globals |
765 fun genl tm = let val vlist = subtract (op aconv) globals |
766 (OldTerm.add_term_frees(tm,[])) |
766 (OldTerm.add_term_frees(tm,[])) |