mirror of
https://github.com/kalmarek/PropertyT.jl.git
synced 2024-09-18 09:38:00 +02:00
a better (iterative) reduce
This commit is contained in:
parent
9c06c9b161
commit
4aa92cda36
@ -101,14 +101,7 @@ function inv{T}(W::GWord{T})
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function reduce!(W::GWord{FGSymbol})
|
function free_group_reduction!(W::GWord)
|
||||||
if length(W) < 2
|
|
||||||
deleteat!(W.symbols, find(x -> x.pow == 0, W.symbols))
|
|
||||||
return W
|
|
||||||
end
|
|
||||||
|
|
||||||
reduced = false
|
|
||||||
while !reduced
|
|
||||||
reduced = true
|
reduced = true
|
||||||
for i in 1:length(W.symbols) - 1
|
for i in 1:length(W.symbols) - 1
|
||||||
if W.symbols[i].gen == W.symbols[i+1].gen
|
if W.symbols[i].gen == W.symbols[i+1].gen
|
||||||
@ -119,6 +112,18 @@ function reduce!(W::GWord{FGSymbol})
|
|||||||
W.symbols[i] = one(W.symbols[i])
|
W.symbols[i] = one(W.symbols[i])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return reduced
|
||||||
|
end
|
||||||
|
|
||||||
|
function reduce!{T}(W::GWord{T}, reduce_func::Function=free_group_reduction!)
|
||||||
|
if length(W) < 2
|
||||||
|
deleteat!(W.symbols, find(x -> x.pow == 0, W.symbols))
|
||||||
|
return W
|
||||||
|
end
|
||||||
|
|
||||||
|
reduced = false
|
||||||
|
while !reduced
|
||||||
|
reduced = reduce_func(W)
|
||||||
deleteat!(W.symbols, find(x -> x.pow == 0, W.symbols))
|
deleteat!(W.symbols, find(x -> x.pow == 0, W.symbols))
|
||||||
end
|
end
|
||||||
return W
|
return W
|
||||||
|
Loading…
Reference in New Issue
Block a user