12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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()
- # R._is_confluent should be set to True after
- # a successful run of make_confluent
- assert R.is_confluent
- # but also the system should actually be 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
- # check for automaton reduction
- 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
- # Check after adding a rule
- 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()
|