equal
deleted
inserted
replaced
249 in (n, thmL) :: mk_unfold_thms ns thmR end; |
249 in (n, thmL) :: mk_unfold_thms ns thmR end; |
250 val unfold_binds = map (Binding.suffix_name "_unfold") binds; |
250 val unfold_binds = map (Binding.suffix_name "_unfold") binds; |
251 |
251 |
252 (* register unfold theorems *) |
252 (* register unfold theorems *) |
253 val (unfold_thms, thy) = |
253 val (unfold_thms, thy) = |
254 (PureThy.add_thms o map (Thm.no_attributes o apsnd Drule.standard)) |
254 (PureThy.add_thms o map (Thm.no_attributes o apsnd Drule.export_without_context)) |
255 (mk_unfold_thms unfold_binds tuple_unfold_thm) thy; |
255 (mk_unfold_thms unfold_binds tuple_unfold_thm) thy; |
256 in |
256 in |
257 ((proj_thms, unfold_thms), thy) |
257 ((proj_thms, unfold_thms), thy) |
258 end; |
258 end; |
259 |
259 |
444 |>> ListPair.unzip; |
444 |>> ListPair.unzip; |
445 |
445 |
446 (* prove isomorphism and isodefl rules *) |
446 (* prove isomorphism and isodefl rules *) |
447 fun mk_iso_thms ((tbind, REP_eq), (rep_def, abs_def)) thy = |
447 fun mk_iso_thms ((tbind, REP_eq), (rep_def, abs_def)) thy = |
448 let |
448 let |
449 fun make thm = Drule.standard (thm OF [REP_eq, abs_def, rep_def]); |
449 fun make thm = Drule.export_without_context (thm OF [REP_eq, abs_def, rep_def]); |
450 val rep_iso_thm = make @{thm domain_rep_iso}; |
450 val rep_iso_thm = make @{thm domain_rep_iso}; |
451 val abs_iso_thm = make @{thm domain_abs_iso}; |
451 val abs_iso_thm = make @{thm domain_abs_iso}; |
452 val isodefl_thm = make @{thm isodefl_abs_rep}; |
452 val isodefl_thm = make @{thm isodefl_abs_rep}; |
453 val rep_iso_bind = Binding.name "rep_iso"; |
453 val rep_iso_bind = Binding.name "rep_iso"; |
454 val abs_iso_bind = Binding.name "abs_iso"; |
454 val abs_iso_bind = Binding.name "abs_iso"; |
543 | conjuncts (n::ns) thm = let |
543 | conjuncts (n::ns) thm = let |
544 val thmL = thm RS @{thm conjunct1}; |
544 val thmL = thm RS @{thm conjunct1}; |
545 val thmR = thm RS @{thm conjunct2}; |
545 val thmR = thm RS @{thm conjunct2}; |
546 in (n, thmL):: conjuncts ns thmR end; |
546 in (n, thmL):: conjuncts ns thmR end; |
547 val (isodefl_thms, thy) = thy |> |
547 val (isodefl_thms, thy) = thy |> |
548 (PureThy.add_thms o map (Thm.no_attributes o apsnd Drule.standard)) |
548 (PureThy.add_thms o map (Thm.no_attributes o apsnd Drule.export_without_context)) |
549 (conjuncts isodefl_binds isodefl_thm); |
549 (conjuncts isodefl_binds isodefl_thm); |
550 val thy = IsodeflData.map (fold Thm.add_thm isodefl_thms) thy; |
550 val thy = IsodeflData.map (fold Thm.add_thm isodefl_thms) thy; |
551 |
551 |
552 (* prove map_ID theorems *) |
552 (* prove map_ID theorems *) |
553 fun prove_map_ID_thm |
553 fun prove_map_ID_thm |