src/HOL/Tools/BNF/bnf_util.ML
changeset 55945 e96383acecf9
parent 55856 bddaada24074
child 56218 1c3f1f2431f9
equal deleted inserted replaced
55944:7ab8f003fe41 55945:e96383acecf9
    92   val mk_converse: term -> term
    92   val mk_converse: term -> term
    93   val mk_conversep: term -> term
    93   val mk_conversep: term -> term
    94   val mk_cprod: term -> term -> term
    94   val mk_cprod: term -> term -> term
    95   val mk_csum: term -> term -> term
    95   val mk_csum: term -> term -> term
    96   val mk_dir_image: term -> term -> term
    96   val mk_dir_image: term -> term -> term
    97   val mk_fun_rel: term -> term -> term
    97   val mk_rel_fun: term -> term -> term
    98   val mk_image: term -> term
    98   val mk_image: term -> term
    99   val mk_in: term list -> term list -> typ -> term
    99   val mk_in: term list -> term list -> typ -> term
   100   val mk_leq: term -> term -> term
   100   val mk_leq: term -> term -> term
   101   val mk_ordLeq: term -> term -> term
   101   val mk_ordLeq: term -> term -> term
   102   val mk_rel_comp: term * term -> term
   102   val mk_rel_comp: term * term -> term
   436 
   436 
   437 fun mk_dir_image r f =
   437 fun mk_dir_image r f =
   438   let val (T, U) = dest_funT (fastype_of f);
   438   let val (T, U) = dest_funT (fastype_of f);
   439   in Const (@{const_name dir_image}, mk_relT (T, T) --> (T --> U) --> mk_relT (U, U)) $ r $ f end;
   439   in Const (@{const_name dir_image}, mk_relT (T, T) --> (T --> U) --> mk_relT (U, U)) $ r $ f end;
   440 
   440 
   441 fun mk_fun_rel R S =
   441 fun mk_rel_fun R S =
   442   let
   442   let
   443     val ((RA, RB), RT) = `dest_pred2T (fastype_of R);
   443     val ((RA, RB), RT) = `dest_pred2T (fastype_of R);
   444     val ((SA, SB), ST) = `dest_pred2T (fastype_of S);
   444     val ((SA, SB), ST) = `dest_pred2T (fastype_of S);
   445   in Const (@{const_name fun_rel}, RT --> ST --> mk_pred2T (RA --> SA) (RB --> SB)) $ R $ S end;
   445   in Const (@{const_name rel_fun}, RT --> ST --> mk_pred2T (RA --> SA) (RB --> SB)) $ R $ S end;
   446 
   446 
   447 (*FIXME: "x"?*)
   447 (*FIXME: "x"?*)
   448 (*(nth sets i) must be of type "T --> 'ai set"*)
   448 (*(nth sets i) must be of type "T --> 'ai set"*)
   449 fun mk_in As sets T =
   449 fun mk_in As sets T =
   450   let
   450   let