equal
deleted
inserted
replaced
374 |> HOLogic.mk_Trueprop |> provelin ctxt) RS eq_reflection end |
374 |> HOLogic.mk_Trueprop |> provelin ctxt) RS eq_reflection end |
375 fun nzprop x = |
375 fun nzprop x = |
376 let |
376 let |
377 val th = |
377 val th = |
378 Simplifier.rewrite (put_simpset lin_ss ctxt) |
378 Simplifier.rewrite (put_simpset lin_ss ctxt) |
379 (Thm.apply \<^cterm>\<open>Trueprop\<close> (Thm.apply \<^cterm>\<open>Not\<close> |
379 (HOLogic.mk_judgment (Thm.apply \<^cterm>\<open>Not\<close> |
380 (Thm.apply (Thm.apply \<^cterm>\<open>(=) :: int => _\<close> (Numeral.mk_cnumber \<^ctyp>\<open>int\<close> x)) |
380 (Thm.apply (Thm.apply \<^cterm>\<open>(=) :: int => _\<close> (Numeral.mk_cnumber \<^ctyp>\<open>int\<close> x)) |
381 \<^cterm>\<open>0::int\<close>))) |
381 \<^cterm>\<open>0::int\<close>))) |
382 in Thm.equal_elim (Thm.symmetric th) TrueI end; |
382 in Thm.equal_elim (Thm.symmetric th) TrueI end; |
383 val notz = |
383 val notz = |
384 let val tab = fold Inttab.update |
384 let val tab = fold Inttab.update |
467 val cd = Numeral.mk_cnumber \<^ctyp>\<open>int\<close> d |
467 val cd = Numeral.mk_cnumber \<^ctyp>\<open>int\<close> d |
468 fun divprop x = |
468 fun divprop x = |
469 let |
469 let |
470 val th = |
470 val th = |
471 Simplifier.rewrite (put_simpset lin_ss ctxt) |
471 Simplifier.rewrite (put_simpset lin_ss ctxt) |
472 (Thm.apply \<^cterm>\<open>Trueprop\<close> |
472 (HOLogic.mk_judgment |
473 (Thm.apply (Thm.apply dvdc (Numeral.mk_cnumber \<^ctyp>\<open>int\<close> x)) cd)) |
473 (Thm.apply (Thm.apply dvdc (Numeral.mk_cnumber \<^ctyp>\<open>int\<close> x)) cd)) |
474 in Thm.equal_elim (Thm.symmetric th) TrueI end; |
474 in Thm.equal_elim (Thm.symmetric th) TrueI end; |
475 val dvd = |
475 val dvd = |
476 let val tab = fold Inttab.update (ds ~~ (map divprop ds)) Inttab.empty in |
476 let val tab = fold Inttab.update (ds ~~ (map divprop ds)) Inttab.empty in |
477 fn ct => the (Inttab.lookup tab (Thm.term_of ct |> dest_number)) |
477 fn ct => the (Inttab.lookup tab (Thm.term_of ct |> dest_number)) |
479 (writeln ("dvd: Theorems-Table contains no entry for" ^ |
479 (writeln ("dvd: Theorems-Table contains no entry for" ^ |
480 Syntax.string_of_term ctxt (Thm.term_of ct)); raise Option.Option) |
480 Syntax.string_of_term ctxt (Thm.term_of ct)); raise Option.Option) |
481 end |
481 end |
482 val dp = |
482 val dp = |
483 let val th = Simplifier.rewrite (put_simpset lin_ss ctxt) |
483 let val th = Simplifier.rewrite (put_simpset lin_ss ctxt) |
484 (Thm.apply \<^cterm>\<open>Trueprop\<close> |
484 (HOLogic.mk_judgment |
485 (Thm.apply (Thm.apply \<^cterm>\<open>(<) :: int => _\<close> \<^cterm>\<open>0::int\<close>) cd)) |
485 (Thm.apply (Thm.apply \<^cterm>\<open>(<) :: int => _\<close> \<^cterm>\<open>0::int\<close>) cd)) |
486 in Thm.equal_elim (Thm.symmetric th) TrueI end; |
486 in Thm.equal_elim (Thm.symmetric th) TrueI end; |
487 (* A and B set *) |
487 (* A and B set *) |
488 local |
488 local |
489 val insI1 = Thm.instantiate' [SOME \<^ctyp>\<open>int\<close>] [] @{thm "insertI1"} |
489 val insI1 = Thm.instantiate' [SOME \<^ctyp>\<open>int\<close>] [] @{thm "insertI1"} |
734 val (ps, c) = split_last (strip_objimp p) |
734 val (ps, c) = split_last (strip_objimp p) |
735 val qs = filter P ps |
735 val qs = filter P ps |
736 val q = if P c then c else \<^cterm>\<open>False\<close> |
736 val q = if P c then c else \<^cterm>\<open>False\<close> |
737 val ng = fold_rev (fn (a,v) => fn t => Thm.apply a (Thm.lambda v t)) qvs |
737 val ng = fold_rev (fn (a,v) => fn t => Thm.apply a (Thm.lambda v t)) qvs |
738 (fold_rev (fn p => fn q => Thm.apply (Thm.apply \<^cterm>\<open>HOL.implies\<close> p) q) qs q) |
738 (fold_rev (fn p => fn q => Thm.apply (Thm.apply \<^cterm>\<open>HOL.implies\<close> p) q) qs q) |
739 val g = Thm.apply (Thm.apply \<^cterm>\<open>(==>)\<close> (Thm.apply \<^cterm>\<open>Trueprop\<close> ng)) p' |
739 val g = Thm.apply (Thm.apply \<^cterm>\<open>(==>)\<close> (HOLogic.mk_judgment ng)) p' |
740 val ntac = (case qs of [] => q aconvc \<^cterm>\<open>False\<close> |
740 val ntac = (case qs of [] => q aconvc \<^cterm>\<open>False\<close> |
741 | _ => false) |
741 | _ => false) |
742 in |
742 in |
743 if ntac then no_tac |
743 if ntac then no_tac |
744 else |
744 else |