1. 07 Mar, 2019 2 commits
  2. 28 Sep, 2017 1 commit
  3. 25 Mar, 2016 1 commit
  4. 24 Mar, 2016 1 commit
  5. 08 Mar, 2016 1 commit
  6. 07 Mar, 2016 1 commit
  7. 24 Aug, 2015 1 commit
  8. 20 Aug, 2015 1 commit
    • 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
  9. 06 Jul, 2015 1 commit
  10. 03 Sep, 2014 1 commit
  11. 21 Aug, 2014 1 commit
  12. 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
  13. 11 Dec, 2013 1 commit
  14. 16 Sep, 2013 1 commit
  15. 06 Aug, 2013 1 commit
  16. 01 Sep, 2012 1 commit
  17. 25 Jul, 2012 1 commit
  18. 24 Jul, 2012 2 commits
  19. 14 Jul, 2012 1 commit
  20. 13 Jul, 2012 1 commit
  21. 11 Jul, 2012 1 commit
  22. 21 Mar, 2012 1 commit
  23. 18 Mar, 2012 1 commit
    • Andrei Paskevich's avatar
      separate abstract types and logic symbols · 1b769a78
      Andrei Paskevich authored
      - put abstract types and aliases in Dtype of tysymbol
      - put (recursive) algebraic types in Ddata of (ts,constr list) list
      - put abstract function/predicate symbols in Dparam of lsymbol
      - put defined logic symbols in Dlogic of (ls,ls_definition) list
      1b769a78
  24. 26 Feb, 2012 1 commit
  25. 14 Feb, 2012 4 commits
  26. 13 Feb, 2012 1 commit
  27. 09 Feb, 2012 1 commit
  28. 20 Dec, 2011 1 commit
    • Guillaume Melquiond's avatar
      Move Coq realizations from a .ml file to a driver file. · cc79baa8
      Guillaume Melquiond authored
      Note that the file is still generated at compilation time.
      
      The "realized" meta takes two arguments. The first one is the path+name of
      the theory, the second one is the translation of it for the target prover.
      The meta is supposed to be put into a printer file, so there is no
      ambiguity on the target. The second argument can be left empty if it can be
      inferred from the first one.
      
      Note that the first argument is not really satisfactory, since it is
      redundant with the theory part of the driver. Moreover, its handling is a
      bit crude: it does not take into account rich qualifiers and it does not
      generate proper error messages if it does not match the theory.
      cc79baa8
  29. 14 Dec, 2011 1 commit
  30. 30 Sep, 2011 1 commit
    • Andrei Paskevich's avatar
      add the option --realize to Main · 9ab0704b
      Andrei Paskevich authored
      How to use it:
      
          why3 --realize -D drivers/coq-realize.drv -T real.Real -o .
      
              produces Real.v in the current directory
      
          why3 --realize -D drivers/coq-realize.drv -T real.Real
      
              produces real/Real.v in the loadpath near real.why
              (the directory "real" must exist)
      
      If a realization file is already there, it is passed to
      the printer in order to preserve the proofs.
      
      Instead of -D <driver_file>, you can use -P <prover>,
      if that prover uses a corresponding driver. However,
      the prover itself is not used.
      
      You can only realize theories from the loadpath.
      
      At the moment, coq-realize.drv is the only driver
      capable to realize theories in some sensible way.
      For any other driver, the results may be funny.
      
      Realization of WhyML modules is not possible so far.
      
      Realization may break if you directories and filenames
      contain non-alphanumeric symbols.
      
      The whole thing is in very preliminary stage.
      Use with caution.
      9ab0704b
  31. 29 Sep, 2011 1 commit
  32. 28 Sep, 2011 1 commit
  33. 31 Aug, 2011 1 commit
  34. 26 Jul, 2011 1 commit
    • Jean-Christophe Filliatre's avatar
      Coq output: recursive definitions · 59b180cb
      Jean-Christophe Filliatre authored
      introduced new transformation eliminate_non_struct_recursion for that purpose
      uses Decl.check_termination tomake the check and the pretty-print
      (could probably be improved to avoid 3 calls to check_termination)
      59b180cb
  35. 29 Jun, 2011 1 commit