Отношение эквивалентности осуществляется, когда отношение обладает свойствами рефлексивности, симметричности и транзитивности.
import operator def get_rel_matr(A, R): lis = sorted( list(A) ) matr = [] for i in range( len(lis) ): row = [] for j in range( len(lis) ): row.append( R( lis[i], lis[j] ) ) matr.append(row) return matr def is_refl(matr): for x in range( len(matr) ): if not matr[x][x]: return False return True def is_symm(matr): for x in range( len(matr) ): for y in range( x, len(matr) ): if not matr[x][y] == matr[y][x]: return False return True def is_transitive(matr): for x in range( len(matr) ): for y in range( len(matr) ): for z in range(len(matr)): if matr[x][y] and matr[y][z]: if not matr[x][z]: return False return True def get_rel_prop(matr): res = ['Отношение обладает следующими свойствами:'] res.append( ' рефлексивность,' if is_refl(matr) else '' ) res.append(' симметричность,' if is_symm(matr) else '' ) res.append(' транзитивность,' if is_transitive(matr) else '' ) s = ''.join( res ) if s[-1] == ',': s = s[:-1] + '.' return s