src/HOL/Induct/PropLog.ML
changeset 4686 74a12e86b20b
parent 4161 ac7f082e64a5
child 4831 dae4d63a1318
equal deleted inserted replaced
4685:9259feeeb2c8 4686:74a12e86b20b
   139 
   139 
   140 (*For the case hyps(p,t)-insert(#v,Y) |- p;
   140 (*For the case hyps(p,t)-insert(#v,Y) |- p;
   141   we also have hyps(p,t)-{#v} <= hyps(p, t-{v}) *)
   141   we also have hyps(p,t)-{#v} <= hyps(p, t-{v}) *)
   142 goal PropLog.thy "hyps p (t-{v}) <= insert (#v->false) ((hyps p t)-{#v})";
   142 goal PropLog.thy "hyps p (t-{v}) <= insert (#v->false) ((hyps p t)-{#v})";
   143 by (PropLog.pl.induct_tac "p" 1);
   143 by (PropLog.pl.induct_tac "p" 1);
   144 by (Simp_tac 1);
   144 by (ALLGOALS Simp_tac);
   145 by (simp_tac (simpset() addsplits [expand_if]) 1);
       
   146 by (Simp_tac 1);
       
   147 by (Fast_tac 1);
   145 by (Fast_tac 1);
   148 qed "hyps_Diff";
   146 qed "hyps_Diff";
   149 
   147 
   150 (*For the case hyps(p,t)-insert(#v -> false,Y) |- p;
   148 (*For the case hyps(p,t)-insert(#v -> false,Y) |- p;
   151   we also have hyps(p,t)-{#v->false} <= hyps(p, insert(v,t)) *)
   149   we also have hyps(p,t)-{#v->false} <= hyps(p, insert(v,t)) *)
   152 goal PropLog.thy "hyps p (insert v t) <= insert (#v) (hyps p t-{#v->false})";
   150 goal PropLog.thy "hyps p (insert v t) <= insert (#v) (hyps p t-{#v->false})";
   153 by (PropLog.pl.induct_tac "p" 1);
   151 by (PropLog.pl.induct_tac "p" 1);
   154 by (Simp_tac 1);
   152 by (ALLGOALS Simp_tac);
   155 by (simp_tac (simpset() addsplits [expand_if]) 1);
       
   156 by (Simp_tac 1);
       
   157 by (Fast_tac 1);
   153 by (Fast_tac 1);
   158 qed "hyps_insert";
   154 qed "hyps_insert";
   159 
   155 
   160 (** Two lemmas for use with weaken_left **)
   156 (** Two lemmas for use with weaken_left **)
   161 
   157 
   172 by (ALLGOALS Asm_simp_tac);
   168 by (ALLGOALS Asm_simp_tac);
   173 qed "hyps_finite";
   169 qed "hyps_finite";
   174 
   170 
   175 goal PropLog.thy "hyps p t <= (UN v. {#v, #v->false})";
   171 goal PropLog.thy "hyps p t <= (UN v. {#v, #v->false})";
   176 by (PropLog.pl.induct_tac "p" 1);
   172 by (PropLog.pl.induct_tac "p" 1);
   177 by (ALLGOALS (simp_tac (simpset() addsplits [expand_if])));
   173 by (ALLGOALS Simp_tac);
   178 by (Blast_tac 1);
   174 by (Blast_tac 1);
   179 qed "hyps_subset";
   175 qed "hyps_subset";
   180 
   176 
   181 val Diff_weaken_left = subset_refl RSN (2, Diff_mono) RS weaken_left;
   177 val Diff_weaken_left = subset_refl RSN (2, Diff_mono) RS weaken_left;
   182 
   178