src/HOLCF/Tools/Domain/domain_isomorphism.ML
changeset 35021 c839a4c670c6
parent 34149 a0efb4754cb7
child 35351 7425aece4ee3
child 35467 561d8e98d9d3
equal deleted inserted replaced
35020:862a20ffa8e2 35021:c839a4c670c6
   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