@@ -183,19 +183,29 @@ theorem forall_framing {x: EVar} (phi1 phi2: Pattern x)
183
183
$ (forall x phi1) -> forall x phi2 $ =
184
184
'(con3 @ exists_framing @ con3 h);
185
185
186
- theorem or_exists_disjoint {x: EVar} (phi1: Pattern) (phi2: Pattern x):
186
+ theorem disjoint_forall: $ phi -> forall x phi $ = '(con2 @ exists_generalization_disjoint id);
187
+
188
+ theorem or_exists_fresh {x: EVar} (phi1 phi2: Pattern x) (freshness_phi1: $ _eFresh x phi1 $):
187
189
$ (phi1 \/ exists x phi2) <-> exists x (phi1 \/ phi2) $ =
188
190
'(ibii
189
191
(eori
190
192
(syl exists_intro_same_var orl)
191
193
(exists_generalization eFresh_exists_same_var @ syl exists_intro_same_var orr))
192
- (exists_generalization (eFresh_or eFresh_disjoint eFresh_exists_same_var) @ eori orl @ orrd exists_intro_same_var));
194
+ (exists_generalization (eFresh_or freshness_phi1 eFresh_exists_same_var) @ eori orl @ orrd exists_intro_same_var));
193
195
194
- theorem imp_exists_disjoint {x: EVar} (phi1: Pattern) (phi2: Pattern x):
196
+ theorem or_exists_disjoint {x: EVar} (phi1: Pattern) (phi2: Pattern x):
197
+ $ (phi1 \/ exists x phi2) <-> exists x (phi1 \/ phi2) $ =
198
+ '(or_exists_fresh eFresh_disjoint);
199
+
200
+ theorem imp_exists_fresh {x: EVar} (phi1 phi2: Pattern x) (freshness_phi1: $ _eFresh x phi1 $):
195
201
$ (phi1 -> exists x phi2) <-> exists x (phi1 -> phi2) $ =
196
202
'(ibii
197
- (rsyl (imim1 dne) @ rsyl (anl or_exists_disjoint) @ exists_framing @ imim1 notnot1)
198
- (rsyl (exists_framing @ imim1 dne) @ rsyl (anr or_exists_disjoint) @ imim1 notnot1));
203
+ (rsyl (imim1 dne) @ rsyl (anl @ or_exists_fresh @ eFresh_not freshness_phi1) @ exists_framing @ imim1 notnot1)
204
+ (rsyl (exists_framing @ imim1 dne) @ rsyl (anr @ or_exists_fresh @ eFresh_not freshness_phi1) @ imim1 notnot1));
205
+
206
+ theorem imp_exists_disjoint {x: EVar} (phi1: Pattern) (phi2: Pattern x):
207
+ $ (phi1 -> exists x phi2) <-> exists x (phi1 -> phi2) $ =
208
+ '(imp_exists_fresh eFresh_disjoint);
199
209
200
210
theorem and_exists {x: EVar} (phi1 phi2: Pattern x):
201
211
$ (exists x (phi1 /\ phi2)) -> ((exists x phi1) /\ (exists x phi2)) $ =
@@ -212,14 +222,23 @@ theorem or_exists_bi {x: EVar} (phi1 phi2: Pattern x):
212
222
$ (exists x (phi1 \/ phi2)) <-> ((exists x phi1) \/ (exists x phi2)) $ =
213
223
'(ibii or_exists_forwards or_exists_reverse);
214
224
215
- theorem and_exists_disjoint_forwards {x: EVar} (phi1: Pattern) (phi2: Pattern x ):
225
+ theorem and_exists_fresh_forwards {x: EVar} (phi1 phi2 : Pattern x ) (freshness_phi1: $ _eFresh x phi1 $ ):
216
226
$ (exists x (phi1 /\ phi2)) -> (phi1 /\ exists x phi2) $ =
217
227
'(iand
218
- (rsyl (exists_framing anl) (exists_generalization_disjoint id))
228
+ (rsyl (exists_framing anl) (exists_generalization freshness_phi1 id))
219
229
(exists_framing anr));
230
+ theorem and_exists_disjoint_forwards {x: EVar} (phi1: Pattern) (phi2: Pattern x):
231
+ $ (exists x (phi1 /\ phi2)) -> (phi1 /\ exists x phi2) $ =
232
+ '(and_exists_fresh_forwards eFresh_disjoint);
233
+ theorem and_exists_fresh_reverse {x: EVar} (phi1 phi2: Pattern x) (freshness_phi1: $ _eFresh x phi1 $):
234
+ $ (phi1 /\ exists x phi2) -> (exists x (phi1 /\ phi2)) $ =
235
+ '(impcom @ syl (anr @ imp_exists_fresh freshness_phi1) (exists_framing ian2));
220
236
theorem and_exists_disjoint_reverse {x: EVar} (phi1: Pattern) (phi2: Pattern x):
221
237
$ (phi1 /\ exists x phi2) -> (exists x (phi1 /\ phi2)) $ =
222
- '(impcom @ syl (anr imp_exists_disjoint) (exists_framing ian2));
238
+ '(and_exists_fresh_reverse eFresh_disjoint);
239
+ theorem and_exists_fresh {x: EVar} (phi1 phi2: Pattern x) (freshness_phi1: $ _eFresh x phi1 $):
240
+ $ (exists x (phi1 /\ phi2)) <-> (phi1 /\ exists x phi2) $ =
241
+ '(ibii (and_exists_fresh_forwards freshness_phi1) (and_exists_fresh_reverse freshness_phi1));
223
242
theorem and_exists_disjoint {x: EVar} (phi1: Pattern) (phi2: Pattern x):
224
243
$ (exists x (phi1 /\ phi2)) <-> (phi1 /\ exists x phi2) $ =
225
244
'(ibii and_exists_disjoint_forwards and_exists_disjoint_reverse);
0 commit comments