123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143(************************************************************************)(* * The Coq Proof Assistant / The Coq Development Team *)(* v * Copyright INRIA, CNRS and contributors *)(* <O___,, * (see version control and CREDITS file for authors & dates) *)(* \VV/ **************************************************************)(* // * This file is distributed under the terms of the *)(* * GNU Lesser General Public License Version 2.1 *)(* * (see LICENSE file for the text of the license) *)(************************************************************************)(** Untyped intermediate terms *)(** [glob_constr] comes after [constr_expr] and before [constr].
Resolution of names, insertion of implicit arguments placeholder,
and notations are done, but coercions, inference of implicit
arguments and pattern-matching compilation are not. *)openNamestypeexistential_name=Id.t(** Sorts *)typeglob_sort_name=|GSProp(** representation of [SProp] literal *)|GProp(** representation of [Prop] level *)|GSet(** representation of [Set] level *)|GUnivofUniv.Level.t|GLocalUnivoflident(** Locally bound universes (may also be nonstrict declaration) *)|GRawUnivofUniv.Level.t(** Hack for funind, DO NOT USE
Note that producing the similar Constrexpr.CRawType for printing
is OK, just don't try to reinterp it. *)type'aglob_sort_gen=|UAnonymousof{rigid:bool}(** not rigid = unifiable by minimization *)|UNamedof'a(** levels, occurring in universe instances *)typeglob_level=glob_sort_nameglob_sort_gen(** sort expressions *)typeglob_sort=(glob_sort_name*int)listglob_sort_gentypeglob_constraint=glob_sort_name*Univ.constraint_type*glob_sort_nametypeglob_recarg=intoptionandglob_fix_kind=|GFixof(glob_recargarray*int)|GCoFixofint(** Casts *)type'acast_type=|CastConvof'a|CastVMof'a|CastNativeof'a(** The kind of patterns that occurs in "match ... with ... end"
locs here refers to the ident's location, not whole pat *)type'acases_pattern_r=|PatVarofName.t|PatCstrofconstructor*'acases_pattern_glist*Name.t(** [PatCstr(p,C,l,x)] = "|'C' 'l' as 'x'" *)and'acases_pattern_g=('acases_pattern_r,'a)DAst.ttypecases_pattern=[`any]cases_pattern_gtypebinding_kind=Explicit|MaxImplicit|NonMaxImplicit(** Representation of an internalized (or in other words globalized) term. *)type'aglob_constr_r=|GRefofGlobRef.t*glob_levellistoption(** An identifier that represents a reference to an object defined
either in the (global) environment or in the (local) context. *)|GVarofId.t(** An identifier that cannot be regarded as "GRef".
Bound variables are typically represented this way. *)|GEvarofexistential_nameCAst.t*(lident*'aglob_constr_g)list|GPatVarofEvar_kinds.matching_var_kind(** Used for patterns only *)|GAppof'aglob_constr_g*'aglob_constr_glist|GLambdaofName.t*binding_kind*'aglob_constr_g*'aglob_constr_g|GProdofName.t*binding_kind*'aglob_constr_g*'aglob_constr_g|GLetInofName.t*'aglob_constr_g*'aglob_constr_goption*'aglob_constr_g|GCasesofConstr.case_style*'aglob_constr_goption*'atomatch_tuples_g*'acases_clauses_g(** [GCases(style,r,tur,cc)] = "match 'tur' return 'r' with 'cc'" (in [MatchStyle]) *)|GLetTupleofName.tlist*(Name.t*'aglob_constr_goption)*'aglob_constr_g*'aglob_constr_g|GIfof'aglob_constr_g*(Name.t*'aglob_constr_goption)*'aglob_constr_g*'aglob_constr_g|GRecofglob_fix_kind*Id.tarray*'aglob_decl_glistarray*'aglob_constr_garray*'aglob_constr_garray|GSortofglob_sort|GHoleofEvar_kinds.t*Namegen.intro_pattern_naming_expr*Genarg.glob_generic_argumentoption|GCastof'aglob_constr_g*'aglob_constr_gcast_type|GIntofUint63.t|GFloatofFloat64.t|GArrayofglob_levellistoption*'aglob_constr_garray*'aglob_constr_g*'aglob_constr_gand'aglob_constr_g=('aglob_constr_r,'a)DAst.tand'aglob_decl_g=Name.t*binding_kind*'aglob_constr_goption*'aglob_constr_gand'apredicate_pattern_g=Name.t*(inductive*Name.tlist)CAst.toption(** [(na,id)] = "as 'na' in 'id'" where if [id] is [Some(l,I,k,args)]. *)and'atomatch_tuple_g=('aglob_constr_g*'apredicate_pattern_g)and'atomatch_tuples_g='atomatch_tuple_glistand'acases_clause_g=(Id.tlist*'acases_pattern_glist*'aglob_constr_g)CAst.t(** [(p,il,cl,t)] = "|'cl' => 't'". Precondition: the free variables
of [t] are members of [il]. *)and'acases_clauses_g='acases_clause_glisttypeglob_constr=[`any]glob_constr_gtypetomatch_tuple=[`any]tomatch_tuple_gtypetomatch_tuples=[`any]tomatch_tuples_gtypecases_clause=[`any]cases_clause_gtypecases_clauses=[`any]cases_clauses_gtypeglob_decl=[`any]glob_decl_gtypepredicate_pattern=[`any]predicate_pattern_gtypeany_glob_constr=AnyGlobConstr:'rglob_constr_g->any_glob_constrtype'adisjunctive_cases_clause_g=(Id.tlist*'acases_pattern_glistlist*'aglob_constr_g)CAst.ttype'adisjunctive_cases_clauses_g='adisjunctive_cases_clause_glisttype'acases_pattern_disjunction_g='acases_pattern_glisttypedisjunctive_cases_clause=[`any]disjunctive_cases_clause_gtypedisjunctive_cases_clauses=[`any]disjunctive_cases_clauses_gtypecases_pattern_disjunction=[`any]cases_pattern_disjunction_gtype'aextended_glob_local_binder_r=|GLocalAssumofName.t*binding_kind*'aglob_constr_g|GLocalDefofName.t*'aglob_constr_g*'aglob_constr_goption|GLocalPatternof('acases_pattern_disjunction_g*Id.tlist)*Id.t*binding_kind*'aglob_constr_gand'aextended_glob_local_binder_g=('aextended_glob_local_binder_r,'a)DAst.ttypeextended_glob_local_binder=[`any]extended_glob_local_binder_g