coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: CREGUT Pierre IMT/OLN <pierre.cregut AT orange.com>
- To: coq-club AT inria.fr
- Subject: [Coq-Club] Universe scope
- Date: Thu, 23 Apr 2020 10:59:19 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=pierre.cregut AT orange.com; spf=Fail smtp.mailfrom=pierre.cregut AT orange.com; spf=None smtp.helo=postmaster AT p-mail-ext.rd.orange.com
- Ironport-phdr: 9a23:hDEg6BNg3jfz2aNLMB0l6mtUPXoX/o7sNwtQ0KIMzox0LfTyrarrMEGX3/hxlliBBdydt6sZzbaH+Pm4EUU7or+5+EgYd5JNUxJXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCe9bL9oIxi7qQrdutQKjYB/Nqs/1xzFr2dSde9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLYTQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVRnlgzoFOTEk6mHaktJ+gqJGrhyiqRJwzYHbb52aOvdlYqPQfskXSXZdUstfVSFMBJ63YYsVD+oGOOZVt5fwqUcBoxW/CwaiGv7kxCVJhnDox606yfouGhzF0gInAdwCq23aotPtOqwPVu211KjIwivZb/NMxzjx8pTHcgo/rvGDQLJwbdHcyU41FwzfiFWQppLqMymJ2eQKtmiW9uxtXv+hhW4grgF+uDmvxsE0h4bUnI0V1krL9Tl5wYYtO9K4U1R3Yca+EJtXqi6XMZZ9TMA6Q2xwpSo3y6AKtYSmcCQWyZkr3QPTZ+aDfoWO/xntTvyeIS1ii3JgYL+/hwi98UynyuDkTsm4yVNKoTBEktnIr3wCyRPS6tSdRvtn40itwzGP1xrJ5eFCLkA7i7DXJIImwr41jpYTsELDETHqmEjukaObd1go9vK15+j7Y7jqvIKQO5Vwhw3mN6QhgM2/AeA2MggUWGib/Pyx1KXi/ULnWrVKlOM5nrPFv5DAO8sbqbO5AxNO34Yk8RawFTGm0NsGknUdMF1FfxeHg5DzO17SOPD4Eeu/g1O0nTh3wPDGJ6TtDYnJLnjei7jsZq196k5ZyAor199T/ZNUCrcbIPLyQED9rtLYDgVqezCzlu3gEZB20p4UcWOJGK6Qdq3I4nGS4ed6CNOhS7Ip8A78JuI/6rbPqEN+vns7Nf2x3JYNcn3+Fe5rLFiFSX32i9EOHCEBuQ9oH7+is0GLTTMGPyX6ZKk7/DxuUNv7X7eGfZikhfm65An+HpBSYToYWEjJFH7pc8CJS+tKci7UJdVolDMJE7OmTt15jED8hErB07Nia9Hs1GgdvJPn2sJy4rSJxxYo/Dp7AoKW1GTfEzgozFNNfCc/2eVEmWI40k2KiPIqhOZRE9NeofhOV1ViOA==
It is probably belonging to the FAQ level questions but I have not figured out where it is explained.
I am trying to create a very simple coq term in ml and make a top level definition :
Definition foo := fun A:Type => prod A A.
I am using the Simple_declare.declare of plugin_tutorials/tuto1 (version 8.11)
let foo () =
let env = Global.env() in
let sigma = Evd.from_env env in
let qprod = Libnames.qualid_of_string "Coq.Init.Datatypes.prod" in
let sigma, sort = Evd.new_sort_variable Evd.univ_flexible sigma in
let ty = EConstr.mkSort sort in
let bd = Context.nameR (Names.Id.of_string "A") in
let env = EConstr.push_rel (Context.Rel.Declaration.LocalAssum(bd,ty)) env in
let sigma, prod = EConstr.fresh_global env sigma (Constrintern.intern_reference qprod) in
let def = EConstr.mkLambda(bd, ty, EConstr.mkApp(prod, [|EConstr.mkRel 1; EConstr.mkRel 1|])) in
Simple_declare.declare_definition ~poly:true (Names.Id.of_string "foo") sigma def
Clearly I am missing something A is of type Type@{Top.1}and it cannot be unified with Type@{prod.u0} from prod. How can I have a new universe scope in a few lines of code (for the standard 8.11 version, it seems the API is changing quickly). Is it in this part that I am missing something or in the use of UState.default_univ_decl in declare_definition ?
Best regards,
Pierre Crégut
simple_declare.ml:
let edeclare ?hook ~name ~poly ~scope ~kind ~opaque sigma udecl body tyopt imps =
let sigma, ce = DeclareDef.prepare_definition ~allow_evars:false
~opaque ~poly sigma udecl ~types:tyopt ~body in
let uctx = Evd.evar_universe_context sigma in
let ubinders = Evd.universe_binders sigma in
let hook_data = Option.map (fun hook -> hook, uctx, []) hook in
DeclareDef.declare_definition ~name ~scope ~kind ubinders ce imps ?hook_data
let declare_definition ~poly name sigma body =
let udecl = UState.default_univ_decl in
edeclare ~name ~poly ~scope:(DeclareDef.Global Declare.ImportDefaultBehavior)
~kind:Decls.(IsDefinition Definition) ~opaque:false sigma udecl body None []
- [Coq-Club] Universe scope, CREGUT Pierre IMT/OLN, 04/23/2020
- Re: [Coq-Club] Universe scope, CREGUT Pierre IMT/OLN, 04/23/2020
Archive powered by MHonArc 2.6.18.