Skip to content

feat: Bitstring encodings - #21

Open
BoltonBailey wants to merge 7 commits into
SamuelSchlesinger:devfrom
BoltonBailey:feat/bitstring-encoding
Open

feat: Bitstring encodings#21
BoltonBailey wants to merge 7 commits into
SamuelSchlesinger:devfrom
BoltonBailey:feat/bitstring-encoding

Conversation

@BoltonBailey

@BoltonBailey BoltonBailey commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

This PR does some things to connect the Rose-Tree Data encoding to bitstring encoding, in preparation for #18.

It makes Data.toBits/Data.fromBits to convert a Data into a bitstring and back, and makes it possible for types in the DataEncodeable type class to encode to bitstrings. Also refactors some stuff related to Pairing into a "Delimit" operation.

🤖 Generated with Claude Code

@BoltonBailey
BoltonBailey marked this pull request as ready for review August 1, 2026 14:19
@BoltonBailey

Copy link
Copy Markdown
Collaborator Author

Hopefully with these changes it should also be possible to refactor existing files like:

  • SAT/Encoding.lean
  • DescriptiveComplexity/Encoding.lean
  • Circuits/Encoding/Defs.lean

@BoltonBailey
BoltonBailey marked this pull request as draft August 1, 2026 22:57
BoltonBailey and others added 2 commits August 13, 2026 19:02
# Conflicts:
#	Complexitylib/Models/RoseTreeMachine/Data.lean
`dev` de-exposed `Encoding/DataEncode.lean` as part of the module-interface
minimization, but this branch adds `bitstringEncode` together with
`bitstringEncode_def` and `bitstringEncode_injective`, both of which need
the definition's body to typecheck. Expose the single definition rather
than re-exposing the whole module.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`dev` gained commit 60118c9 ("revert encoding stuff") via the SamuelSchlesinger#23 merge,
which deleted Complexitylib/Encoding.lean and Encoding/Delimit.lean and
inlined the delimiting logic back into Encoding/Pairing.lean. That is the
exact refactor this branch performs, so the merge conflicts on both files.

Resolved in favour of this branch's extraction: keep Encoding.lean and
Encoding/Delimit.lean, and restore this branch's Encoding/Pairing.lean
(`pair x y = delimit x ++ y`). No declaration is lost — every declaration
in dev's Pairing.lean is present in this branch's Pairing.lean plus
Delimit.lean. Also restore the `Complexitylib.Encoding` import in
Complexitylib.lean, which the merge dropped because dev deleted the line.

The two `pair`s produce the same bitstring but associate differently
(`(A ++ sep) ++ y` here vs `A ++ (sep ++ y)` on dev), so five consumer
proofs needed the shape realigned:

- SAT/ThreeSAT/Verifier: unfold `delimit` in the `foldl_append` chain
- TuringMachine/Subroutines/PairEmit/Internal: add `delimit` to `simpa`
- TuringMachine/UTM/Internal/Init: add `delimit` to `simp`
- Classes/NP/Internal/PairBuildTM: drop now-unused `List.append_assoc`
- Classes/PPoly/Advice: drop now-unused `List.append_assoc`

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ncoding

# Conflicts:
#	Complexitylib/Encoding/Data.lean
#	Complexitylib/Models.lean
@BoltonBailey
BoltonBailey force-pushed the feat/bitstring-encoding branch from 4925b02 to f54611b Compare August 14, 2026 05:05
BoltonBailey and others added 2 commits August 16, 2026 09:00
Revert the incidental docstring rewording and the `@[expose]` widening of
`Encoding/Data.lean` introduced by this branch, keeping the diff against dev
limited to substantive changes. Docstrings for newly added declarations are
retained.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@BoltonBailey
BoltonBailey marked this pull request as ready for review August 16, 2026 18:24
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.

2 participants