Limbaj formal

De la testwiki
Sari la navigare Sari la căutare

În matematică, logică, informatică și lingvistică 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. Se poate vorbi despre limbaje formale în multe contexte (științific, lingvistic, juridic, medical și altele) dar în acest articol tratează limbajele formale în sensul de limbaj studiat de teoria limbajelor formale.

Familiarizare

Un exemplu de alfabet poate fi {a,b}, ș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ă mulțimea cuvintelor din el nu e limitată).

Exemple de limbaje

Câteva exemple de limbaje formale:

  • mulțimea tuturor cuvintelor peste alfabetul a,b
  • mulțimea {an}, 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.

Modalități de construcție

Un limbaj formal poate fi specificat în mai multe feluri:

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 L1L2 (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 L1L2 a lui L1 cu L2 constă din toate șirurile conținute atât în L1 cât și în L2.
  • Reuniunea L1L2 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 L1L2 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 L1* constă din toate șirurile de forma w1w2...wn cu șirurile wi din L1 și n0. Aceasta include și șirul ϵ deoarece acesta se obține pentru n=0, care este o valoare permisă.
  • Inversul L1R conține versiunile în oglindă ale tuturor șirurilor din L1.
  • Amestecarea lui L1 și L2 constă din șirurile de forma v1w1v2w2...vnwn unde n1 ș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.

Legături externe

Format:Control de autoritate