src/ZF/Constructible/Rec_Separation.thy
changeset 13429 2232810416fc
parent 13428 99e52e78eb65
child 13434 78b93a667c01
equal deleted inserted replaced
13428:99e52e78eb65 13429:2232810416fc
     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