src/HOL/meson_lemmas.ML
author kleing
Sun, 06 Apr 2003 21:16:50 +0200
changeset 13901 af38553e61ee
parent 11460 e5fb885bfe3a
child 14733 3eda95792083
permissions -rw-r--r--
use 2 processors on sunbroy1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9869
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/meson_lemmas.ML
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     4
    Copyright   1992  University of Cambridge
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     5
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     6
Lemmas for Meson.
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     7
*)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     8
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
     9
(* Generation of contrapositives *)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    10
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    11
(*Inserts negated disjunct after removing the negation; P is a literal*)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    12
val [major,minor] = Goal "~P|Q ==> ((~P==>P) ==> Q)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    13
by (rtac (major RS disjE) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    14
by (rtac notE 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    15
by (etac minor 2);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    16
by (ALLGOALS assume_tac);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    17
qed "make_neg_rule";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    18
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    19
(*For Plaisted's "Postive refinement" of the MESON procedure*)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    20
Goal "~P|Q ==> (P ==> Q)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    21
by (Blast_tac 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    22
qed "make_refined_neg_rule";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    23
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    24
(*P should be a literal*)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    25
val [major,minor] = Goal "P|Q ==> ((P==>~P) ==> Q)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    26
by (rtac (major RS disjE) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    27
by (rtac notE 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    28
by (etac minor 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    29
by (ALLGOALS assume_tac);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    30
qed "make_pos_rule";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    31
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    32
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    33
(* Generation of a goal clause -- put away the final literal *)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    34
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    35
val [major,minor] = Goal "~P ==> ((~P==>P) ==> False)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    36
by (rtac notE 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    37
by (rtac minor 2);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    38
by (ALLGOALS (rtac major));
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    39
qed "make_neg_goal";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    40
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    41
val [major,minor] = Goal "P ==> ((P==>~P) ==> False)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    42
by (rtac notE 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    43
by (rtac minor 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    44
by (ALLGOALS (rtac major));
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    45
qed "make_pos_goal";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    46
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    47
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    48
(* Lemmas for forward proof (like congruence rules) *)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    49
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    50
(*NOTE: could handle conjunctions (faster?) by
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    51
    nf(th RS conjunct2) RS (nf(th RS conjunct1) RS conjI) *)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    52
val major::prems = Goal
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    53
    "[| P'&Q';  P' ==> P;  Q' ==> Q |] ==> P&Q";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    54
by (rtac (major RS conjE) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    55
by (rtac conjI 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    56
by (ALLGOALS (eresolve_tac prems));
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    57
qed "conj_forward";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    58
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    59
val major::prems = Goal
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    60
    "[| P'|Q';  P' ==> P;  Q' ==> Q |] ==> P|Q";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    61
by (rtac (major RS disjE) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    62
by (ALLGOALS (dresolve_tac prems));
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    63
by (ALLGOALS (eresolve_tac [disjI1,disjI2]));
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    64
qed "disj_forward";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    65
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    66
(*Version for removal of duplicate literals*)
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    67
val major::prems = Goal
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    68
    "[| P'|Q';  P' ==> P;  [| Q'; P==>False |] ==> Q |] ==> P|Q";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    69
by (cut_facts_tac [major] 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    70
by (blast_tac (claset() addIs prems) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    71
qed "disj_forward2";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    72
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    73
val major::prems = Goal
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    74
    "[| ALL x. P'(x);  !!x. P'(x) ==> P(x) |] ==> ALL x. P(x)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    75
by (rtac allI 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    76
by (resolve_tac prems 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    77
by (rtac (major RS spec) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    78
qed "all_forward";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    79
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    80
val major::prems = Goal
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    81
    "[| EX x. P'(x);  !!x. P'(x) ==> P(x) |] ==> EX x. P(x)";
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    82
by (rtac (major RS exE) 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    83
by (rtac exI 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    84
by (eresolve_tac prems 1);
95dca9f991f2 improved meson setup;
wenzelm
parents:
diff changeset
    85
qed "ex_forward";