Esempio n. 1
0
def test_cycles():
    for a in helix_gen(2, 2):
        for b in helix_gen(2, 2):
            print(a.cycles())
            print(b.cycles())
            print(product(a, b).cycles())
            print("--")
Esempio n. 2
0
def mdc_reduce(machine):
    stack = [machine]

    while stack:
        m = stack.pop()
        if m.is_trivial():
            return True

        m = m.md_reduce()

        fs = factor.factor(m)
        if not fs:
            m = m.dual()
            if m.is_trivial():
                return True
            fs = factor.factor(m)
            if not fs:
                continue

        for a, b in fs:
            c = mealy.product(b, a)
            d = c.md_reduce()
            if d.is_trivial() or d.dual().is_trivial():
                return True
            if d != c and d.dual() != c:
                stack.append(d)
    return False
Esempio n. 3
0
def bad_facto(m):
    for i in range(2, m.nb_states):
        if m.nb_states % i != 0:
            continue

        for a in helix_gen(i, m.nb_letters):
            for b in helix_gen(m.nb_states // i, m.nb_letters):
                if product(a, b) == m:
                    return a, b
    return None
Esempio n. 4
0
def mdc_reduce(m, steps):
    for k in range(steps):
        m = m.md_reduce()
        if m.is_trivial():
            return True, k
        factors = bad_facto(m)
        if factors is None:
            return False, k
        a, b = factors
        m = product(b, a)
    return False, steps
Esempio n. 5
0
def test_divide(nb_states, nb_letters):
    while True:
        m1 = helix(nb_states, nb_letters)
        m2 = helix(nb_states, nb_letters)
        m = product(m1, m2)
        if m.bireversible():
            break

    ma = divide_right(m, m2)

    print(ma)
    if ma == m1:
        print("C'EST LE BON")
        prod = product(ma, m2)
        return True


#    if prod == m:
#        return True

    return False
Esempio n. 6
0
def conjecturebis():
    if len(sys.argv) < 4:
        print("usage: {} fileA fileB fileAB".format(sys.argv[0]))
        sys.exit(1)

    max_nb_states_mass = 0
    exp = 5
    tot = 0
    res = set()
    for a in read_canonics(sys.argv[1]):
        for b in read_canonics(sys.argv[2]):
            tot += 1
            print("Machine", tot, end='\r')
            if (not mealy.product(a, b).is_md_trivial()
                    and mealy.product(b, a).is_md_trivial()):
                m = mealy.product(a, b)
                max_nb_states_mass = max(max_nb_states_mass,
                                         mealy.mass(m, exp)[-1])
                res.add(m)

    print("Total factorisable count {}.".format(tot))
    print("AB not md-trivial and BA md-trivial {}".format(len(res)))

    for i, a in enumerate(read_canonics(sys.argv[3])):
        print("Machine", i, end='\r')
        if a.is_md_trivial():
            max_nb_states_mass = max(max_nb_states_mass,
                                     mealy.mass(a, exp)[-1])

    count_not_finite = 0
    for i, a in enumerate(read_canonics(sys.argv[3])):
        print("Machine", i, end='\r')
        if (not a.is_md_trivial()
            and not in_iso(a, res)
                and mealy.mass_decide(a, max_nb_states_mass)):
            count_not_finite += 1

    print("Not md-trivial neither mdc-trivial {}.".format(count_not_finite))
    return res