166 fun make_casedist_prem T (cname, cargs) = |
166 fun make_casedist_prem T (cname, cargs) = |
167 let |
167 let |
168 val Ts = map (typ_of_dtyp descr sorts) cargs; |
168 val Ts = map (typ_of_dtyp descr sorts) cargs; |
169 val frees = Name.variant_list ["P", "y"] (DatatypeProp.make_tnames Ts) ~~ Ts; |
169 val frees = Name.variant_list ["P", "y"] (DatatypeProp.make_tnames Ts) ~~ Ts; |
170 val free_ts = map Free frees; |
170 val free_ts = map Free frees; |
171 val r = Free ("r" ^ NameSpace.base cname, Ts ---> rT) |
171 val r = Free ("r" ^ NameSpace.base_name cname, Ts ---> rT) |
172 in (r, list_all_free (frees, Logic.mk_implies (HOLogic.mk_Trueprop |
172 in (r, list_all_free (frees, Logic.mk_implies (HOLogic.mk_Trueprop |
173 (HOLogic.mk_eq (Free ("y", T), list_comb (Const (cname, Ts ---> T), free_ts))), |
173 (HOLogic.mk_eq (Free ("y", T), list_comb (Const (cname, Ts ---> T), free_ts))), |
174 HOLogic.mk_Trueprop (Free ("P", rT --> HOLogic.boolT) $ |
174 HOLogic.mk_Trueprop (Free ("P", rT --> HOLogic.boolT) $ |
175 list_comb (r, free_ts))))) |
175 list_comb (r, free_ts))))) |
176 end; |
176 end; |