Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging v2.5.x on main #831

Closed
wants to merge 247 commits into from
Closed

Merging v2.5.x on main #831

wants to merge 247 commits into from

Conversation

Halbaroth
Copy link
Collaborator

No description provided.

Stevendeo and others added 30 commits August 6, 2021 14:25
Unifying types in pattern matching
* Latest version of opam

* Starting CI on branch 'fix-ci'

* Adding depext
This makes it so that the configure step does not need to call opam.
* Avoid multiple rounding of intervals for polynomes

* Fix style and indent

* Review
This is required for compatibility with Menhir 20211215.
This allows removing the %type declarations for [clone_subst] and [use].
This is probably preferable (clearer) in the long run.
config file. Leaving it up to the user to install the deps.
* Add apt-get update step to workflows

* Some more apt-get updates

* Update to latest cmdliner

* Update bounds for cmdliner version in opam files

* Properly exit after --help/--version

* Require --prefix in configure script if opam is not present

* Try and remove superfluous printing

* Restore prefix in Makefile.config

* WIP

* Restrict dune version to avoid bug in dune uninstall

See ocaml/dune#5542
* Extended purify_form (access to ('a, bool) farray)
Added the purification of the operands when the operator is an access to an functional array storing booleans

* replaced evey "assert false" with a "failwith"
and made the lifting of let bindings be done at the top in farray access in purify_form
* Updating version of ocaml environment installer
The AltGr-Ergo package now depends on lablgtk3 and lablgtk3-sourcview3 packages. Since GtkFontChooserDialog is not supported in lalbgtk3, changing font in the editor is temporarily disabled.
Compatibility with dune 3 for release 2.4.2
* Updating docker build for fixing CI

* Test

* Test

* Test

* Test

* All jobs

* Fix style

* Fix indent

* Trying to delay depext installation

* Trying without specifying depect

* Test fix
- Replaced `ocaml-version` with `ocaml-compiler`
- Switched to `actions/checkout@v3`
CI: avsm/setup-ocaml@v2 -> ocaml/setup-ocaml@v2
Adding details on alt-ergo's output
The tests can be added or updated by the command:
make gentests

I modify also the Makefile in order to
run tests as follow:
make runtest
bclement-ocp and others added 18 commits July 26, 2023 17:14
* Update the opam file for Dolmen 0.9

* Update the documentation

* remove the pin for Dolmen
…764)

Since --produce-models is intended to be used with `(get-model)` in the
SMT-LIB format, it only makes sense to use a frontend that actually
supports `(get-model)` when the option is provided.

(Reported by @Halbaroth)
* Keep the default width of the rtd-theme

* Improve conf.py

* Clarify input file formats

* Fix spelling

* Review changes

* Doublon

* Revert removing _static directory
* Update the frontend documentation

* Removing the `fully` adjective

* Review changes
* Update model documentation

* Review changes

* Review changes bis

* Review changes ter

* Clarify the dolmen option
The dolmen frontend is adding declarations to the end of the command
queue instead of to the front, causing the final command list to be all
shuffled. This is the cause of at least some of the regressions with the
dolmen frontend, since the solver now processes things in a different
order.

This patch ensures that the definitions are added with the correct
ordering, so that the command queue should be the same with both
frontends, barring additional bugs. This was tested with `-d commands`
on a few benchmarks locally, where it produced the exact same output
with both frontends.

The patch also refactors slightly the [handle_smtt] method in the
solving loop: as part of the debugging for this, I realized that we can
never end up with `Hyp` constructors with local/global hypotheses names
there, because one difference between the Dolmen and legacy frontend is
that the legacy frontend extracts the hypotheses from the goal during
typechecking (so prior to cnf-conversion) while the Dolmen frontend
extracts the hypotheses from the goal during cnf-conversion (i.e. when
we encounter a `Solve`).
* Remove useless template

* Add a lock file for the alt-ergo-lib

* Remove the compiler in the lock file

* Fix the lock file

* Don't remove all packages matching ocaml

* Make the lock target phony

* fix

* Use --enable-theories fpa to enable the fpa prelude

* artefact

* Use dune's include stanza for generated tests

The current implementation of test generation is quite high friction:

 - When adding new tests, running tests directly with dune doesn't work,
   because the dune files must be generated by `make gentest`
   beforehand.  There is `make runtest`, but that always runs all the
   tests, and does not allow specifying only some tests to run (which,
   given that our test suite is quite big, is sometimes needed for quick
   iterations).

 - The generated dune files are not commited to the repository, which
   means that it is easy to forget to run `make gentest` when switching
   branches -- which either causes some tests to silently not run, or
   errors because some files are missing.

This patch solves both issues by integrating the test generation with
dune, using the `include` stanza. More precisely:

 - The test generation script (gentest.ml) is modified to write all the
   test cases on the standard output as a single file, rather than
   creating the dune test files by itself. The generated file makes use
   of the `subdir` stanza to locate the targets appropriately.

 - There is a new `dune.inc` file that is included by the `dune` file in
   `tests`, and a `diff` rule that generates the content of that
   `dune.inc` file using the `gentest.ml` script.  This is the way rules
   generation must work in dune, and it means that the `dune.inc` file
   must be commited to the repository --- which may not be such a bad
   thing, see above.

The rule generation is added to the `gentest`, `runtest`,
`runtest-quick` and `runtest-ci` aliases.

The advantage of the new approach is that since the dependency is known
to dune (and not only to make), running a command such as
`dune build @tests/issues/XXX/runtest-quick` will always regenerate the
tests, and also that we won't have to delete `dune` files manually when
switching branches, since everything is in the file that gets
re-generated.

It means that running tests is slightly slower, because it always
requires running the `gentest` script --- but that is probably fine,
until we have many more tests than currently.

* Review changes

* Modify the warning for the fpa prelude

* Fix spelling

* Rebase artefacts

* Promote tests

* Rename output cli

* Fix too long lines

* Return the right environment

* Promote tests

* Use an adt to save the results of queries

* Use an adt to save the results of queries (bis)

* Fix lib_usage and worker_js

---------

Co-authored-by: Basile Clément <basile.clement@ocamlpro.com>
* Add alt-ergo as a dependency for cram tests

* Use ppx_blob 0.7.2

* Review changes

* Prevent dune to compile examples
* Use fmt >= 0.9.0

* Removing useless line in the cram tests

* Restoring trailing spaces
We have to use ppxlib >= 0.30.0 and prevent conflict with
result < 1.5.
* Do not discard `bvnot` applied to uninterpreted terms

In PR #745 we correctly handled the case where uninterpreted terms
appear deep within a bit-vector terms, but we accidentally missed the
case where the whole bit-vector is itself an uninterpreted term, leading
to unsoundness (see the attached test).

This patch fixes the code to properly deal with `bvnot` applied to an
uninterpreted term.

* Update the changes log for v2.5.1

* Review changes

---------

Co-authored-by: Basile Clément <bc@ocamlpro.com>
@bclement-ocp
Copy link
Collaborator

Looks like there are conflicts here :( Should we revert the few commits for 2.3.3 that seems to be on main but not next?

@Halbaroth
Copy link
Collaborator Author

Halbaroth commented Sep 21, 2023

We shouldn't remove the commit e0b89ab on main as the tag of the release 2.3.3 is on this commit. It seems a release has been done by pushing a branch to master (renamed main later) and the branch have never been pushed on next.

@bclement-ocp
Copy link
Collaborator

Sorry, I meant revert the commits (as in git revert), not remove them.

When printing models, we can end up with class representatives that are
not actually in the model. This can happen if a class representative is
a defined constant, but also if it is an intermediate fresh constant
introduced by the solver (!kXXX). This is because, in a class containing
only uninterpreted terms, the representative will be the minimum term,
independently of whether it is defined or fresh.

This patch records and adds such terms to the `values` table as a
(named) `Abstract` constant. This ensures that the same abstract value
is used for all uses of a given constant.

This is backported from a0575d2 for branch 2.5.x.

Fixes #854
Halbaroth and others added 5 commits October 16, 2023 10:55
* Fix distinct unsoundness

This PR quickly fixes the clash between the SMT-LIB specification of
`distinct` and the implementation of this expression in AE.

Basically, we expand the expression `distinct x_1 ... x_n` into a
conjunction of binary disequalities.

Notice that the model outputted for `uf2.models.smt2` changes because I don't
preserve the old order used in `distinct`.

* Fix the smart constructor of `mk_distinct`

The smart construct `mk_distinct` produces an SMT-LIB compliant
expression.

* Clean up
We are not compatible with the development release of Dolmen due to the
`implicit` field added in [1]. Further, we currently require that Dolmen
move trigger annotations in SMT-LIB format from the body of the formula
to the quantifier itself, but this was removed in [2].

Since both of these will be part of the next release of dolmen, let us
pre-emptively ensure that release won't break Alt-Ergo.

[1] : Gbury/dolmen#199
[2] : Gbury/dolmen#207
@Halbaroth
Copy link
Collaborator Author

Merging v2.5.x on main isn't a good idea as main is supposed to be a prefix of next and v2.5.x diverged from next.

@Halbaroth Halbaroth closed this Mar 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants