Exemplo n.º 1
0
def synchro_prod_poly_example():
    A = NFA.spec("""
        0
        1
        0 a 1 c 1
        1 a 0""").named("A").visu()

    B = NFA.spec("""
        0
        1
        0 b 1 c 1
        1 b 0""").renum(2).named("B").visu()

    _ = NFA.Stay
    C = NFA.sprod(A, B, svec={("a", _), (_, "b"),
                              ("c", "c")}).visu()  # .texvisu(renum=True)

    D = A | B | C
    D.visu().texvisu(renum=True,
                     at={
                         '0': (0, .5),
                         '1': (1, .5),
                         '2': (-.5, 0),
                         '3': (-.5, -1),
                         '(0, 2)': (0, 0),
                         '(1, 2)': (1, 0),
                         '(0, 3)': (0, -1),
                         '(1, 3)': (1, -1),
                     }.get,
                     params=",x=3cm,y=3cm")
Exemplo n.º 2
0
def revision_interro():
    NFA.spec("""
    1
    2
    1 a 1 a 2 b 2 eps 3
    2 b 2
    3 a 3
    """,
             name="Révision ε-removal").visu().rm_eps().visu().dfa().visu(
             ).mini().visu()

    NFA({1}, {3}, {(1, "a", 2), (2, "b", 3), (3, "c", 2), (3, '', 1)},
        name="ε2").visu().rm_eps().visu().dfa().visu().mini().visu()
Exemplo n.º 3
0
def minimisation_exo():
    NFA.spec(
        """
    a
    c f g
    
    a 0 b 1 e
    b 0 b 1 c
    e 0 e 1 f
    f 1 c 0 b
    c 1 f 0 e
    d 0 c 1 g
    g 0 d 1 f
    """,
        name="Minimisation exo",
        Qtype=str).visu().trim().visu().dfa().visu().mini(table=False).visu()
Exemplo n.º 4
0
def rm_esp_clos_test():
    A = NFA.spec("""
    0
    2
    0 eps 1
    1 eps 2
    2 a 0
    """).visu().rm_eps().visu()
Exemplo n.º 5
0
def verif_mini_prog():
    prog = NFA.spec("""
    1
    __
    1 b=1 1 b=0 2
    2 b:=1 3
    3 proc() 4
    4 b:=0 1""").visu().texvisu("1 > 2 > 3 > 4", "4 < 1")
Exemplo n.º 6
0
def interro201819():
    A = NFA.spec("""
    0
    5
    
    0 a 1 c 2
    1 b 1 a 3
    2 b 2 a 4
    3 c 3 a 5 a 2
    4 c 3 a 5 a 1
    """,
                 name="interro2018-2019").visu()
    # A.table()
    A.texvisu("0 / 1 > 3\n 0 \ 2 > 4 / 5", "3 ns,c 2 4 ne,c 1 2 lb 2")
    A = A.dfa().visu().texvisu(renum=True)

    A.mini().visu().texvisu(renum=True)

    B = NFA.spec("""
    eps
    fi
    eps a a c c
    a b ab a aa
    c b cb a ca
    ab a aba b ab
    cb a cba b cb
    aba c ac
    aa c ac a fi
    ca a fi c ac
    cba a fi c ac
    ac c ac a fi
    """,
                 name="StudentMini").visu().mini().visu()

    C = NFA.spec("""
    I
    IV
    I a II c II
    II b II a III
    III c III a IV
    """,
                 name="RealMini").visu()

    (C - B).visu().mini().visu()
    (C | B).visu()
Exemplo n.º 7
0
def exam2020():
    A = NFA.spec("""
    1 2
    1
    1 a 1 b 2
    2 a 3 b 2
    3 a 3 b 1""").visu()
    A.texvisu()
    A.texvisu("1 _ 2 > 3", "1 la 1 2 lb 2 3 la 3 3 ~ 1")
    A.dfa().visu().mini().visu()
Exemplo n.º 8
0
def simplifyArdenSystem():
    ard = NFA.spec("""
    A
    C A
    A 0 B 1 C
    B 0 C
    C 0 C 1 C eps A
    """,
                   name="Arden").visu().mini().visu()

    (-ard).mini().visu()
Exemplo n.º 9
0
def exoEqualRegexp():
    A = NFA.spec("""
    1 3
    4
    1 a 2 a 3
    2 b 3
    3 a 4 eps 1""").named("A").visu()

    B = NFA.spec("""
    1 
    4 2
    1 a 2
    2 b 3 a 4
    3 a 4
    4 eps 2""").named("B").visu()
    A = A.rm_eps().visu()
    B = B.rm_eps().visu()

    A = A.dfa().visu()
    B = B.dfa().visu().complete().visu().mini().visu()
Exemplo n.º 10
0
def testproducts():
    NFA.VISULANG = 5
    NFA.VISU_INITIAL_ARROW = False
    Char = NFA.spec("""
    0
    1
    0 1 1
    1 0 0
    """).map(g=int).named("Char").visu()
    _ = NFA.Stay
    C1 = Char.copy().map(g=lambda x: "b" if x else "a").named("C1")
    C2 = Char.copy().map(g=lambda x: "B" if x else "A").named("C2")
    from itertools import product
    NFA._sprod2_brutal(Char, Char, {(0, 0), (1, 1)}).visu()
    NFA._sprod2_brutal(Char, Char, set(product([0, 1], repeat=2))).visu()
    NFA._sprod2_brutal(Char, Char, {(_, 0), (_, 1), (1, _)}).visu()
    NFA._sprod2_brutal(Char, Char, {(_, 0), (_, 1), (1, 1)}).visu()
    NFA._sprod2_brutal(Char, Char,
                       {x
                        for y in [0, 1] for x in {(_, y), (y, _)}}).visu()
    (Char @ Char).visu()
    C1.visu()
    NFA._sprod2_brutal(Char, C1, set(product([0, 1, _], ["a", 'b', _]))).visu()
    (NFA.of_word([1, 2, 3]) @ NFA.of_word([_, _])).visu()

    NFA.sprod_brutal(Char, C1, svec=set(product([0, 1, _],
                                                ["a", 'b', _]))).visu()
    X = NFA.sprod_brutal(Char,
                         C1,
                         C2,
                         svec=set(
                             product([0, 1, _], ["a", 'b', _],
                                     ["A", "B", _]))).visu()
    Y = NFA.sprod_brutal(Char,
                         Char,
                         Char,
                         svec=set(product([0, 1, _], repeat=3))).visu()

    # on the fly version tests
    svec = NFA.shuffle([1, 1], [_]) | NFA.shuffle([0], [_, _])
    P = NFA.sprod_brutal(Char, Char, Char, svec=svec).visu()

    svec = NFA.shuffle([1, 1], [_]) | NFA.shuffle([0], [_, _])
    P = NFA.sprod(Char, Char, Char, svec=svec, record_steps=True).visu()

    P.visusteps(P._grow_step)

    svec = {(1, 1)}
    P = NFA.sprod_brutal(Char, Char, svec=svec, silent=[0]).visu()
    Q = NFA.sprod(Char, Char, svec=svec, silent=[0]).visu()
    NFA.VISULANG = 10
    NFA.VISU_INITIAL_ARROW = True
Exemplo n.º 11
0
def isomorphisms():
    IH = NFA.spec("""
    0
    0
    0 B 0 A 1
    1 A 0 
    """,
                  name="(AA|B)*")

    IH.visu().complete().visu().ihomo({'a': 'AB', 'b': 'BA'}).visu()

    IH.ihomo_visu({'a': 'AB', 'b': 'BA'})
    IH.complete().ihomo_visu({'a': 'AB', 'b': 'BA'})
Exemplo n.º 12
0
def even_odd():
    P = NFA.spec(
        """
    P I
    P I Ia Paa
    P a Pa b P 
    Pa a Paa
    Paa a Pa b I
    I b I a Ia
    Ia a Iaa b P
    Iaa a Ia 
    """,
        name="a_blocks_alternate_even_odd").visu().dfa().visu().mini().visu()
Exemplo n.º 13
0
def hard_minimisation():
    tab = False

    def fib(n):
        if n == 0: return "0"
        if n == 1: return "1"
        return fib(n - 1) + fib(n - 2)

    def FIB(n):
        return {fib(k) for k in range(n)}

    S = FIB(6)

    A = NFA.of_set(S).dfa().renum().visu().mini(table=tab).visu()

    # starts with final, need to ensure I, II and not II, I, prev bug.
    B = NFA.spec("""
    0
    0
    0 a 1 b 1
    1 b 0 a 1
    """).visu().mini(table=tab).visu()

    C = NFA.of_word("aaaa").complete().visu().mini(table=tab).visu()
#!/usr/bin/env python3
from nfa import NFA

NFA.clear()         # clean visu.pdf on each run
# NFA.NOVISU=True   # check that all runs without generating PDFs

A = NFA.spec("""
0
2
0 a 1 a 2
1 a 0 b 2 
""",name="A").visu()

A.run("aaab")

B = NFA.spec("""
0
0
0 c 1 a 0
1 c 0""", name="B").visu()

NFA.visutext("DETERMINISATION")

A.visu().dfa().visu(doublearrows=True)

NFA.visutext("PRODUCTS")
from itertools import product
A.visu(); B.visu()

(A & B).visu().dfa().visu().mini().visu()
Exemplo n.º 15
0
def interfaceAutomataProduct():
    NFA.VISULANG = 0
    client = NFA.spec("""
        1 
        1
        1 msg! 2
        2 ok? 1""").named("client").visu()

    comp = NFA.spec("""
        1 
        1
        1 msg? 2
        2 envoyer! 3
        3 nack? 4 ack? 6
        4 envoyer! 5
        5 ack? 6 nack? 7
        6 ok! 1
        7 echec! 1
        """).named("comp").visu()

    comp_client = NFA.interface_sprod(comp, client, visu_dnice=True).visu()

    canal = NFA.spec("""
            1 
            1
            1 envoyer? 2
            2 token! 3
            3 ack! 4
            4 liberer_token! 1
            D nack! D
            """).named("canal").visu()
    # print(canal)

    canal_comp_client = NFA.interface_sprod(
        comp_client, canal, visu_dnice=True).visu().trim().visu()
    NFA.VISULANG = 10

    Vendor = NFA.spec("""
    0
    7
    0 pay? 1
    ## 1 deliver! 2 
    1 verif! 3
    ## 2 verif! 4
    3 deliver! 4 transfer? 5
    4 transfer? 7
    5 deliver! 7
    """,
                      name="Vendor",
                      worder=tuple)
    Vendor.visu()

    Client = NFA.spec("""
    0
    0
    0 pay! 0 deliver? 0 cancel! 0
    """,
                      name="Client",
                      worder=tuple)
    Client.visu()

    Bank = NFA.spec("""
    0
    1 3
    0 cancel? 1
    0 verif? 2
    2 transfer! 3
    """,
                    name="Bank",
                    worder=tuple)
    Bank.visu()

    CB = NFA.interface_sprod(Client, Bank).visu()
    Sys = NFA.interface_sprod(CB, Vendor).visu()
Exemplo n.º 16
0
def ctl_tests():
    from ctl import AND, OR, NOT, TT, FF, IMPLIES, XOR, EX, EU, AU, AX, AG, EG, AF, EF, checkvisu
    n = NFA.VISULANG
    NFA.VISULANG = 0

    p, q = "pq"
    exo = NFA.spec("""
    0
    __
    0  1  2
    1  0
    2  3  5  9
    3 2 4 6
    4 5
    5 1 6 7
    6 9
    7 1 2
    8  8 
    9 1 6 9
    10 8
    11 10 2
    """,
                   name="Exo1-exam17",
                   style="ts")

    labels = {
        1: {p},
        4: {p},
        6: {p},
        7: {p},
        8: {q, p},
        9: {p, q},
        10: {p},
        11: {p}
    }

    # exo.label(labels,f_str).visu()

    # fo =  (OR, (AND, (EX, p), (NOT,p)), p)
    # fo = (OR, p, (NOT, p))
    # fo = (OR, (NOT, (EX, (NOT, p))), (AX, p))
    # fo = (IMPLIES, p, q)
    # fo = (IMPLIES, (NOT, p), (AX, p))
    # fo = (XOR, p, (AX, p))
    # fo = (AND, (AU, TT, q), (AF,q))
    # fo = (EF, q)
    # fo = (AND, (NOT, (EU, TT, (NOT, p))), (AG, p))
    # fo = (AG, p)
    fo = (AND, (EG, q), (EG, p), (EG, (OR, p, q)), (AG, (OR, p, q)))

    checkvisu(exo, labels, fo)

    kat = NFA.spec("""
    0
    __
    0 1 2
    1 0 3
    2 1
    3 3
    """,
                   name="Katoen examples",
                   style="ts").visu()

    labels = {0: {p}, 1: {p, q}, 2: {q}, 3: {p}}
    kat.texvisu("0 \ 2 / 1 > 3", "3 lb 3")

    for f in [
            q,
        (EX, p),
        (AX, p),
        (EG, p),
        (AG, p),
        (EF, (EG, p)),
        (EF, (AG, p)),
        (AF, (EG, p)),
        (AF, (AG, p)),
        (AU, p, q),
        (EU, p, q),
        (EU, p, (AND, (NOT, p), (AU, (NOT, p), q))),
        (AX, (AX, q)),
        (EX, (AX, q)),
        (AX, (EX, q)),
        (EX, (EX, q)),
        (AX, (AF, (AND, p, q))),
        (AF, (AX, (AND, p, q))),
    ]:
        checkvisu(kat, labels, f, visu=("simple", "detailed"))

    NFA.VISULANG = n
Exemplo n.º 17
0
NFA.visutext("Simplify Expressions (Exercise)")

a, b, eps = E("a"), E("b"), E("")
mystery = ( eps | a.star()+(b+a.star()).star()+b )+a.star()
mystery.show()
mystery2 = ( eps | a.star()+( eps | b+(a.star()+b).star()+a.star() )+b )+a.star()
mystery2.show()

ba_BA = (E("aa") | E("bb") |
         ( (E("ab") | E("ba")) +  (E("aa") | E("bb")).star() + (E("ab") | E("ba")) )).star()
ba_BA.show()

NFA.spec("""
AB
AB
AB a aB b Ab
aB a AB b ab
ab a Ab b aB
Ab a ab b AB
""").named("even numbers of a and b").visu()

NFA.visutext("Rational Identities (Exercise)")

α, β = E("α"), E("β")

ident_11 = (α|β).star().show()
ident_12 = (α.star() | β.star()).show()

NFA.VISULANG=6
ident_21 = ( (α+β).star() + α ).show()
ident_22 = ( α+(β+α).star() ).show()