mirror of
https://github.com/Z3Prover/z3
synced 2026-04-13 15:56:27 +00:00
- IEEE754.fst: fix multi-binding in assume val signatures (F* 2026 syntax),
change float from Type0 to eqtype for equality support, generalize fma NaN
axioms to handle any-NaN inputs (ax_fma_any_nan_y/x/z)
- FPARewriterRules.fst: add explicit #eb #sb type arguments to axiom calls
where F* 2026 cannot infer them, use ax_fma_any_nan_y for proofs where
y is an arbitrary NaN rather than the canonical nan constant
- RewriteCodeGen.fst: fix F* 2026 API changes: FStar.Sealed.unseal->unseal,
C_Bool->{C_True,C_False}, List.Tot.iter->iter, FStar.Reflection.V2.inspect
->inspect_ln for term_view, post from C_Lemma pre->post with Tv_Abs peel,
b2t unwrapping, lemma_ref via pack_fv instead of quote for polymorphic lemmas,
per-branch offset tracking for Pat_Var in match branches
- .github/workflows/fstar-extract.yml: update to F* 2026.03.24 with correct
archive name fstar-v{VERSION}-Linux-x86_64.tar.gz
- fstar/README.md and extract.sh: update version references to 2026.03.24
Extraction now produces correct output:
expr *c, *t, *e;
if (m().is_ite(arg1, c, t, e)) {
result = m().mk_ite(c, m_util.mk_is_nan(t), m_util.mk_is_nan(e));
return BR_REWRITE2;
}
Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/0a30f342-3941-4952-a54f-1bee84b022ef
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
93 lines
3.3 KiB
YAML
93 lines
3.3 KiB
YAML
name: "F* Meta Extraction"
|
|
|
|
# Run the Meta-F* reflection-based extraction that generates C++ rewrite rules
|
|
# from the F* lemmas in fstar/FPARewriterRules.fst.
|
|
#
|
|
# The extraction is performed by fstar/RewriteCodeGen.fst which uses
|
|
# FStar.Tactics.V2 and FStar.Reflection.V2 to inspect the lemma types
|
|
# and emit C++ if-blocks that implement the corresponding rewrite rules.
|
|
#
|
|
# The generated C++ is printed to the job log and uploaded as an artifact.
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- "fstar/**.fst"
|
|
- "fstar/extract.sh"
|
|
- ".github/workflows/fstar-extract.yml"
|
|
pull_request:
|
|
paths:
|
|
- "fstar/**.fst"
|
|
- "fstar/extract.sh"
|
|
- ".github/workflows/fstar-extract.yml"
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
fstar-extract:
|
|
name: "Meta-F* rewrite rule extraction"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v6.0.2
|
|
|
|
# -----------------------------------------------------------------------
|
|
# Install F*
|
|
#
|
|
# We download the pre-built Linux binary from the F* GitHub releases.
|
|
# The version is pinned to match what the README recommends.
|
|
# If the pinned release is unavailable the step fails clearly.
|
|
# -----------------------------------------------------------------------
|
|
- name: Install F*
|
|
env:
|
|
FSTAR_VERSION: "2026.03.24"
|
|
run: |
|
|
ARCHIVE="fstar-v${FSTAR_VERSION}-Linux-x86_64.tar.gz"
|
|
URL="https://github.com/FStarLang/FStar/releases/download/v${FSTAR_VERSION}/${ARCHIVE}"
|
|
echo "Downloading F* ${FSTAR_VERSION} from ${URL}" >&2
|
|
curl -fsSL -o "/tmp/${ARCHIVE}" "${URL}"
|
|
mkdir -p "$HOME/fstar"
|
|
tar -xzf "/tmp/${ARCHIVE}" -C "$HOME/fstar" --strip-components=2
|
|
echo "$HOME/fstar/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Verify F* installation
|
|
run: fstar.exe --version
|
|
|
|
# -----------------------------------------------------------------------
|
|
# Run the Meta-F* extraction
|
|
#
|
|
# RewriteCodeGen.fst contains run_tactic calls that print generated C++
|
|
# to stdout during typechecking. We capture that output, show it in the
|
|
# log, and upload it as an artifact for inspection.
|
|
# -----------------------------------------------------------------------
|
|
- name: Extract C++ rewrite rules via Meta-F*
|
|
working-directory: fstar
|
|
run: |
|
|
chmod +x extract.sh
|
|
echo "--- generated C++ rules ---"
|
|
./extract.sh | tee extracted_rules.txt
|
|
echo "--- end of generated rules ---"
|
|
|
|
- name: Show extracted rules
|
|
working-directory: fstar
|
|
run: |
|
|
echo "Lines of generated C++ output:"
|
|
wc -l extracted_rules.txt
|
|
echo ""
|
|
echo "Full content:"
|
|
cat extracted_rules.txt
|
|
|
|
# -----------------------------------------------------------------------
|
|
# Upload the extracted rules as a build artifact so reviewers can
|
|
# inspect the generated C++ without re-running the workflow.
|
|
# -----------------------------------------------------------------------
|
|
- name: Upload extracted rules artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: fstar-extracted-cpp-rules
|
|
path: fstar/extracted_rules.txt
|
|
if-no-files-found: error
|