Limbaje formale
De la Wikipedia, enciclopedia liberă
În matematică, logică şi informatică, un limbaj formal este o mulţime de cuvinte de lungime finită (şiruri de caractere) bazate pe un alfabet finit, şi teoria ştiinţifică ce tratează aceste entităţi se numeşte teoria limbajelor formale. Putem vorbi despre limbaje formale în multe contexte (ştiinţific, legal, lingvistic şi altele) dar în acest articol vom trata limbajele formale în sensul de limbaj studiat de teoria limbajelor formale.
Cuprins |
[modifică] Familiarizare
Un exemplu de alfabet poate fi
, şi un şir peste acest alfabet ar putea fi ababba.
Un exemplu de limbaj peste acel alfabet şi care conţine şirul dat ca exemplu ar fi mulţimea tuturor şirurilor care conţin acelaşi număr de simboluri a şi b.
Cuvântul vid (adică şirul de lungime 0) este permis şi este de obicei notat cu e, ε sau λ.
Chiar dacă alfabetul este de lungime finită şi lungimea oricărui cuvânt este finită, un limbaj poate avea un număr infinit de membri (pentru că lungimea cuvintelor din el poate fi nelimitată).
[modifică] Exemple de limbaje
Câteva exemple de limbaje formale:
- mulţimea tuturor cuvintelor peste alfabetul a,b
- mulţimea
, unde n număr prim şi an înseamnă a repetat de n ori - mulţimea programelor corecte din punct de vedere sintactic într-un limbaj de programare
- mulţimea intrărilor pentru care o maşină Turing se opreşte.
[modifică] Modalităţi de construcţie
Un limbaj formal poate fi specificat în mai multe feluri:
- Ca şiruri produse de o anumită gramatică formală (vezi ierarhia Chomsky);
- Şiruri produse de o expresie regulată;
- Şiruri acceptate de un automat, cum ar fi o maşină Turing sau un automat finit;
- Dintr-o mulţime de întrebări de tip DA/NU, cele al căror răspuns este da - vezi problema deciziei.
[modifică] Operaţii cu limbaje
Se pot realiza operaţii pe limbaje pentru a obţine alte limbaje din acestea. Să presupunem că L1 şi L2 sunt două limbaje peste acelaşi alfabet.
- Concatenarea
(sau L1L2) constă din toate şirurile de forma vw unde v este un şir din L1 şi w este un şir din L2. - Intersecţia
a lui L1 cu L2 constă din toate şirurile conţinute atât în L1 cât şi în L2. - Reuniunea
a lui L1 şi L2 constă din toate şirurile conţinute în L1 sau în L2. - Complementul limbajului L1 constă din toate şirurile peste alfabet care nu sunt conţinute în L1.
- Diferenţa
a lui L1 şi L2 constă din toate şirurile conţinute în L1 dar nu şi în L2. - Câtul la dreapta L1 / L2 al lui L1 cu L2 constă din toate şirurile v pentru care există un şir w în L2 aşa încât vw este în L1.
- Închiderea Kleene
constă din toate şirurile de forma w1w2...wn cu şirurile wi din L1 şi
. Aceasta include şi şirul ε deoarece acesta se obţine pentru n = 0, care este o valoare permisă. - Inversul
conţine versiunile în oglindă ale tuturor şirurilor din L1. - Amestecarea lui L1 şi L2 constă din şirurile de forma v1w1v2w2...vnwn unde
şi v1,...,vn sunt şiruri pentru care concatenarea v1...vn este din L1 şi w1,...,wn sunt şiruri pentru care w1...wn este din L2.
O întrebare importantă pentru teoria limbajelor formale este "cât este de dificil să decidem dacă un cuvânt dat aparţine unui limbaj?" Acesta este domeniul teoriei computabilităţii şi teoriei complexităţii.

