Obsah

Zápisky

Slovník pojmů

Silná normalizace

Slabá normalizace

Konfluence

Determinismus

Konfigurace

Přepisovací funkce

Finální konfigurace

Stuck state

Operační sémantika

Operační sémantika malého kroku (SOS - Small Step Operational Semantics)

Operační sémantika velkého kroku (BOS - Big Step Operational Semantics)

Denotační sémantika

Energie a důkaz konečnosti

Potenční množina

Množina

Sekvence

MultiSet

->*

Příklady

Příklad: mějme gramatiku a vytvořme na ní sémantiky (SOS, BOS a DS)

E = E | (E+E) | (E*E) | N

SOS

E → N

(N1 + N2) → N3 kde N3 = N1+N2

(N1 * N2) → N3 kde N3 = N1 * N2

E1 → E2


(E3 + E1) → (E3 + E2)

E1 → E2


(E3 * E1) → (E3 * E2)

E1 → E2


(E1 + E3) → (E2 + E3)

E1 → E2


(E1 * E3) → (E2*E3)

BOS

E → N

(N1 + N2) → N3 kde N3 = N1 + N2

(N1 * N2) → N3 kde N3 = N1*N2

E1 →* N1 , E2 →* N2 , N = N1 + N2


(E1 + E2) →* N

E1 →* N1 , E2 →* N2 , N = N1 * N2


(E1* E2) →* N

DS

Vyhodnocovací strom pomocí naší primitivní SOS

Máme výraz: (3 + (6 * (4 + 8)) + (4 * 8))

Při vyhodnocování postupujeme odspodu, bacha, mezi cisly s mezery neni znamenko, ta jsou rovnou vyhodnocena napr radek 4 8 jsou dve vetve : prvni: (char)4 →(int) 4 a druha: (char)8 →(int) 8

4 8

  1. ——

6 (4 + 8)

  1. ————

3 (6 * (4 + 8)) 4 8

  1. —————— ——-

(3 + (6 * (4 + 8))) (4 * 8)

  1. ——————————

1)) + (4 * 8))

Studenti a rozvrhy - chceme seřazený rozvrh studenta

Quicksort

malé epsilon - ε je prázdná množina a · je symbol zřetězení.

Zápis relací

QSORT({A1, A2, …, An}) = QSORT(A|A ∈ {A1, A2, …, An} AND A < A1)·A1·QSORT(A|A ∈ {A1, A2, …, An} AND A > A1) QSORT({}) = ε

Velký krok

QSORT({}) = ε

QSORT(A) → B

znak ā neznamena nic podstatneho, jde jen o to, aby se rozlisily podmnoziny

B = QSORT(ā)·A1·QSORT(a)

Malý krok

QSORT(A) → QSORT(ε, ε, A, A1)

QSORT(A, B, C, p)

QSORT(A, B, ε, p) = QSORT(ε, ε, A, A1)·A1·QSORT(ε, ε, B, B1)

QSORT(ε, ε, ε, p) = ε

QSORT(A, ε, ε, p) → QSORT(ε, ε, A, A1)

QSORT(ε, A, ε, p) → QSORT(A, ε, ε, p)

QSORT(A, B, ε, p) = A·QSORT(ε, ε, B, B1) pokud length(A) = 1

QSORT(A, B, ε, p) = QSORT(ε, ε, A, A1)·B pokud length(B) = 1

Mergesort

Velký krok

 MSORT({}) -> ε
 MSORT(A) -> A  if len(A) = 1
 MSORT(B)·MSORT(C) -> D pro všechny x ∈ B: pro všechny y ∈ C: x < y
 -----------------------------------------------------------
                    MSORT(A) -> D 

Selectsort

Malý krok

 A = {..,-1, 0, 1, ...}   
 SSORT: A* -> A*
 FMIN: (A*->A) -> A
 FMIN({A_1 , .., A_n}, ε} -> FMIN({A_2, .., A_n}, A_1}
 FMIN({A_1, .., A_n}, min} -> FMIN({A_2, .., A_n}, min} if min<A_1
 FMIN({A_1, .., A_n}, min} -> FMIN({A_2, .., A_n}, A_1} if min>A_1
 FMIN(ε, min} -> ε
 //A-FMIN(A,ε) - odstraní prvek, který vrátí funkce FMIN z A
 SSORT(C,D) -> SSORT(C-FMIN(C,ε), D·FMIN(C,ε))
 SSORT(e,D) -> D

Příklady z knihy

2.2

3.2

3.3

3.4

//udělám jen velmi jednoduše pro mul
<mul.Q, e> -> <Q, 1>
<mul.Q, N> -> <Q, N> 

3.8

3.9

3.12

BOS

3.16

doplňujeme ELM o if a operace s booleanem
E = NE
NE = (NE_1 op NE_2) | (if BE NE_1 NE_2) | N
BE = (NE_1 Rop NE_2) | (BE_1 Lop BE_2) | B
N = int
B - {true, false}
BOS
 E -> NE
 N_1 op N_2 -> N
  
  NE_1 -> N_1;NE_2 -> N_2; N = N_1 op N_2
 ----------------------------------------
           (NE_1 op NE_2) -> N
  BE_1 -> B_1;BE_2 -> B_2; B = B_1 op B_2
 ----------------------------------------
           (BE_1 Rop BE_2) -> B
  NE_1 -> N_1;NE_2 -> N_2; N = N_1 Lop N_2
 ----------------------------------------
           (NE_1 Lop NE_2) -> B
  NE_1 -> N_1;NE_2 -> N_2; BE -> B; B = true
 ----------------------------------------
           (if BE NE_1 NE_2) -> NE_1
  NE_1 -> N_1;NE_2 -> N_2; BE -> B; B = false
 ----------------------------------------
           (if BE NE_1 NE_2) -> NE_2

Denotační sémantika

4.1 Prepis Signed a Unsigned Int literalu na cisla

1) 3 + (6 * (4 + 8