Quot/quotient_def.ML
changeset 830 89d772dae4d4
parent 804 ba7e81531c6d
child 833 129caba33c03
equal deleted inserted replaced
829:42b90994ac77 830:89d772dae4d4
    38 
    38 
    39 fun quotient_def mx attr lhs rhs lthy =
    39 fun quotient_def mx attr lhs rhs lthy =
    40 let
    40 let
    41   val Free (lhs_str, lhs_ty) = lhs; (* FIXME/TODO: this throws an excpt., if the const is already def.*)
    41   val Free (lhs_str, lhs_ty) = lhs; (* FIXME/TODO: this throws an excpt., if the const is already def.*)
    42   val qconst_bname = Binding.name lhs_str;
    42   val qconst_bname = Binding.name lhs_str;
    43   val absrep_trm = absrep_fun_chk absF lthy (fastype_of rhs, lhs_ty) $ rhs
    43   val absrep_trm = Syntax.check_term lthy (absrep_fun absF lthy (fastype_of rhs, lhs_ty) $ rhs)
    44   val prop = Logic.mk_equals (lhs, absrep_trm)
    44   val prop = Logic.mk_equals (lhs, absrep_trm)
    45   val (_, prop') = LocalDefs.cert_def lthy prop
    45   val (_, prop') = LocalDefs.cert_def lthy prop
    46   val (_, newrhs) = Primitive_Defs.abs_def prop'
    46   val (_, newrhs) = Primitive_Defs.abs_def prop'
    47 
    47 
    48   val ((trm, thm), lthy') = define qconst_bname mx attr newrhs lthy
    48   val ((trm, thm), lthy') = define qconst_bname mx attr newrhs lthy