src/HOL/Codatatype/Tools/bnf_fp_util.ML
changeset 49275 ce87d6a901eb
parent 49264 9059e0dbdbc1
child 49308 6190b701e4f4
equal deleted inserted replaced
49274:ddd606ec45b9 49275:ce87d6a901eb
    99   val dest_sumTN: int -> typ -> typ list
    99   val dest_sumTN: int -> typ -> typ list
   100   val dest_sumTN_balanced: int -> typ -> typ list
   100   val dest_sumTN_balanced: int -> typ -> typ list
   101   val dest_tupleT: int -> typ -> typ list
   101   val dest_tupleT: int -> typ -> typ list
   102 
   102 
   103   val mk_Field: term -> term
   103   val mk_Field: term -> term
       
   104   val mk_If: term -> term -> term -> term
   104   val mk_union: term * term -> term
   105   val mk_union: term * term -> term
   105 
   106 
   106   val mk_sumEN: int -> thm
   107   val mk_sumEN: int -> thm
   107   val mk_sumEN_balanced: int -> thm
   108   val mk_sumEN_balanced: int -> thm
   108   val mk_sum_casesN: int -> int -> thm
   109   val mk_sum_casesN: int -> int -> thm
   256   end;
   257   end;
   257 
   258 
   258 val mk_sum_caseN = Library.foldr1 mk_sum_case;
   259 val mk_sum_caseN = Library.foldr1 mk_sum_case;
   259 val mk_sum_caseN_balanced = Balanced_Tree.make mk_sum_case;
   260 val mk_sum_caseN_balanced = Balanced_Tree.make mk_sum_case;
   260 
   261 
       
   262 fun mk_If p t f =
       
   263   let val T = fastype_of t;
       
   264   in Const (@{const_name If}, HOLogic.boolT --> T --> T --> T) $ p $ t $ f end;
       
   265 
   261 fun mk_Field r =
   266 fun mk_Field r =
   262   let val T = fst (dest_relT (fastype_of r));
   267   let val T = fst (dest_relT (fastype_of r));
   263   in Const (@{const_name Field}, mk_relT (T, T) --> HOLogic.mk_setT T) $ r end;
   268   in Const (@{const_name Field}, mk_relT (T, T) --> HOLogic.mk_setT T) $ r end;
   264 
   269 
   265 val mk_union = HOLogic.mk_binop @{const_name sup};
   270 val mk_union = HOLogic.mk_binop @{const_name sup};