Add superinstructions LOOK+1, LOOK-1 for 25% faster loops

Fused opcodes: LOOK_ADD1 (lookup + increment) and LOOK_SUB1
(lookup + decrement) emitted directly by compiler for (+ sym 1)
and (- sym 1) patterns. Eliminates one dispatch per loop iteration.

sum-to(50000) ratio improved from 59x to 45x vs Python.
ackermann(3,4) steady at 83x. 571 tests green.

Also defines LOOK_LOOK, CONST_EQ_JF, LOOK_CONST_CALL2
superinstruction opcodes (VM handlers ready, compiler emission
for remaining patterns deferred to next pass).
This commit is contained in:
russell@unturf.com 2026-04-14 13:53:08 -04:00
parent b81c8923c0
commit e700273136
10 changed files with 147 additions and 1 deletions

View file

@ -0,0 +1,22 @@
name: Create Release
on:
push:
branches:
- 'main'
- 'master'
paths:
- 'lean-toolchain'
jobs:
lean-release-tag:
name: Add Lean release tag
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: lean-release-tag action
uses: leanprover-community/lean-release-tag@v1
with:
do-release: true
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -0,0 +1,21 @@
name: Lean Action CI
on:
push:
pull_request:
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read # Read access to repository contents
pages: write # Write access to GitHub Pages
id-token: write # Write access to ID tokens
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: leanprover/lean-action@v1
- uses: leanprover-community/docgen-action@v1

41
proof/.github/workflows/update.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: Update Dependencies
on:
# schedule: # Sets a schedule to trigger the workflow
# - cron: "0 8 * * *" # Every day at 08:00 AM UTC (see https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule)
workflow_dispatch: # Allows the workflow to be triggered manually via the GitHub interface
jobs:
check-for-updates: # Determines which updates to apply.
runs-on: ubuntu-latest
outputs:
is-update-available: ${{ steps.check-for-updates.outputs.is-update-available }}
new-tags: ${{ steps.check-for-updates.outputs.new-tags }}
steps:
- name: Run the action
id: check-for-updates
uses: leanprover-community/mathlib-update-action@v1
# START CONFIGURATION BLOCK 1
# END CONFIGURATION BLOCK 1
do-update: # Runs the upgrade, tests it, and makes a PR/issue/commit.
runs-on: ubuntu-latest
permissions:
contents: write # Grants permission to push changes to the repository
issues: write # Grants permission to create or update issues
pull-requests: write # Grants permission to create or update pull requests
needs: check-for-updates
if: ${{ needs.check-for-updates.outputs.is-update-available == 'true' }}
strategy: # Runs for each update discovered by the `check-for-updates` job.
max-parallel: 1 # Ensures that the PRs/issues are created in order.
matrix:
tag: ${{ fromJSON(needs.check-for-updates.outputs.new-tags) }}
steps:
- name: Run the action
id: update-the-repo
uses: leanprover-community/mathlib-update-action/do-update@v1
with:
tag: ${{ matrix.tag }}
# START CONFIGURATION BLOCK 2
on_update_succeeds: pr # Create a pull request if the update succeeds
on_update_fails: issue # Create an issue if the update fails
# END CONFIGURATION BLOCK 2