lkb-pipeline/core/rewrite.R
allaun e5bfdc0492 feat: LKB compute pipeline + eigensolid receipts
Containerized LKB worker (Dockerfile.lkb), Postgres-backed queue,
auto-deploy timer, and eigensolid convergence check module.

Build: 0 jobs (no Lean build needed)
2026-07-08 20:01:29 -05:00

59 lines
1.3 KiB
R

source("boot.R")
box_use(./b4)
#' @export
free_reduce <- function(w) b4$braid_reduce(w)
#' @export
yang_baxter_normalize <- function(w) {
w <- unclass(b4$braid_reduce(w))
changed <- TRUE
while (changed) {
changed <- FALSE
i <- 1
while (i <= length(w) - 2) {
a <- w[i]; b <- w[i + 1]; c <- w[i + 2]
ia <- abs(a); ib <- abs(b); ic <- abs(c)
if (ia == ic && abs(ia - ib) == 1 && sign(a) == sign(b) && sign(b) == sign(c)) {
if (ia > ib) {
w[i] <- b; w[i + 1] <- a; w[i + 2] <- b; changed <- TRUE
}
}
i <- i + 1
}
}
b4$braid_word(w)
}
#' @export
far_commute_sort <- function(w) {
w <- unclass(b4$braid_reduce(w))
changed <- TRUE
while (changed) {
changed <- FALSE
i <- 1
while (i <= length(w) - 1) {
a <- w[i]; b <- w[i + 1]
if (abs(a) > abs(b) + 1 || abs(a) + 1 < abs(b)) {
if (abs(a) > abs(b) || (abs(a) == abs(b) && a > b)) {
w[i] <- b; w[i + 1] <- a; changed <- TRUE
}
}
i <- i + 1
}
}
b4$braid_word(w)
}
#' @export
rewrite_normalize <- function(w) {
prev <- NULL
w <- b4$braid_reduce(w)
while (!identical(prev, unclass(w))) {
prev <- unclass(w)
w <- yang_baxter_normalize(w)
w <- far_commute_sort(w)
w <- b4$braid_reduce(w)
}
w
}