10.02.2019 Views

opora

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

KAPITOLA 3. REGULÁRNÍ JAZYKY 40<br />

3.3.4 Soustavy rovnic nad regulárními výrazy<br />

Příklad 3.20<br />

Budiž dána soustava rovnic<br />

X = a 1 X + a 2 Y + a 3<br />

Y = b 1 X + b 2 Y + b 3<br />

Její řešení je:<br />

X = (a 1 + a 2 b ∗ 2b 1 ) ∗ (a 3 + a 2 b ∗ 2b 3 )<br />

Y = (b 2 + b 1 a ∗ 1a 2 ) ∗ (b 3 + b 1 a ∗ 1a 3 )<br />

Důkaz: Cvičení.<br />

✷<br />

Definice 3.13 Soustava rovnic nad regulárními výrazy je ve standardním tvaru<br />

vzhledem k neznámým ∆ = {X 1 , X 2 , ..., X n }, má-li soustava tvar<br />

∧<br />

X i = α i0 + α i1 X 1 + α i2 X 2 + ... + α in X n<br />

i∈{1,...,n}<br />

kde α ij jsou regulární výrazy nad nějakou abecedou Σ, Σ ∩ ∆ = ∅.<br />

Věta 3.15 Je-li soustava rovnic nad regulárními výrazy ve standardním tvaru,<br />

pak existuje její minimální pevný bod a algoritmus jeho nalezení.<br />

Důkaz: Vyjadřujeme hodnotu jednotlivých proměnných pomocí řešení rovnice<br />

X = pX +q jako regulární výraz s proměnnými, jejichž počet se postupně snižuje:<br />

Z rovnice pro X n vyjádříme např. X n jako regulární výraz nad Σ a X 1 , ..., X n−1 .<br />

Dosadíme za X n do rovnice pro X n−1 a postup opakujeme. Jsou přitom možné<br />

(ale ne nutné) různé optimalizace tohoto pořadí.<br />

✷<br />

Příklad 3.21 Vyřešte soustavu rovnic nad regulárními výrazy:<br />

(1) X 1 = (01 ∗ + 1)X 1 + X 2<br />

(2) X 2 = 11 + 1X 1 + 00X 3<br />

(3) X 3 = ε + X 1 + X 2<br />

Řešení:<br />

1. Výraz pro X 3 dosadíme z (3) do (2). Dostaneme soustavu:<br />

(4) X 1 = (01 ∗ + 1)X 1 + X 2<br />

(5) X 2 = 11 + 1X 1 + 00(ε + X 1 + X 2 ) = 00 + 11 + (1 + 00)X 1 + 00X 2<br />

2. Ze (4) vyjádříme X 1 s využitím řešení rovnice X = pX + q (věta 3.14):<br />

(6) X 1 = (01 ∗ + 1) ∗ X 2 = (0 + 1) ∗ X 2<br />

3. Dosazením do (5):<br />

(7) X 2 = 00 + 11 + (1 + 00)(0 + 1) ∗ X 2 + 00X 2 =<br />

= 00 + 11 + (1 + 00)(0 + 1) ∗ X 2<br />

4. Vypočtením X 2 jako řešení rovnice X = pX + q dostaneme:<br />

(8) X 2 = ((1 + 00)(0 + 1) ∗ ) ∗ (00 + 11)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!