Limbaje formale

De la Wikipedia, enciclopedia liberă

Salt la: Navigare, căutare

Î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 \left \{ a , b \right \}, ş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 \left\{ a^{n}\right\}, 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:

[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 L_{1} \cdot L_{2} (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 L_1 \cap L_2 a lui L1 cu L2 constă din toate şirurile conţinute atât în L1 cât şi în L2.
  • Reuniunea L_1 \cup L_2 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 L_1 \setminus L_2 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 L_{1}^{*} constă din toate şirurile de forma w1w2...wn cu şirurile wi din L1 şi n \ge 0. Aceasta include şi şirul ε deoarece acesta se obţine pentru n = 0, care este o valoare permisă.
  • Inversul L_{1}^{R} conţine versiunile în oglindă ale tuturor şirurilor din L1.
  • Amestecarea lui L1 şi L2 constă din şirurile de forma v1w1v2w2...vnwn unde n \ge 1 ş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.

Unelte personale