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 }