@@ -62,6 +62,106 @@ def test_attributes(self):
62
62
def test_operators (self ):
63
63
check_operators (self , KnuthBendix )
64
64
65
+ # Tests from libsemigroups
66
+ def test_006 (self ):
67
+ kb = KnuthBendix ()
68
+ kb .set_alphabet ("ab" )
69
+ kb .add_rule ("aa" , "" )
70
+ kb .add_rule ("bbb" , "" )
71
+ kb .add_rule ("ababab" , "" )
72
+ self .assertFalse (kb .confluent ())
73
+ kb .run ()
74
+ self .assertEqual (kb .size (), 12 )
75
+ self .assertTrue (kb .confluent ())
76
+
77
+ def test_009 (self ):
78
+ kb = KnuthBendix ()
79
+ kb .set_alphabet ("012" )
80
+ kb .add_rule ("000" , "2" )
81
+ kb .add_rule ("111" , "2" )
82
+ kb .add_rule ("010101" , "2" )
83
+ kb .set_identity ("2" )
84
+ self .assertEqual (kb .alphabet (), "012" )
85
+ self .assertFalse (kb .confluent ())
86
+ kb .run ()
87
+ self .assertTrue (kb .confluent ())
88
+ self .assertEqual (kb .number_of_active_rules (), 9 )
89
+ ad = kb .gilman_digraph ()
90
+ self .assertEqual (ad .number_of_nodes (), 9 )
91
+ self .assertEqual (ad .number_of_edges (), 13 )
92
+
93
+ def test_022 (self ):
94
+ kb = KnuthBendix ()
95
+ kb .set_alphabet ("aAbBcC" )
96
+ kb .set_identity ("" )
97
+ kb .set_inverses ("AaBbCc" )
98
+ kb .add_rule ("Aba" , "bb" )
99
+ kb .add_rule ("Bcb" , "cc" )
100
+ kb .add_rule ("Cac" , "aa" )
101
+ self .assertFalse (kb .confluent ())
102
+ kb .run ()
103
+ self .assertTrue (kb .confluent ())
104
+ self .assertTrue (kb .equal_to ("Aba" , "bb" ))
105
+ self .assertTrue (kb .equal_to ("Bcb" , "cc" ))
106
+ self .assertTrue (kb .equal_to ("Cac" , "aa" ))
107
+ self .assertEqual (kb .size (), 1 )
108
+
109
+ def test_024 (self ):
110
+ kb = KnuthBendix ()
111
+ kb .set_alphabet ("abAB" )
112
+ kb .set_identity ("" )
113
+ kb .set_inverses ("ABab" )
114
+ kb .add_rule ("aaa" , "" )
115
+ kb .add_rule ("bbb" , "" )
116
+ kb .add_rule ("abababab" , "" )
117
+ kb .add_rule ("aBaBaBaBaB" , "" )
118
+ self .assertFalse (kb .confluent ())
119
+ kb .run ()
120
+ self .assertTrue (kb .confluent ())
121
+ self .assertEqual (kb .number_of_active_rules (), 183 )
122
+ self .assertTrue (kb .equal_to ("aaa" , "" ))
123
+ self .assertTrue (kb .equal_to ("bbb" , "" ))
124
+ self .assertTrue (kb .equal_to ("BaBaBaBaB" , "aa" ))
125
+ self .assertTrue (kb .equal_to ("bababa" , "aabb" ))
126
+ self .assertTrue (kb .equal_to ("ababab" , "bbaa" ))
127
+ self .assertTrue (kb .equal_to ("aabbaa" , "babab" ))
128
+ self .assertTrue (kb .equal_to ("bbaabb" , "ababa" ))
129
+ self .assertTrue (kb .equal_to ("bababbabab" , "aabbabbaa" ))
130
+ self .assertTrue (kb .equal_to ("ababaababa" , "bbaabaabb" ))
131
+ self .assertTrue (kb .equal_to ("bababbabaababa" , "aabbabbaabaabb" ))
132
+ self .assertTrue (kb .equal_to ("bbaabaabbabbaa" , "ababaababbabab" ))
133
+
134
+ def test_025 (self ):
135
+ kb = KnuthBendix ()
136
+ kb .set_alphabet ("aAbB" )
137
+ kb .set_identity ("" )
138
+ kb .set_inverses ("AaBb" )
139
+ self .assertTrue (kb .confluent ())
140
+ kb .run ()
141
+ self .assertTrue (kb .confluent ())
142
+ self .assertTrue (kb .is_obviously_infinite ())
143
+
144
+ def test_027 (self ):
145
+ kb = KnuthBendix ()
146
+ kb .set_alphabet ("abB" )
147
+ kb .add_rule ("bb" , "B" )
148
+ kb .add_rule ("BaB" , "aba" )
149
+ self .assertFalse (kb .confluent ())
150
+ kb .run ()
151
+ self .assertTrue (kb .confluent ())
152
+ self .assertEqual (kb .number_of_active_rules (), 6 )
153
+ self .assertEqual (
154
+ kb .active_rules (),
155
+ [
156
+ ("Bb" , "bB" ),
157
+ ("bb" , "B" ),
158
+ ("BaB" , "aba" ),
159
+ ("BabB" , "abab" ),
160
+ ("Baaba" , "abaaB" ),
161
+ ("Bababa" , "ababaB" ),
162
+ ],
163
+ )
164
+
65
165
66
166
def test_running_and_state ():
67
167
check_running_and_state (KnuthBendix )
0 commit comments