1. 28 Sep, 2017 1 commit
  2. 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
  3. 06 Aug, 2013 2 commits
    • Andrei Paskevich's avatar
      change default polymorphism encoding methods · 036c6ce5
      Andrei Paskevich authored
      in a series of tests on available examples, lightweight polymorphism
      encoding techniques combined with a more agressive generation of
      monomorphic instances (via Discriminate) show better results than
      our earlier defaults.
      
      In the same commit:
      - remove Encoding_explicit (unsound), Encoding_decoexp (too naive),
        and Encoding_instantiate (subsumed by Discriminate)
      - rename Encoding_decorate to Encoding_tags_full and Encoding_guard
        to Encoding_guards_full
      - move Encoding_guards_full specific functions from Libencoding to
        Encoding_guards_full
      - do not apply type protection in "encoding_tptp" and remove
        Protect_finite which is not needed anymore.
      036c6ce5
    • Andrei Paskevich's avatar
      a60867e2
  4. 06 Mar, 2013 1 commit