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

feat: BitVec.toNat BitVec.signExtend #6155

Merged
merged 1 commit into from
Nov 27, 2024

Conversation

bollu
Copy link
Contributor

@bollu bollu commented Nov 21, 2024

This PR adds toNat theorems for BitVec.signExtend.

Sign extending to a larger bitwidth depends on the msb. If the msb is false, then the result equals the original value. If the msb is true, then we add a value of (2^v - 2^w), which arises from the sign extension.

theorem toNat_signExtend (x : BitVec w) {v : Nat} :
    (x.signExtend v).toNat = (x.setWidth v).toNat + if x.msb then 2^v - 2^w else 0

@github-actions github-actions bot added the toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN label Nov 21, 2024
@leanprover-community-bot
Copy link
Collaborator

leanprover-community-bot commented Nov 21, 2024

Mathlib CI status (docs):

  • ❗ Batteries/Mathlib CI will not be attempted unless your PR branches off the nightly-with-mathlib branch. Try git rebase 9cf83706e743debb47f3b1a48e1b92210c1c0720 --onto 72e952eadc6a171310f1d8e9d6e78acf98421494. (2024-11-21 16:13:15)
  • ❗ Batteries/Mathlib CI will not be attempted unless your PR branches off the nightly-with-mathlib branch. Try git rebase 0a22f8fa6fef34a6798785785237c66cab173197 --onto 9a17919ef11c2dba824498229633b8333a0b53d9. (2024-11-26 14:58:45)

@bollu
Copy link
Contributor Author

bollu commented Nov 21, 2024

changelog-library

@github-actions github-actions bot added the changelog-library Library label Nov 21, 2024
@kim-em kim-em added the awaiting-author Waiting for PR author to address issues label Nov 21, 2024
github-merge-queue bot pushed a commit that referenced this pull request Nov 23, 2024
This PR adds toInt theorems for BitVec.signExtend.

If the current width `w` is larger than the extended width `v`,
then the value when interpreted as an integer is truncated,
and we compute a modulo by `2^v`.

```lean
theorem toInt_signExtend_of_le (x : BitVec w) (hv : v ≤ w) :
    (x.signExtend v).toInt = Int.bmod (x.toNat) (2^v)
```

Co-authored-by: Siddharth Bhat <[email protected]>
Co-authored-by: Harun Khan <[email protected]>


Stacked on top of #6155

---------

Co-authored-by: Harun Khan <[email protected]>
This PR adds toNat theorems for BitVec.signExtend.

Sign extending to a larger bitwidth depends on the msb.
If the msb is false, then the result equals the original value.
If the msb is true, then we add a value of `(2^v - 2^w)`, which arises from the sign extension.

```lean
theorem toNat_signExtend (x : BitVec w) {v : Nat} :
    (x.signExtend v).toNat = (x.setWidth v).toNat + if x.msb then 2^v - 2^w else 0
```

Co-authored-by: Siddharth Bhat <[email protected]>
Co-authored-by: Harun Khan <[email protected]>
@bollu
Copy link
Contributor Author

bollu commented Nov 26, 2024

awaiting-review

@bollu bollu marked this pull request as ready for review November 26, 2024 15:46
@github-actions github-actions bot added awaiting-review Waiting for someone to review the PR and removed awaiting-author Waiting for PR author to address issues labels Nov 26, 2024
@kim-em kim-em removed the awaiting-review Waiting for someone to review the PR label Nov 27, 2024
@kim-em kim-em added this pull request to the merge queue Nov 27, 2024
Merged via the queue into leanprover:master with commit 7692343 Nov 27, 2024
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
changelog-library Library toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants