1. 29 Mar, 2019 1 commit
  2. 17 Jan, 2019 1 commit
    • Quentin Garchery's avatar
      hybrid eliminate_if · 5d7a985a
      Quentin Garchery authored
      we continue to use the duplicating version of eliminate_if_term for
      atomic formulas but we replace if-then-else with epsilon in Tlet and Tcase
      5d7a985a
  3. 04 Apr, 2018 3 commits
  4. 28 Feb, 2017 1 commit
    • Clément Fumex's avatar
      Add the ability to · f0547868
      Clément Fumex authored
      * declare range types and float types,
      * use integer (resp. real) literals for those types through casting,
      * specify how to print them in drivers.
      
      Change in syntax
      * use
      
        type t = < range 1 2 >   (* integers from 1 to 2 *)
        type t' = < float 4 12 > (* float with 4 bits in exponent and 12 in mantissa *)
      
        the two projections :
        t'int
        t''real
      
        and the predicate :
        t''isFinite
      
      * Restrict the use of "'" in whyml:
        Users are not allowed to introduce names where a quote symbol
        is followed by a letter. Thus, the following identifiers are
        valid:
      
        t'
        toto'0''
        toto'_phi
      
        whereas toto'phi is not.
      
      Note: we do not yet support negative numbers in range declaration
      and casting of a literal.
      f0547868
  5. 26 Sep, 2016 1 commit
  6. 15 Sep, 2016 2 commits
  7. 14 Sep, 2016 3 commits
  8. 08 Mar, 2016 2 commits
  9. 20 Aug, 2015 2 commits
    • Andrei Paskevich's avatar
      HighOrd is new Map · 402fa65b
      Andrei Paskevich authored
      0. define Map.map 'a 'b as an alias 'a -> 'b
      1. define Set.set as an alias for 'a -> bool
      2. rename HighOrd.func to (->)
      3. remove HighOrd.pred
      4. update drivers
      402fa65b
    • Andrei Paskevich's avatar
      adapt the standard library · cb9aa0a2
      Andrei Paskevich authored
      except for modules/impset.mlw (because of Fset) and modules/mach/*
      (because of program cloning), the standard library now typechecks.
      
      This is still very much the work in progress. Many functions and
      predicates have still to be converted to "let function" and
      "let predicate". Here are some TODOs:
      - do not require the return type for "val predicate", "val lemma", etc.
      - do not require explicit variant for "let rec" if the code passes
        the termination check in Decl (see list.why)
      - what should become "val ghost function" and what should stay just
        "function" (see array.mlw, matrix.mlw, string.mlw, etc)?
      - some defined functions in algebra.why and relations.why had to be
        removed, so that they can be implemented with "let function" in
        int.mlw (since they are defined, they cannot be instantiated with
        let-functions). This seems too restrictive. One way out would be
        to authorise instantiation of defined functions (with a VC).
      - should we keep the keyword "model"? reuse of "abstract" in types
        breaks syntax coloring ("abstract" requires closing "end" in
        programs but not in types; maybe we can drop that "end" again?).
      cb9aa0a2
  10. 23 May, 2015 1 commit
  11. 23 Mar, 2015 1 commit
  12. 22 Mar, 2015 3 commits
  13. 27 Feb, 2015 1 commit
  14. 06 Jan, 2015 1 commit
  15. 21 Nov, 2014 1 commit
  16. 20 Jan, 2014 1 commit
    • Andrei Paskevich's avatar
      "eliminate_epsilon" added in drivers · 9c20cd7c
      Andrei Paskevich authored
      Currently, the builtin theory why3.HighOrd (or just HighOrd) must
      be explicitly "use"-d. However, the type (HighOrd.func 'a 'b) can
      be written ('a -> 'b), and the type (HighOrd.pred 'a) can be written
      ('a -> bool), and the application operation (HighOrd.(@)) can be
      written as the usual juxtaposition. Thus, normally, you do not have
      to write the qualifiers. The builtin theory why3.Bool (or just Bool)
      is needed for "bool". The names "HighOrd", "func", "pred", and "(@)"
      are not yet fixed and may change.
      
      "eliminate_epsilon" tries to be smart when a lambda (or some other
      comprehension form) occurs under equality or at the top of a definition.
      We could go even further and replace (\ x . t) s with t[x <- s], without
      lifting the lambda. I'm not sure it's worth it: we rarely write redexes
      manually. They can and will appear through inlining, though.
      
      Anyone who wants to construct epsilon-terms directly using the API
      should remember that these are not Hilbert's epsilons: by writing
      an epsilon term, you postulate the existence (though not necessarily
      uniqueness) of the described object, and "eliminate_epsilon" will
      happily convert it to an axiom expressing this existence. We only
      use epsilons to write comprehensions whose soundness is guaranteed
      by a background theory, e.g. lambda-calculus.
      9c20cd7c
  17. 16 Oct, 2013 1 commit
  18. 06 Aug, 2013 1 commit
  19. 05 Feb, 2013 1 commit
  20. 12 Oct, 2012 1 commit
  21. 17 Sep, 2012 1 commit
  22. 01 Sep, 2012 1 commit
  23. 08 Aug, 2012 1 commit
    • Andrei Paskevich's avatar
      revise split transformations · 03bb57a2
      Andrei Paskevich authored
      Provide nine transformations: split_(goal|all|premise)_(full|right|wp).
      split_*_full splits as far as it can, split_*_right produces linear
      number of subformulas, split_*_wp stops at the "stop_split" label.
      The name "split_goal" is kept for compatibility with older session
      files and denotes the same transformation as "split_goal_wp".
      
      Thanks to Johannes Kanig for the suggestion.
      03bb57a2
  24. 20 Jun, 2012 1 commit
  25. 27 May, 2012 1 commit
  26. 25 May, 2012 1 commit
  27. 17 Mar, 2012 1 commit
  28. 14 Feb, 2012 1 commit
  29. 14 Dec, 2011 1 commit
  30. 13 Dec, 2011 1 commit
  31. 29 Jun, 2011 1 commit