 22 Nov, 2013 1 commit


Andrei Paskevich authored

 20 Nov, 2013 2 commits


Andrei Paskevich authored

Andrei Paskevich authored

 19 Nov, 2013 11 commits


Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored
Needed when e1 is a recursive call whose effects are not yet known.

Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored
and sort them out in typing. Actually, there is no reason not to have local lemmas. Also, accept "let ghost (x,y) = ... in ...", which is the same as "let x,y = ghost ... in ...", which is the same as "match ghost ... with x,y > ... end".

Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored
Finally, it is simpler to treat "higherorder" applications in Dterm and Dexpr, since we can analyze the dtypes.

 11 Nov, 2013 3 commits


Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored
Instead, pass the optional vsymbol representing the result. Now formulasunderpatterns do not need to be typechecked separately, so the previous commit is partially reverted.

 10 Nov, 2013 4 commits


Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored

Andrei Paskevich authored

 09 Nov, 2013 2 commits


Andrei Paskevich authored

Andrei Paskevich authored

 08 Nov, 2013 1 commit


Andrei Paskevich authored
Submitted by Johannes Kanig

 01 Nov, 2013 1 commit


Andrei Paskevich authored
feel free to revert, if you think we might want to make again the distinction between t_equal and t_equal_alpha in future or just don't feel like breaking the API.

 29 Oct, 2013 1 commit


Andrei Paskevich authored
we still keep bv_vars in the binders, so calculating the set of free variables only has to descend to the topmost binders. The difference on an example from BWare is quite striking: /usr/bin/time why3replayer : with t_vars 505.14user 15.58system 8:40.45elapsed 100%CPU (0avgtext+0avgdata 3140336maxresident)k /usr/bin/time why3replayer : without t_vars 242.96user 12.04system 4:16.31elapsed 99%CPU (0avgtext+0avgdata 2007184maxresident)k Not only we take 2/3 of memory, but we also gain in speed (less work for the GC, most probably). This patch should be tested on big WhyML examples, since src/whyml/mlw_*.ml are big users of t_vars. Thanks to Guillaume for the suggestion.

 27 Oct, 2013 1 commit


Andrei Paskevich authored
If we generalize on variblebyvariable basis, then the following letrecs are not the same: let rec f (x:'a) y = (x = y) and g (z:int) = f z z // typechecks let rec g (z:int) = f z z and f (x:'a) y = (x = y) // does not In the first case, we unify the type of y with 'a, and thus f is fully generalized in the definition of g. In the second case, we unify the nongenerazled second argument of f with int, and the definition of f does not typecheck. Also: accept implicit type variables in programs.

 26 Oct, 2013 3 commits


Andrei Paskevich authored

Andrei Paskevich authored
In pattern compilation, we only need to know the full list of constructors for a given type, whenever 1. we want to check that a symbol used in a pattern is indeed a constructor; 2. we want to check for nonexhaustive matching and return an example of a noncovered pattern, if any. Thus, we need to give Pattern.compile access to the current known_map whenever we check new declarations in Decl or Mlw_decl. However, once we have checked the patterns, we do not need the full constructor lists just to compile the match expressions. Just knowing the number of constructors (provided in ls_constr) is enough to detect nonexhaustive matching during compilation.

Andrei Paskevich authored

 25 Oct, 2013 1 commit


Andrei Paskevich authored

 24 Oct, 2013 1 commit


Andrei Paskevich authored

 23 Oct, 2013 1 commit


Andrei Paskevich authored

 22 Oct, 2013 1 commit


Andrei Paskevich authored

 19 Oct, 2013 1 commit


Andrei Paskevich authored
Also:  Make [Highord.pred 'a] an alias for [Highord.func 'a bool], rename [Highorg.(@!)] to [(@)], remove [Highorg.(@?)], remove the quantifiers [\!] and [\?] and only leave [\] which is the only true lambda now;  Allow mixing bool and Prop in logic, Dterm will introduce coercions where necessary (trying to minimize the number of ifthenelse in the term context).

 16 Oct, 2013 1 commit


Guillaume Melquiond authored

 05 Oct, 2013 1 commit


MARCHE Claude authored

 28 Sep, 2013 1 commit


Andrei Paskevich authored

 24 Sep, 2013 1 commit


Andrei Paskevich authored

 23 Sep, 2013 1 commit


MARCHE Claude authored
