-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathecTyping.mli
More file actions
310 lines (252 loc) · 9.46 KB
/
ecTyping.mli
File metadata and controls
310 lines (252 loc) · 9.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
(* -------------------------------------------------------------------- *)
open EcUtils
open EcSymbols
open EcAst
open EcEnv
open EcDecl
open EcPath
open EcLocation
open EcParsetree
open EcTypes
open EcModules
open EcFol
open EcMatching.Position
(* -------------------------------------------------------------------- *)
type wp = EcEnv.env -> EcMemory.memenv -> stmt -> EcFol.form -> EcFol.form option
val wp : wp option ref
(* -------------------------------------------------------------------- *)
type opmatch = [
| `Op of EcPath.path * EcTypes.ty list
| `Lc of EcIdent.t
| `Var of EcTypes.prog_var
| `Proj of EcTypes.prog_var * EcMemory.proj_arg
]
type 'a mismatch_sets = [`Eq of 'a * 'a | `Sub of 'a ]
type 'a suboreq = [`Eq of 'a | `Sub of 'a ]
type mismatch_funsig =
| MF_targs of ty * ty (* expected, got *)
| MF_tres of ty * ty (* expected, got *)
| MF_restr of EcEnv.env * Sx.t mismatch_sets
type restr_failure = Sx.t * Sm.t
type restr_eq_failure = Sx.t * Sm.t * Sx.t * Sm.t
type mismatch_restr = [
| `Sub of restr_failure (* Should not be allowed *)
| `RevSub of restr_failure option (* Should be allowed. None is everybody *)
| `Eq of restr_eq_failure (* Should be equal *)
| `FunCanCallUnboundedOracle of symbol * EcPath.xpath
]
type restriction_who =
| RW_mod of EcPath.mpath
| RW_fun of EcPath.xpath
type restriction_error = restriction_who * [
| `Sub of restr_failure (* Should not be allowed *)
| `RevSub of restr_failure option (* Should be allowed *)
]
exception RestrictionError of EcEnv.env * restriction_error
type tymod_cnv_failure =
| E_TyModCnv_ParamCountMismatch
| E_TyModCnv_ParamTypeMismatch of EcIdent.t
| E_TyModCnv_MissingComp of symbol
| E_TyModCnv_MismatchRestr of symbol * mismatch_restr
| E_TyModCnv_MismatchFunSig of symbol * mismatch_funsig
| E_TyModCnv_SubTypeArg of
EcIdent.t * module_type * module_type * tymod_cnv_failure
type modapp_error =
| MAE_WrongArgCount of int * int (* expected, got *)
| MAE_InvalidArgType of EcPath.mpath * tymod_cnv_failure
| MAE_AccesSubModFunctor
type modtyp_error =
| MTE_IncludeFunctor
| MTE_InnerFunctor
| MTE_DupProcName of symbol
type modsig_error =
| MTS_DupProcName of symbol
| MTS_DupArgName of symbol * symbol
type modupd_error =
| MUE_Functor
| MUE_AbstractFun
| MUE_AbstractModule
| MUE_InvalidFun
| MUE_InvalidCodePos
| MUE_InvalidTargetCond
type funapp_error =
| FAE_WrongArgCount
type mem_error =
| MAE_IsConcrete
type fxerror =
| FXE_EmptyMatch
| FXE_MatchParamsMixed
| FXE_MatchParamsDup
| FXE_MatchParamsUnk
| FXE_MatchNonLinear
| FXE_MatchDupBranches
| FXE_MatchPartial
| FXE_CtorUnk
| FXE_CtorAmbiguous
| FXE_CtorInvalidArity of (symbol * int * int)
| FXE_SynCheckFailure
type filter_error =
| FE_InvalidIndex of int
| FE_NoMatch
type tyerror =
| UniVarNotAllowed
| FreeTypeVariables
| TypeVarNotAllowed
| OnlyMonoTypeAllowed of symbol option
| NoConcreteAnonParams
| UnboundTypeParameter of symbol
| UnknownTypeName of qsymbol
| UnknownTypeClass of qsymbol
| UnknownRecFieldName of qsymbol
| UnknownInstrMetaVar of symbol
| UnknownMetaVar of symbol
| UnknownProgVar of qsymbol * EcMemory.memory
| DuplicatedRecFieldName of symbol
| MissingRecField of symbol
| MixingRecFields of EcPath.path tuple2
| UnknownProj of qsymbol
| AmbiguousProj of qsymbol
| AmbiguousProji of int * ty
| InvalidTypeAppl of qsymbol * int * int
| DuplicatedTyVar
| DuplicatedLocal of symbol
| DuplicatedField of symbol
| NonLinearPattern
| LvNonLinear
| NonUnitFunWithoutReturn
| TypeMismatch of (ty * ty) * (ty * ty)
| TypeClassMismatch
| TypeModMismatch of mpath * module_type * tymod_cnv_failure
| NotAFunction
| NotAnInductive
| AbbrevLowArgs
| UnknownVarOrOp of qsymbol * ty list
| MultipleOpMatch of qsymbol * ty list * (opmatch * EcUnify.unienv) list
| UnknownModName of qsymbol
| UnknownTyModName of qsymbol
| UnknownFunName of qsymbol
| UnknownModVar of qsymbol
| UnknownMemName of symbol
| InvalidFunAppl of funapp_error
| InvalidModAppl of modapp_error
| InvalidModType of modtyp_error
| InvalidModSig of modsig_error
| InvalidModUpdate of modupd_error
| InvalidMem of symbol * mem_error
| InvalidMatch of fxerror
| InvalidFilter of filter_error
| FunNotInModParam of qsymbol
| FunNotInSignature of symbol
| InvalidVar
| NoActiveMemory
| PatternNotAllowed
| MemNotAllowed
| UnknownScope of qsymbol
| NoWP
| FilterMatchFailure
| MissingMemType
| ModuleNotAbstract of symbol
| ProcedureUnbounded of symbol * symbol
| LvMapOnNonAssign
| NoDefaultMemRestr
| ProcAssign of qsymbol
| PositiveShouldBeBeforeNegative
| NotAnExpression of [`Unknown | `LL | `Pr | `Logic | `Glob | `MemSel]
exception TymodCnvFailure of tymod_cnv_failure
exception TyError of EcLocation.t * env * tyerror
val tyerror : EcLocation.t -> env -> tyerror -> 'a
(* -------------------------------------------------------------------- *)
val unify_or_fail : env -> EcUnify.unienv -> EcLocation.t -> expct:ty -> ty -> unit
(* -------------------------------------------------------------------- *)
type typolicy
val tp_tydecl : typolicy
val tp_relax : typolicy
val tp_nothing : typolicy
(* -------------------------------------------------------------------- *)
val transtyvars:
env -> (EcLocation.t * ptyparams option) -> EcUnify.unienv
(* -------------------------------------------------------------------- *)
val transty : typolicy -> env -> EcUnify.unienv -> pty -> ty
val transtys :
typolicy -> env -> EcUnify.unienv -> pty list -> ty list
val transtvi : env -> EcUnify.unienv -> ptyannot -> EcUnify.tvar_inst
(* -------------------------------------------------------------------- *)
val trans_binding : env -> EcUnify.unienv -> ptybindings ->
env * (EcIdent.t * EcTypes.ty) list
val trans_gbinding : env -> EcUnify.unienv -> pgtybindings ->
env * (EcIdent.t * EcFol.gty) list
(* -------------------------------------------------------------------- *)
val transexp :
env -> [`InProc|`InOp] -> EcUnify.unienv -> pexpr -> expr * ty
val transexpcast :
env -> [`InProc|`InOp] -> EcUnify.unienv -> ty -> pexpr -> expr
val transexpcast_opt :
env -> [`InProc|`InOp] -> EcUnify.unienv -> ty option -> pexpr -> expr
(* -------------------------------------------------------------------- *)
val trans_pv : EcEnv.env -> pqsymbol -> prog_var * ty
(* -------------------------------------------------------------------- *)
type ismap = (instr list) EcMaps.Mstr.t
val transstmt : ?map:ismap -> env -> EcUnify.unienv -> pstmt -> stmt
(* -------------------------------------------------------------------- *)
val trans_codepos_range : ?memory:EcMemory.memory -> env -> pcodepos_range -> codepos_range
val trans_codepos1 : ?memory:EcMemory.memory -> env -> pcodepos1 -> codepos1
val trans_codepos : ?memory:EcMemory.memory -> env -> pcodepos -> codepos
val trans_dcodepos1 : ?memory:EcMemory.memory -> env -> pcodepos1 doption -> codepos1 doption
(* -------------------------------------------------------------------- *)
type ptnmap = ty EcIdent.Mid.t ref
type metavs = EcFol.form Msym.t
val transmem : env -> EcSymbols.symbol located -> EcIdent.t
val trans_form_opt :
env -> ?mv:metavs -> EcUnify.unienv -> pformula -> ty option -> EcFol.form
val trans_form :
env -> ?mv:metavs -> EcUnify.unienv -> pformula -> ty -> EcFol.form
val trans_prop :
env -> ?mv:metavs -> EcUnify.unienv -> pformula -> EcFol.form
val trans_pattern : env -> ptnmap -> EcUnify.unienv -> pformula -> EcFol.form
(* -------------------------------------------------------------------- *)
val trans_memtype :
env -> EcUnify.unienv -> pmemtype -> EcMemory.memtype
(* -------------------------------------------------------------------- *)
val transcall :
('a located -> 'b * ty)
-> EcEnv.env
-> EcUnify.unienv
-> EcLocation.t
-> EcModules.funsig
-> 'a located list
-> 'b list * ty
(* -------------------------------------------------------------------- *)
val trans_args :
EcEnv.env
-> EcUnify.unienv
-> EcLocation.t
-> EcModules.funsig
-> pexpr list
-> expr list * ty
(* -------------------------------------------------------------------- *)
val trans_restr_for_modty :
env -> module_type -> pmod_restr option -> mty_mr
val transmodsig : env -> pinterface -> top_module_sig
val transmodtype : env -> pmodule_type -> module_type * module_sig
val transmod : attop:bool -> env -> pmodule_def -> module_expr
val trans_topmsymbol : env -> pmsymbol located -> mpath
val trans_msymbol : env -> pmsymbol located -> mpath * module_smpl_sig
val trans_gamepath : env -> pgamepath -> xpath
val trans_oracle : env -> psymbol * psymbol -> xpath
val trans_restr_mem : env -> pmod_restr_mem -> mod_restr
val trans_args :
EcEnv.env
-> EcUnify.unienv
-> EcLocation.t
-> EcModules.funsig
-> pexpr list
-> expr list * EcTypes.ty
(* -------------------------------------------------------------------- *)
(* This only checks the memory restrictions. *)
val check_mem_restr_fun :
env -> xpath -> mod_restr -> unit
val check_modtype :
env -> mpath -> module_sig -> mty_mr -> unit
(* -------------------------------------------------------------------- *)
val get_ring : (ty_params * ty) -> env -> EcDecl.ring option
val get_field : (ty_params * ty) -> env -> EcDecl.field option