src/HOL/TLA/IntLemmas.ML
author wenzelm
Mon, 29 Nov 1999 15:52:49 +0100
changeset 8039 a901bafe4578
parent 6255 db63752140c7
permissions -rw-r--r--
Goal: tuned pris;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     1
(* 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     2
    File:	 IntLemmas.ML
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     3
    Author:      Stephan Merz
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
     4
    Copyright:   1998 University of Munich
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     5
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
Lemmas and tactics for "intensional" logics. 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     7
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     8
Mostly a lifting of standard HOL lemmas. They are not required in standard
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
reasoning about intensional logics, which starts by unlifting proof goals
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
to the HOL level.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    11
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    12
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    13
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    14
qed_goal "substW" Intensional.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    15
  "[| |- x = y; w |= P(x) |] ==> w |= P(y)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    16
  (fn [prem1,prem2] => [rtac (rewrite_rule ([prem1] RL [inteq_reflection]) prem2) 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
                        
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    18
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    19
(* Lift HOL rules to intensional reasoning *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    20
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    21
qed_goal "reflW" Intensional.thy "|- x = x"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    22
  (fn _ => [Simp_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    24
qed_goal "symW" Intensional.thy "|- s = t  ==>  |- t = s"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    25
  (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    26
                 rtac intI 1, dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
                 rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    28
                 etac sym 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    29
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    30
qed_goal "not_symW" Intensional.thy "|- s ~= t  ==>  |- t ~= s"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    31
  (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    32
                 rtac intI 1, dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    33
                 rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    34
                 etac not_sym 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    35
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    36
qed_goal "transW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    37
  "[| |- r = s; |- s = t |] ==> |- r = t"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    38
  (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    39
                 rtac intI 1, REPEAT (dtac intD 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    40
                 rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    41
                 etac trans 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    42
                 atac 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    43
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    44
qed_goal "box_equalsW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    45
   "[| |- a = b; |- a = c; |- b = d |] ==> |- c = d"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    46
   (fn prems => [ (rtac transW 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    47
                  (rtac transW 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    48
                  (rtac symW 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    49
                  (REPEAT (resolve_tac prems 1)) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    50
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    51
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    52
(* NB: Antecedent is a standard HOL (non-intensional) formula. *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    53
qed_goal "fun_congW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    54
   "f = g ==> |- f<x> = g<x>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    55
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    56
                  rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    57
                  rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    58
                  etac fun_cong 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    59
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    60
qed_goal "fun_cong2W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    61
   "f = g ==> |- f<x,y> = g<x,y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    62
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    63
                  rtac intI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    64
                  Asm_full_simp_tac 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    65
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    66
qed_goal "fun_cong3W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    67
   "f = g ==> |- f<x,y,z> = g<x,y,z>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    68
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    69
                  rtac intI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    70
                  Asm_full_simp_tac 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    71
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    72
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    73
qed_goal "arg_congW" Intensional.thy "|- x = y ==> |- f<x> = f<y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    74
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    75
                  rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    76
                  dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    77
                  rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    78
                  etac arg_cong 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    79
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    80
qed_goal "arg_cong2W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    81
   "[| |- u = v; |- x = y |] ==> |- f<u,x> = f<v,y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    82
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    83
                  rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    84
                  REPEAT (dtac intD 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    85
                  rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    86
                  REPEAT (etac subst 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    87
                  rtac refl 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    88
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    89
qed_goal "arg_cong3W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    90
   "[| |- r = s; |- u = v; |- x = y |] ==> |- f<r,u,x> = f<s,v,y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    91
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    92
                  rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    93
                  REPEAT (dtac intD 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    94
                  rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    95
                  REPEAT (etac subst 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    96
                  rtac refl 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    97
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    98
qed_goal "congW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
    99
   "[| f = g; |- x = y |] ==> |- f<x> = g<y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   100
   (fn prems => [ rtac box_equalsW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   101
                  rtac reflW 3,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   102
                  rtac arg_congW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   103
                  resolve_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   104
                  rtac fun_congW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   105
                  rtac sym 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   106
                  resolve_tac prems 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   107
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   108
qed_goal "cong2W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   109
   "[| f = g; |- u = v; |- x = y |] ==> |- f<u,x> = g<v,y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   110
   (fn prems => [ rtac box_equalsW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   111
                  rtac reflW 3,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   112
                  rtac arg_cong2W 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   113
                  REPEAT (resolve_tac prems 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   114
                  rtac fun_cong2W 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   115
                  rtac sym 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   116
                  resolve_tac prems 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   117
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   118
qed_goal "cong3W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   119
   "[| f = g; |- r = s; |- u = v; |- x = y |] ==> |- f<r,u,x> = g<s,v,y>"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   120
   (fn prems => [ rtac box_equalsW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   121
                  rtac reflW 3,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   122
                  rtac arg_cong3W 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   123
                  REPEAT (resolve_tac prems 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   124
                  rtac fun_cong3W 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   125
                  rtac sym 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   126
                  resolve_tac prems 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   127
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   128
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   129
(** Lifted equivalence **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   130
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   131
(* Note the object-level implication in the hypothesis. Meta-level implication
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   132
   would be incorrect! *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   133
qed_goal "iffIW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   134
  "[| |- A --> B; |- B --> A |] ==> |- A = B"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   135
  (fn prems => [ cut_facts_tac prems 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   136
                 rewrite_goals_tac (Valid_def::intensional_rews),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   137
                 Blast_tac 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   138
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   139
qed_goal "iffD2W" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   140
  "[| |- P = Q; w |= Q |] ==> w |= P"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   141
 (fn prems => [ cut_facts_tac prems 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   142
	        rewrite_goals_tac (Valid_def::intensional_rews),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   143
                Blast_tac 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   144
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   145
val iffD1W = symW RS iffD2W;
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   146
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   147
(** #True **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   148
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   149
qed_goal "eqTrueIW" Intensional.thy "|- P ==> |- P = #True"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   150
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   151
                rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   152
                dtac intD 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   153
		Asm_full_simp_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   154
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   155
qed_goal "eqTrueEW" Intensional.thy "|- P = #True ==> |- P"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   156
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   157
                rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   158
                dtac intD 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   159
		Asm_full_simp_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   160
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   161
(** #False **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   162
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   163
qed_goal "FalseEW" Intensional.thy "|- #False ==> |- P"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   164
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   165
                rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   166
                dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   167
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   168
                etac FalseE 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   169
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   170
qed_goal "False_neq_TrueW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   171
 "|- #False = #True ==> |- P"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   172
 (fn [prem] => [rtac (prem RS eqTrueEW RS FalseEW) 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   173
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   174
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   175
(** Negation **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   176
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   177
(* Again use object-level implication *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   178
qed_goal "notIW" Intensional.thy "|- P --> #False ==> |- ~P"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   179
  (fn prems => [cut_facts_tac prems 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   180
		rewrite_goals_tac (Valid_def::intensional_rews),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   181
		Blast_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   182
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   183
qed_goal "notEWV" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   184
  "[| |- ~P; |- P |] ==> |- R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   185
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   186
		rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   187
                REPEAT (dtac intD 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   188
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   189
                etac notE 1, atac 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   190
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   191
(* The following rule is stronger: It is enough to detect an 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   192
   inconsistency at *some* world to conclude R. Note also that P and R
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   193
   are allowed to be (intensional) formulas of different types! *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   194
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   195
qed_goal "notEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   196
   "[| w |= ~P; w |= P |] ==> |- R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   197
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   198
                rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   199
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   200
                etac notE 1, atac 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   201
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   202
(** Implication **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   203
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   204
qed_goal "impIW" Intensional.thy "(!!w. (w |= A) ==> (w |= B)) ==> |- A --> B"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   205
  (fn [prem] => [ rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   206
                 rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   207
                 rtac impI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   208
                 etac prem 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   209
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   210
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   211
qed_goal "mpW" Intensional.thy "[| |- A --> B; w |= A |] ==> w |= B"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   212
   (fn prems => [ cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   213
                  dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   214
                  rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   215
                  etac mp 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   216
                  atac 1 ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   217
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   218
qed_goal "impEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   219
  "[| |- A --> B; w |= A; w |= B ==> w |= C |] ==> w |= C"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   220
  (fn prems => [ (REPEAT (resolve_tac (prems@[mpW]) 1)) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   221
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   222
qed_goal "rev_mpW" Intensional.thy "[| w |= P; |- P --> Q |] ==> w |= Q"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   223
  (fn prems => [ (REPEAT (resolve_tac (prems@[mpW]) 1)) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   224
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   225
qed_goalw "contraposW" Intensional.thy intensional_rews
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   226
  "[| w |= ~Q; |- P --> Q |] ==> w |= ~P"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   227
  (fn [major,minor] => [rtac (major RS contrapos) 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   228
                        etac rev_mpW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   229
                        rtac minor 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   230
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   231
qed_goal "iffEW" Intensional.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   232
    "[| |- P = Q; [| |- P --> Q; |- Q --> P |] ==> R |] ==> R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   233
 (fn [p1,p2] => [REPEAT(ares_tac([p1 RS iffD2W, p1 RS iffD1W, p2, impIW])1)]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   234
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   235
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   236
(** Conjunction **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   237
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   238
qed_goalw "conjIW" Intensional.thy intensional_rews "[| w |= P; w |= Q |] ==> w |= P & Q"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   239
  (fn prems => [REPEAT (resolve_tac ([conjI]@prems) 1)]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   240
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   241
qed_goal "conjunct1W" Intensional.thy "(w |= P & Q) ==> w |= P"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   242
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   243
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   244
                etac conjunct1 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   245
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   246
qed_goal "conjunct2W" Intensional.thy "(w |= P & Q) ==> w |= Q"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   247
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   248
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   249
                etac conjunct2 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   250
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   251
qed_goal "conjEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   252
  "[| w |= P & Q; [| w |= P; w |= Q |] ==> w |= R |] ==> w |= R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   253
  (fn prems => [cut_facts_tac prems 1, resolve_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   254
	        etac conjunct1W 1, etac conjunct2W 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   255
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   256
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   257
(** Disjunction **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   258
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   259
qed_goalw "disjI1W" Intensional.thy intensional_rews "w |= P ==> w |= P | Q"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   260
  (fn [prem] => [REPEAT (resolve_tac [disjI1,prem] 1)]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   261
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   262
qed_goalw "disjI2W" Intensional.thy intensional_rews "w |= Q ==> w |= P | Q"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   263
  (fn [prem] => [REPEAT (resolve_tac [disjI2,prem] 1)]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   264
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   265
qed_goal "disjEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   266
         "[| w |= P | Q; |- P --> R; |- Q --> R |] ==> w |= R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   267
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   268
                REPEAT (dtac intD 1),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   269
                rewrite_goals_tac intensional_rews,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   270
		Blast_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   271
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   272
(** Classical propositional logic **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   273
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   274
qed_goalw "classicalW" Intensional.thy (Valid_def::intensional_rews)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   275
  "!!P. |- ~P --> P  ==>  |- P"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   276
  (fn prems => [Blast_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   277
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   278
qed_goal "notnotDW" Intensional.thy "!!P. |- ~~P  ==>  |- P"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   279
  (fn prems => [rtac intI 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   280
                dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   281
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   282
                etac notnotD 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   283
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   284
qed_goal "disjCIW" Intensional.thy "!!P Q. (w |= ~Q --> P) ==> (w |= P|Q)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   285
  (fn prems => [rewrite_goals_tac intensional_rews,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   286
                Blast_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   287
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   288
qed_goal "impCEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   289
   "[| |- P --> Q; (w |= ~P) ==> (w |= R); (w |= Q) ==> (w |= R) |] ==> w |= R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   290
  (fn [a1,a2,a3] => 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   291
    [rtac (excluded_middle RS disjE) 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   292
     etac (rewrite_rule intensional_rews a2) 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   293
     rtac a3 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   294
     etac (a1 RS mpW) 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   295
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   296
qed_goalw "iffCEW" Intensional.thy intensional_rews
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   297
   "[| |- P = Q;      \
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   298
\      [| (w |= P); (w |= Q) |] ==> (w |= R);   \
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   299
\      [| (w |= ~P); (w |= ~Q) |] ==> (w |= R)  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   300
\   |] ==> w |= R"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   301
   (fn [a1,a2,a3] =>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   302
      [rtac iffCE 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   303
       etac a2 2, atac 2,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   304
       etac a3 2, atac 2,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   305
       rtac (int_unlift a1) 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   306
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   307
qed_goal "case_split_thmW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   308
   "!!P. [| |- P --> Q; |- ~P --> Q |] ==> |- Q"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   309
  (fn _ => [rewrite_goals_tac (Valid_def::intensional_rews),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   310
	    Blast_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   311
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   312
fun case_tacW a = res_inst_tac [("P",a)] case_split_thmW;
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   313
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   314
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   315
(** Rigid quantifiers **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   316
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   317
qed_goal "allIW" Intensional.thy "(!!x. |- P x) ==> |- ! x. P(x)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   318
  (fn [prem] => [rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   319
                 rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   320
                 rtac allI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   321
                 rtac (prem RS intD) 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   322
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   323
qed_goal "specW" Intensional.thy "|- ! x. P x ==> |- P x"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   324
  (fn prems => [cut_facts_tac prems 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   325
                rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   326
                dtac intD 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   327
                rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   328
                etac spec 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   329
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   330
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   331
qed_goal "allEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   332
         "[| |- ! x. P x;  |- P x ==> |- R |] ==> |- R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   333
 (fn major::prems=>
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   334
  [ (REPEAT (resolve_tac (prems @ [major RS specW]) 1)) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   335
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   336
qed_goal "all_dupEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   337
    "[| |- ! x. P x;  [| |- P x; |- ! x. P x |] ==> |- R |] ==> |- R"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   338
 (fn prems =>
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   339
  [ (REPEAT (resolve_tac (prems @ (prems RL [specW])) 1)) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   340
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   341
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   342
qed_goal "exIW" Intensional.thy "|- P x ==> |- ? x. P x"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   343
  (fn [prem] => [rtac intI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   344
                 rewrite_goals_tac intensional_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   345
                 rtac exI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   346
                 rtac (prem RS intD) 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   347
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   348
qed_goal "exEW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   349
  "[| w |= ? x. P x; !!x. |- P x --> Q |] ==> w |= Q"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   350
  (fn [major,minor] => [rtac exE 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   351
                        rtac (rewrite_rule intensional_rews major) 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   352
                        etac rev_mpW 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   353
                        rtac minor 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   354
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   355
(** Classical quantifier reasoning **)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   356
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   357
qed_goal "exCIW" Intensional.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   358
  "!!P. w |= (! x. ~P x) --> P a ==> w |= ? x. P x"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   359
  (fn prems => [rewrite_goals_tac intensional_rews,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3842
diff changeset
   360
                Blast_tac 1]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   361