Created
September 18, 2011 23:45
-
-
Save kirelagin/1225727 to your computer and use it in GitHub Desktop.
Group properties checker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
from abc import ABCMeta, abstractmethod | |
class Biop(metaclass=ABCMeta): | |
_set = None | |
@property | |
def set(self): | |
return self._set | |
@property | |
def set_len(self): | |
return len(self._set) | |
@abstractmethod | |
def __call__(self, a, b): pass | |
class TableBiop(Biop): | |
@property | |
def group_cord(self): | |
return self._group_cord | |
def __init__(self, table): | |
self._set = range(len(table)) | |
assert(all(len(row) == self.set_len for row in table)) | |
assert(all(v >= 0 and v < self.set_len for row in table for v in row)) | |
self._table = table | |
def __call__(self, a, b): | |
return self._table[a][b] | |
def is_assoc(op): | |
for i in op.set: | |
for j in op.set: | |
for k in op.set: | |
if op(op(i,j),k) != op(i,op(j,k)): | |
return False | |
return True | |
def has_neutral(op): | |
return all(op(i, 0) == op(0, i) == i for i in op.set) | |
def has_inverse(op): | |
def inv_exists(i): | |
for j in op.set: | |
if op(i,j) == op(j,i) == 0: | |
return True | |
return False | |
return all(inv_exists(i) for i in op.set) | |
def is_group_op(op): | |
return is_assoc(op) and has_neutral(op) and has_inverse(op) | |
op = TableBiop([ | |
[0, 1, 2], | |
[1, 2, 0], | |
[2, 0, 1] | |
]) | |
print(is_group_op(op)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment