24.01.2014 Views

Formalny opis rachunku lambda i nie tylko, kolejna wersja

Formalny opis rachunku lambda i nie tylko, kolejna wersja

Formalny opis rachunku lambda i nie tylko, kolejna wersja

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

8.2 Porządek podwyrażeń<br />

W zbiorze podwyrażeń termu M definiujemy porządek. Mówimy, że podterm N 1<br />

leży na lewo od podtermu N 2 (lub podterm N 2 leży na prawo od podtermu N 1 ),<br />

jeżeli zachodzi jedna z następujących możliwości:<br />

1) N 1 = M i N 2 jest właściwym podtermem M,<br />

2) M = M 1 M 2 , N 1 jest podwyraże<strong>nie</strong>m M 1 i N 2 jest podwyraże<strong>nie</strong>m M 2 ,<br />

3) M = M 1 M 2 , N 1 i N 2 są podwyrażeniami M i (dla i = 1 lub i = 2) oraz jako<br />

podwyrażenia M i podwyraże<strong>nie</strong> N 1 leży na lewo od N 2 ,<br />

4) M = λxM 1 , N 1 i N 2 są podwyrażeniami M 1 oraz jako podwyrażenia M 1<br />

podwyraże<strong>nie</strong> N 1 leży na lewo od N 2 .<br />

8.3 Prefiks i sufiks podwyrażenia<br />

Jeżeli termy <strong>rachunku</strong> <strong>lambda</strong> definiujemy jako słowa i term N jest podtermem<br />

termu M, to słowo N jest podsłowem słowa M, a więc wyznacza pewien prefiks<br />

pref M (N) słowa M i pewien sufiks suff M (N) tego słowa, takie że M jest konkatenacją<br />

pref M (N) N suff M (N).<br />

Za pomocą prefiksów podwyrażeń możemy wyrazić porządek podwyrażeń.<br />

Lemat 8.1 W termie M podwyraże<strong>nie</strong> N 1 leży na lewo od podwyrażenia N 2 wtedy<br />

i <strong>tylko</strong> wtedy, gdy słowo pref M (N 1 ) jest właściwym prefiksem słowa pref M (N 2 ) lub<br />

słowo pref M (N 1 )N 1 jest właściwym prefiksem słowa pref M (N 2 )N 2 . ✷<br />

Jeżeli <strong>nie</strong> będzie to prowadzić do <strong>nie</strong>porozumień, zamiast pref M (N) będziemy<br />

pisać pref(N).<br />

8.4 Dokład<strong>nie</strong>j o podtermach<br />

Aby dokład<strong>nie</strong>j mówić o podtermach wprowadzimy specjalną notację. Będziemy<br />

rozważać wyrażenia <strong>rachunku</strong> <strong>lambda</strong> ze specjalnymi zmiennymi. Wszystkie te<br />

zmienne będziemy przedstawiać tym samym symbolem [ ]. Każda może wystąpić<br />

w termie dokład<strong>nie</strong> jeden raz, a więc różne wystąpienia symbolu [ ] w termie oznaczają<br />

różne zmienne tego rodzaju. Symbol M[ ] oznacza term, w którym występuje<br />

jedna (ewentual<strong>nie</strong> przynajm<strong>nie</strong>j jedna) taka zmienna. Zapis M[N] oznacza wynik<br />

zastępowania zmiennej [ ] przez N, czyli term M[[ ] := N].<br />

Fakt 8.2 Term N jest podtermem wyrażenia M wtedy i <strong>tylko</strong> wtedy, gdy M =<br />

M ′ [N] dla pewnego wyrażenia M ′ z jednym wystąpie<strong>nie</strong>m zmiennej [ ]. ✷<br />

Umawiamy się, że różne wystąpienia zmiennych [ ] w wyrażeniu podajemy w<br />

kolejności od najbardziej lewego do prawego. Tak więc M[ ][N] oznacza wyraże<strong>nie</strong> z<br />

podtermem N. W tym wyrażeniu na lewo od podtermu N znajduje się wystąpie<strong>nie</strong><br />

zmiennej [ ].<br />

Lemat 8.3 Jeżeli w wyrażeniu M podterm N 1 znajduje się na lewo od podtermu<br />

N 2 , to albo M = M ′ [N 1 ][N 2 ] dla pewnego M ′ , albo też M = M ′ [N ′ 1[N 2 ]] dla pewnych<br />

M ′ i N ′ 1. W pierwszym przypadku pref M (N 1 ) N 1 jest prefiksem pref M (N 2 ), w<br />

drugim – pref M (N 2 ) N 2 jest prefiksem pref M (N 1 ) N 1 .<br />

17

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

Saved successfully!

Ooh no, something went wrong!