|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Aeneas-news: April 2025" |
| 4 | +date: 2025-04-07 19:43:29 +0100 |
| 5 | +categories: newsletter |
| 6 | +--- |
| 7 | +A brief update on what's happening in the Aeneas project at large. |
| 8 | + |
| 9 | +## Charon |
| 10 | +* The README has been updated. It's now a good reflection of where the project is at and where we plan to go; |
| 11 | +* Thanks to the welcome help of @Vague, Charon now works on Windows; |
| 12 | +* Thanks again to @Vague, the cli interface of Charon was modernized and cleaner up. We've replaced: |
| 13 | + - charon [OPTIONS] becomes charon cargo [OPTIONS] [-- CARGO_OPTIONS]; |
| 14 | + - charon --no-cargo [OPTIONS] becomes charon rustc [OPTIONS] [-- RUSTC_OPTIONS]; |
| 15 | + - charon --read-llbc <path> becomes charon pretty-print <path>. |
| 16 | + The old options are still available but will soon be deprecated. |
| 17 | +* The --no-cargo --crate <name> option was removed because it behaved inconsistently; use --rustc-arg=--crate-name=<name> instead; |
| 18 | +* Charon now translates the lang_item identifier for built-in definitions. This makes it easier to recognize a number of built-ins like Box, String, Copy, etc; |
| 19 | +* Progress is ongoing towards supporting later MIRs (https://github.com/AeneasVerif/charon/issues/543). |
| 20 | + |
| 21 | +## Aeneas |
| 22 | +* the progress_pure and progress_pure_def attributes allow automatically lifting theorems and generating theorems from definitions so that progress can use them |
| 23 | +* several new tactics: zmodify (to convert propositions so that they manipulate elements of ZMod), simp_lists (to simplify expressions like List.get (List.set ...) - it uses scalar_tac to discharge the proof obligations), simp_ifs (to simplify if then else expressions by using scalar_tac) |
| 24 | +* thanks to the work of Fernando Leal, a new progress* tactic allows repeatedly applying |
| 25 | +split and progress, while its variant progress*? generates the corresponding proof |
| 26 | +script. progress*, progress*? and progress can now use the keyword by to use a |
| 27 | +custom discharger for the preconditions. A new syntax is also possible for progress: |
| 28 | +let* ⟨ ... ⟩ ← THM_NAME (with variants: let* ⟨ b, b_post ⟩ ← * and let* ⟨ b, b_post ⟩ ← *?). |
| 29 | +* simp procedures for elements of ZMod (that we intend to port to Mathlib), which simplify |
| 30 | +constants ((17 : ZMod 12) ~> (5 : ZMod 12)), inverses ((12⁻¹ : ZMod 7) ~> (3 : ZMod |
| 31 | + 7)) and powers (((2 ^ 16)⁻¹ : ZMod 3329) ~> (169 : ZMod 3329)). |
| 32 | +* removal of inefficient scalar_tac and simp lemmas which drastically improved the proof performance |
| 33 | +* many bug fixes and improvements in the tactics of the Lean backend |
| 34 | +* minor improvements of the quality of the extracted code when it contains arrays and slices |
| 35 | +* better handling of multi-files Lean projects with the -split-files and -subdir options |
| 36 | +* following changes in Charon, default trait methods are now handled properly |
| 37 | +the extracted global constants are now marked as irreducible, as Lean would otherwise |
| 38 | +expand them when trying to unify. The constants are also all marked with the global_simps |
| 39 | +simpset attribute. |
| 40 | + |
| 41 | +## Eurydice |
| 42 | +* Eurydice now demands that Charon be invoked with --remove-associated-types '*', which in turn enables support for a larger class of iterators, such as chunks, chunks_exact, or range-step_by iterators -- these are now all supported (but some implementations may be missing from eurydice_glue.h, please send PRs) |
| 43 | +* expand support for generating syntactic sugar for such iterators, notably, step_by iterators are now guaranteed to be emitted as for-loops |
| 44 | +* support for generating code that is C++17-compatible; by default, code generated by Eurydice requires either C11 or C++21 -- for users who must use older versions of C++, the new -fcxx17-compat option generates code that is incompatible with C (any version) but compatible with C++17 |
| 45 | + |
| 46 | +## Scylla |
| 47 | +Significant progress, as we are now able to extract large chunks of HACL* from C to Rust automatically, directly using concrete C syntax as opposed to relying on the Low* intermediate representation. |
0 commit comments