Seminar 1


In [49]:
# Example sets
A = {1, 2, 3}
B = {'\u03B1', '\u03B2', '\u0263'}

print('A:', A)
print('B:', B)

# Example binary relation
rho = {(1, '\u03B1'), (1, '\u03B2'), (3, '\u0263')}
print('\u03C1: ', rho)


# Specific operations
#   Inverse
def relation_inverse(rho):
    rho_inv = {x[::-1] for x in rho}
    return rho_inv

print('\nInverse')
print('\u03C1: ', rho)
print('\u03C1^-1: ', relation_inverse(rho))


#   Composition
def relation_composition(rho, sigma):
    product = set()
    
    # not quite: print({ (x[1], y[0]) if {x[1] for x in rho} == {y[0] for y in sigma} })
    for x in rho:
        for y in sigma:
            if x[1] == y[0]: # identify transport
                product.add( (x[0], y[1]) )
    
    return product

print('\nComposition')
sigma = {('\u03B1', 'a'), ('\u03B2', 'b'), ('\u0263', 'c')}
print('\u03C1: ', rho)
print('\u03C3: ', sigma)
print('\u03C1 \u22C5 \u03C3: ', relation_composition(rho, sigma))


#   Reflexivity
rho_2 = {(1, '\u03B1'), (1, '\u03B2'), (3, '\u0263'), (1, 1)}
rho_3 = {(1, '\u03B1'), (1, 1), ('\u03B1', '\u03B1'), (3, '\u0263'), (3, 3), ('\u0263', '\u0263')}
def relation_reflexive(rho):
    count = 0
    for x in rho:
        for y in x:
            if (y, y) in rho: #TODO: inneficient ?
                count += 1
    if count == len(rho) * 2: #strictly for a binary relation
        return True
    return False

print('\nReflexive')
print('\u03C1: ', rho)
print('\u03C1_2: ', rho_2)
print('\u03C1_3: ', rho_3)
print('Is \u03C1 reflexive ? : ', relation_reflexive(rho))     #Should be False
print('Is \u03C1_2 reflexive ? : ', relation_reflexive(rho_2)) #Should be False
print('Is \u03C1_3 reflexive ? : ', relation_reflexive(rho_3)) #Should be True


A: {1, 2, 3}
B: {'α', 'β', 'ɣ'}
ρ:  {(3, 'ɣ'), (1, 'β'), (1, 'α')}

Inverse
ρ:  {(3, 'ɣ'), (1, 'β'), (1, 'α')}
ρ^-1:  {('α', 1), ('ɣ', 3), ('β', 1)}

Composition
ρ:  {(3, 'ɣ'), (1, 'β'), (1, 'α')}
σ:  {('α', 'a'), ('ɣ', 'c'), ('β', 'b')}
ρ ⋅ σ:  {(1, 'b'), (1, 'a'), (3, 'c')}

Reflexive
ρ:  {(3, 'ɣ'), (1, 'β'), (1, 'α')}
ρ_2:  {(3, 'ɣ'), (1, 'β'), (1, 'α'), (1, 1)}
ρ_3:  {(3, 'ɣ'), ('α', 'α'), (3, 3), (1, 'α'), ('ɣ', 'ɣ'), (1, 1)}
Is ρ reflexive ? :  False
Is ρ_2 reflexive ? :  False
Is ρ_3 reflexive ? :  True

In [42]:
# Classical sets
def iota(A):
    small_A = chr(ord(A) + 32)
    return (small_A, small_A)

print('\u03B9_A: ', iota('A'))


ι_A:  ('a', 'a')

In [ ]: