|
|
from sympy.combinatorics.fp_groups import FpGroup |
|
|
from sympy.combinatorics.free_groups import free_group |
|
|
from sympy.testing.pytest import raises |
|
|
|
|
|
|
|
|
def test_rewriting(): |
|
|
F, a, b = free_group("a, b") |
|
|
G = FpGroup(F, [a*b*a**-1*b**-1]) |
|
|
a, b = G.generators |
|
|
R = G._rewriting_system |
|
|
assert R.is_confluent |
|
|
|
|
|
assert G.reduce(b**-1*a) == a*b**-1 |
|
|
assert G.reduce(b**3*a**4*b**-2*a) == a**5*b |
|
|
assert G.equals(b**2*a**-1*b, b**4*a**-1*b**-1) |
|
|
|
|
|
assert R.reduce_using_automaton(b*a*a**2*b**-1) == a**3 |
|
|
assert R.reduce_using_automaton(b**3*a**4*b**-2*a) == a**5*b |
|
|
assert R.reduce_using_automaton(b**-1*a) == a*b**-1 |
|
|
|
|
|
G = FpGroup(F, [a**3, b**3, (a*b)**2]) |
|
|
R = G._rewriting_system |
|
|
R.make_confluent() |
|
|
|
|
|
|
|
|
assert R.is_confluent |
|
|
|
|
|
assert R._check_confluence() |
|
|
assert G.reduce(b*a**-1*b**-1*a**3*b**4*a**-1*b**-15) == a**-1*b**-1 |
|
|
|
|
|
assert R.reduce_using_automaton(b*a**-1*b**-1*a**3*b**4*a**-1*b**-15) == a**-1*b**-1 |
|
|
|
|
|
G = FpGroup(F, [a**2, b**3, (a*b)**4]) |
|
|
R = G._rewriting_system |
|
|
assert G.reduce(a**2*b**-2*a**2*b) == b**-1 |
|
|
assert R.reduce_using_automaton(a**2*b**-2*a**2*b) == b**-1 |
|
|
assert G.reduce(a**3*b**-2*a**2*b) == a**-1*b**-1 |
|
|
assert R.reduce_using_automaton(a**3*b**-2*a**2*b) == a**-1*b**-1 |
|
|
|
|
|
R.add_rule(a**2, b) |
|
|
assert R.reduce_using_automaton(a**2*b**-2*a**2*b) == b**-1 |
|
|
assert R.reduce_using_automaton(a**4*b**-2*a**2*b**3) == b |
|
|
|
|
|
R.set_max(15) |
|
|
raises(RuntimeError, lambda: R.add_rule(a**-3, b)) |
|
|
R.set_max(20) |
|
|
R.add_rule(a**-3, b) |
|
|
|
|
|
assert R.add_rule(a, a) == set() |
|
|
|