1 header{*Separation for Facts About Recursion*} |
1 |
|
2 header {*Separation for Facts About Recursion*} |
2 |
3 |
3 theory Rec_Separation = Separation + Datatype_absolute: |
4 theory Rec_Separation = Separation + Datatype_absolute: |
4 |
5 |
5 text{*This theory proves all instances needed for locales @{text |
6 text{*This theory proves all instances needed for locales @{text |
6 "M_trancl"}, @{text "M_wfrank"} and @{text "M_datatypes"}*} |
7 "M_trancl"}, @{text "M_wfrank"} and @{text "M_datatypes"}*} |
196 done |
197 done |
197 |
198 |
198 |
199 |
199 subsubsection{*Instantiating the locale @{text M_trancl}*} |
200 subsubsection{*Instantiating the locale @{text M_trancl}*} |
200 |
201 |
201 theorem M_trancl_axioms_L: "M_trancl_axioms(L)" |
202 theorem M_trancl_L: "PROP M_trancl(L)" |
|
203 apply (rule M_trancl.intro) |
|
204 apply (rule M_axioms.axioms [OF M_axioms_L])+ |
202 apply (rule M_trancl_axioms.intro) |
205 apply (rule M_trancl_axioms.intro) |
203 apply (assumption | rule |
206 apply (assumption | rule |
204 rtrancl_separation wellfounded_trancl_separation)+ |
207 rtrancl_separation wellfounded_trancl_separation)+ |
205 done |
|
206 |
|
207 theorem M_trancl_L: "PROP M_trancl(L)" |
|
208 apply (rule M_trancl.intro) |
|
209 apply (rule M_triv_axioms_L) |
|
210 apply (rule M_axioms_axioms_L) |
|
211 apply (rule M_trancl_axioms_L) |
|
212 done |
208 done |
213 |
209 |
214 lemmas iterates_abs = M_trancl.iterates_abs [OF M_trancl_L] |
210 lemmas iterates_abs = M_trancl.iterates_abs [OF M_trancl_L] |
215 and rtran_closure_rtrancl = M_trancl.rtran_closure_rtrancl [OF M_trancl_L] |
211 and rtran_closure_rtrancl = M_trancl.rtran_closure_rtrancl [OF M_trancl_L] |
216 and rtrancl_closed = M_trancl.rtrancl_closed [OF M_trancl_L] |
212 and rtrancl_closed = M_trancl.rtrancl_closed [OF M_trancl_L] |
436 done |
432 done |
437 |
433 |
438 |
434 |
439 subsubsection{*Instantiating the locale @{text M_wfrank}*} |
435 subsubsection{*Instantiating the locale @{text M_wfrank}*} |
440 |
436 |
441 theorem M_wfrank_axioms_L: "M_wfrank_axioms(L)" |
|
442 apply (rule M_wfrank_axioms.intro) |
|
443 apply (assumption | rule |
|
444 wfrank_separation wfrank_strong_replacement Ord_wfrank_separation)+ |
|
445 done |
|
446 |
|
447 theorem M_wfrank_L: "PROP M_wfrank(L)" |
437 theorem M_wfrank_L: "PROP M_wfrank(L)" |
448 apply (rule M_wfrank.intro) |
438 apply (rule M_wfrank.intro) |
449 apply (rule M_triv_axioms_L) |
439 apply (rule M_trancl.axioms [OF M_trancl_L])+ |
450 apply (rule M_axioms_axioms_L) |
440 apply (rule M_wfrank_axioms.intro) |
451 apply (rule M_trancl_axioms_L) |
441 apply (assumption | rule |
452 apply (rule M_wfrank_axioms_L) |
442 wfrank_separation wfrank_strong_replacement Ord_wfrank_separation)+ |
453 done |
443 done |
454 |
444 |
455 lemmas iterates_closed = M_wfrank.iterates_closed [OF M_wfrank_L] |
445 lemmas iterates_closed = M_wfrank.iterates_closed [OF M_wfrank_L] |
456 and exists_wfrank = M_wfrank.exists_wfrank [OF M_wfrank_L] |
446 and exists_wfrank = M_wfrank.exists_wfrank [OF M_wfrank_L] |
457 and M_wellfoundedrank = M_wfrank.M_wellfoundedrank [OF M_wfrank_L] |
447 and M_wellfoundedrank = M_wfrank.M_wellfoundedrank [OF M_wfrank_L] |
1222 |
1212 |
1223 |
1213 |
1224 |
1214 |
1225 subsubsection{*Instantiating the locale @{text M_datatypes}*} |
1215 subsubsection{*Instantiating the locale @{text M_datatypes}*} |
1226 |
1216 |
1227 theorem M_datatypes_axioms_L: "M_datatypes_axioms(L)" |
1217 theorem M_datatypes_L: "PROP M_datatypes(L)" |
|
1218 apply (rule M_datatypes.intro) |
|
1219 apply (rule M_wfrank.axioms [OF M_wfrank_L])+ |
1228 apply (rule M_datatypes_axioms.intro) |
1220 apply (rule M_datatypes_axioms.intro) |
1229 apply (assumption | rule |
1221 apply (assumption | rule |
1230 list_replacement1 list_replacement2 |
1222 list_replacement1 list_replacement2 |
1231 formula_replacement1 formula_replacement2 |
1223 formula_replacement1 formula_replacement2 |
1232 nth_replacement)+ |
1224 nth_replacement)+ |
1233 done |
|
1234 |
|
1235 theorem M_datatypes_L: "PROP M_datatypes(L)" |
|
1236 apply (rule M_datatypes.intro) |
|
1237 apply (rule M_triv_axioms_L) |
|
1238 apply (rule M_axioms_axioms_L) |
|
1239 apply (rule M_trancl_axioms_L) |
|
1240 apply (rule M_wfrank_axioms_L) |
|
1241 apply (rule M_datatypes_axioms_L) |
|
1242 done |
1225 done |
1243 |
1226 |
1244 lemmas list_closed = M_datatypes.list_closed [OF M_datatypes_L] |
1227 lemmas list_closed = M_datatypes.list_closed [OF M_datatypes_L] |
1245 and formula_closed = M_datatypes.formula_closed [OF M_datatypes_L] |
1228 and formula_closed = M_datatypes.formula_closed [OF M_datatypes_L] |
1246 and list_abs = M_datatypes.list_abs [OF M_datatypes_L] |
1229 and list_abs = M_datatypes.list_abs [OF M_datatypes_L] |
1336 done |
1319 done |
1337 |
1320 |
1338 |
1321 |
1339 subsubsection{*Instantiating the locale @{text M_eclose}*} |
1322 subsubsection{*Instantiating the locale @{text M_eclose}*} |
1340 |
1323 |
1341 theorem M_eclose_axioms_L: "M_eclose_axioms(L)" |
1324 theorem M_eclose_L: "PROP M_eclose(L)" |
|
1325 apply (rule M_eclose.intro) |
|
1326 apply (rule M_datatypes.axioms [OF M_datatypes_L])+ |
1342 apply (rule M_eclose_axioms.intro) |
1327 apply (rule M_eclose_axioms.intro) |
1343 apply (assumption | rule eclose_replacement1 eclose_replacement2)+ |
1328 apply (assumption | rule eclose_replacement1 eclose_replacement2)+ |
1344 done |
1329 done |
1345 |
1330 |
1346 theorem M_eclose_L: "PROP M_eclose(L)" |
|
1347 apply (rule M_eclose.intro) |
|
1348 apply (rule M_triv_axioms_L) |
|
1349 apply (rule M_axioms_axioms_L) |
|
1350 apply (rule M_trancl_axioms_L) |
|
1351 apply (rule M_wfrank_axioms_L) |
|
1352 apply (rule M_datatypes_axioms_L) |
|
1353 apply (rule M_eclose_axioms_L) |
|
1354 done |
|
1355 |
|
1356 lemmas eclose_closed [intro, simp] = M_eclose.eclose_closed [OF M_eclose_L] |
1331 lemmas eclose_closed [intro, simp] = M_eclose.eclose_closed [OF M_eclose_L] |
1357 and eclose_abs [intro, simp] = M_eclose.eclose_abs [OF M_eclose_L] |
1332 and eclose_abs [intro, simp] = M_eclose.eclose_abs [OF M_eclose_L] |
1358 |
1333 |
1359 end |
1334 end |