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 |