Bổ đề Bơm trong thuật ngữ của Cư sĩ là gì?


81

Tôi thấy câu hỏi này và tò mò không biết bổ đề bơm là gì ( Wikipedia không giúp được gì nhiều).

Tôi hiểu rằng về cơ bản, đó là một bằng chứng lý thuyết phải đúng để một ngôn ngữ nằm trong một lớp nhất định, nhưng ngoài ra thì tôi không thực sự hiểu nó.

Có ai quan tâm đến việc cố gắng giải thích nó ở mức độ khá chi tiết theo cách dễ hiểu của các nhà không toán học / tiến sĩ khoa học tổng hợp không?


2
Tôi tin chắc rằng không có con đường tắt nào cho toán học / TCS: "các thuật ngữ của giáo dân" sẽ không giúp bạn hiểu được. Điều đó nói rằng, tất nhiên chúng tôi đã đề cập nhiều đến vấn đề này trên Khoa học Máy tính ; xem đây , đâyđây .
Raphael

1
Lưu ý rằng sinh viên năm nhất thường phải hiểu định lý và cách chứng minh của nó và áp dụng nó, vì vậy yêu cầu về một thứ gì đó "có thể hiểu được bởi những người không phải [...] tiến sĩ" sẽ dễ dàng đáp ứng được bằng cách xem bất kỳ sách giáo khoa ngôn ngữ chính thống nào.
Raphael

Bổ đề bơm không phải là một bằng chứng: như tên cho thấy, nó là một bổ đề .
nbro

Câu trả lời:


157

Bổ đề bơm là một bằng chứng đơn giản để chỉ ra rằng một ngôn ngữ không chính quy, nghĩa là không thể xây dựng Máy trạng thái hữu hạn cho nó. Ví dụ chính tắc là ngôn ngữ (a^n)(b^n). Đây là ngôn ngữ đơn giản chỉ là một số as bất kỳ , theo sau là cùng một số bs. Vì vậy, các chuỗi

ab
aabb
aaabbb
aaaabbbb

v.v ... bằng ngôn ngữ, nhưng

aab
bab
aaabbbbbb

vv không.

Nó đủ đơn giản để xây dựng một FSM cho các ví dụ sau:

FSM

Cái này sẽ hoạt động đến n = 4. Vấn đề là ngôn ngữ của chúng ta không đặt bất kỳ ràng buộc nào đối với n, và Máy trạng thái hữu hạn phải là hữu hạn. Bất kể tôi thêm bao nhiêu trạng thái vào máy này, ai đó có thể cung cấp cho tôi đầu vào trong đó n bằng số trạng thái cộng với một và máy của tôi sẽ bị lỗi. Vì vậy, nếu có thể có một cỗ máy được xây dựng để đọc ngôn ngữ này, thì phải có một vòng lặp ở đâu đó để giữ cho số lượng trạng thái là hữu hạn. Với các vòng lặp này được thêm vào:

FSM 2

tất cả các chuỗi trong ngôn ngữ của chúng tôi sẽ được chấp nhận, nhưng có một vấn đề. Sau bốn agiây đầu tiên , máy sẽ không đếm được có bao nhiêu as đã được nhập vào vì nó vẫn ở trạng thái cũ. Điều đó có nghĩa là sau bốn, tôi có thể thêm bao nhiêu as tùy thích vào chuỗi mà không cần thêm bất kỳ bs nào và vẫn nhận được cùng một giá trị trả về. Điều này có nghĩa là các chuỗi:

aaaa(a*)bbbb

với (a*)đại diện cho bất kỳ số as, tất cả sẽ được máy chấp nhận mặc dù rõ ràng chúng không phải là tất cả bằng ngôn ngữ. Trong bối cảnh này, chúng tôi sẽ nói rằng một phần của chuỗi (a*)có thể được bơm. Thực tế là Máy trạng thái hữu hạn là hữu hạn và n không bị giới hạn, đảm bảo rằng bất kỳ máy nào chấp nhận tất cả các chuỗi trong ngôn ngữ PHẢI có thuộc tính này. Máy phải lặp lại tại một số điểm và tại thời điểm mà nó lặp lại thì ngôn ngữ có thể được bơm. Do đó, không có Máy trạng thái hữu hạn nào có thể được xây dựng cho ngôn ngữ này và ngôn ngữ này không chính quy.

Hãy nhớ rằng Regular Expressions và State Machines hữu hạn được tương đương , sau đó thay thế abvới khai mạc và bế thẻ Html mà có thể được nhúng vào trong nhau, và bạn có thể thấy lý do tại sao nó không phải là có thể sử dụng biểu thức thông thường để phân tích cú pháp Html


2
Sơ đồ thứ hai của bạn cũng không chính xác ở chỗ nó có thể tạo ra baaaabbbb.
James

3
@James đó là sự thật, nó có thể được khắc phục khá đơn giản bằng cách thêm một trạng thái chấp nhận khác nhưng chỉ vì mục đích đơn giản là tôi sẽ để nguyên như vậy.
Graphics Noob

1
Câu trả lời tốt nhưng không có đề cập rằng bổ đề bơm có thể được sử dụng để chứng minh rằng một ngôn ngữ LÀ bối cảnh tự do, không chỉ đều đặn Phản Chứng
MobileMon

1
Điều này thậm chí không cho thấy một cách chắc chắn rằng điều đó a^n b^nlà không thường xuyên, cũng như không đề xuất nhiều trực giác về bổ đề Pumping.
Raphael

1
@GraphicsNoob Bổ đề bơm KHÔNG phải là một bằng chứng, nó là một bổ đề, như tên cho thấy. Một Bổ đề là một đề xuất đã được chứng minh. Bổ đề có thể được coi là một định lý nhỏ hơn không quá quan trọng, thường được sử dụng để chứng minh hoặc chỉ ra các mệnh đề hoặc phát biểu khác. Tôi không tin rằng một câu trả lời bắt đầu nói rằng "bổ đề bơm là một bằng chứng" hiện có 114 phiếu ủng hộ, đây là lý do tại sao các câu hỏi và câu trả lời nên được bỏ phiếu cùng với mô tả hoặc giải thích.
nbro

15

Đó là một thiết bị nhằm chứng minh rằng một ngôn ngữ nhất định không thể thuộc một lớp nhất định.

Chúng ta hãy xem xét ngôn ngữ của dấu ngoặc cân đối (có nghĩa là các ký hiệu '(' và ')', và bao gồm tất cả các chuỗi được cân bằng theo nghĩa thông thường và không có chuỗi nào là không). Chúng ta có thể sử dụng bổ đề bơm để chỉ ra điều này không thường xuyên.

(Một ngôn ngữ là một tập hợp các chuỗi có thể có. Trình phân tích cú pháp là một số loại cơ chế mà chúng ta có thể sử dụng để xem liệu một chuỗi có trong ngôn ngữ hay không, vì vậy nó phải có khả năng phân biệt giữa một chuỗi trong ngôn ngữ hay một chuỗi bên ngoài ngôn ngữ. Một ngôn ngữ là "thông thường" (hoặc "không theo ngữ cảnh" hoặc "phân biệt ngữ cảnh" hoặc bất cứ thứ gì) nếu có một trình phân tích cú pháp thông thường (hoặc bất cứ thứ gì) có thể nhận ra nó, phân biệt giữa các chuỗi trong ngôn ngữ và các chuỗi không có trong ngôn ngữ.)

LFSR Consulting đã cung cấp một mô tả tốt. Chúng ta có thể vẽ trình phân tích cú pháp cho một ngôn ngữ thông thường dưới dạng một tập hợp hữu hạn các hộp và mũi tên, với các mũi tên đại diện cho các ký tự và các hộp kết nối chúng (hoạt động như "trạng thái"). (Nếu nó phức tạp hơn thế, nó không phải là một ngôn ngữ thông thường.) Nếu chúng ta có thể nhận được một chuỗi dài hơn số hộp, điều đó có nghĩa là chúng ta đã xem qua một hộp nhiều hơn một lần. Điều đó có nghĩa là chúng ta đã có một vòng lặp và chúng ta có thể đi qua vòng lặp bao nhiêu lần tùy ý.

Do đó, đối với một ngôn ngữ thông thường, nếu chúng ta có thể tạo một chuỗi dài tùy ý, chúng ta có thể chia nó thành xyz, trong đó x là các ký tự chúng ta cần để bắt đầu vòng lặp, y là vòng lặp thực tế và z là bất kỳ thứ gì chúng ta cần làm cho chuỗi hợp lệ sau vòng lặp. Điều quan trọng là tổng độ dài của x và y là có giới hạn. Rốt cuộc, nếu chiều dài lớn hơn số hộp, rõ ràng chúng ta đã đi qua một hộp khác trong khi thực hiện việc này, và do đó, có một vòng lặp.

Vì vậy, trong ngôn ngữ cân bằng của chúng ta, chúng ta có thể bắt đầu bằng cách viết bất kỳ số lượng dấu ngoặc đơn nào bên trái. Đặc biệt, đối với bất kỳ trình phân tích cú pháp nào đã cho, chúng ta có thể viết nhiều parens bên trái hơn là có các hộp, và do đó, trình phân tích cú pháp không thể biết có bao nhiêu parens bên trái. Do đó, x là một số parens bên trái, và điều này được cố định. y cũng là một số parens bên trái và điều này có thể tăng lên vô thời hạn. Chúng ta có thể nói rằng z là một số parens bên phải.

Điều này có nghĩa là chúng ta có thể có một chuỗi 43 parens trái và 43 parens phải được bộ phân tích cú pháp của chúng tôi nhận dạng, nhưng trình phân tích cú pháp không thể biết được điều đó từ một chuỗi 44 parens trái và 43 parens phải, không có trong ngôn ngữ của chúng ta, vì vậy trình phân tích cú pháp không thể phân tích cú pháp ngôn ngữ của chúng tôi.

Vì bất kỳ trình phân tích cú pháp thông thường nào có thể có một số lượng ô cố định, chúng ta luôn có thể viết nhiều ô bên trái hơn số đó và bằng bổ đề bơm, sau đó chúng tôi có thể thêm nhiều ô phân tích trái theo cách mà trình phân tích cú pháp không thể biết được. Do đó, ngôn ngữ trong dấu ngoặc cân bằng không thể được phân tích bằng trình phân tích cú pháp thông thường, và do đó không phải là một biểu thức chính quy.


Câu trả lời tuyệt vời và đọc cho những người tìm cách nắm bắt các chuỗi cân bằng với các biểu thức chính quy.
Justin Johnson

9

Đó là một điều khó hiểu theo thuật ngữ của giáo dân, nhưng về cơ bản các cụm từ thông dụng phải có một chuỗi con không trống bên trong nó có thể được lặp lại nhiều lần tùy thích trong khi toàn bộ từ mới vẫn có giá trị cho ngôn ngữ.

Trong thực tế , bổ đề bơm không đủ để CHỨNG MINH một ngôn ngữ đúng, mà là một cách để thực hiện chứng minh bằng mâu thuẫn và hiển thị một ngôn ngữ không phù hợp với loại ngôn ngữ (Thông thường hoặc Không có ngữ cảnh) bằng cách hiển thị bổ đề bơm. không làm việc cho nó.


"Không đủ để CUNG CẤP ngôn ngữ chính xác" nghĩa là gì? Bởi "đúng", tôi đoán bạn có nghĩa là thường xuyên. Thật vậy, một ngôn ngữ thông thường thể hiện đặc tính bơm, nhưng nếu một ngôn ngữ thể hiện đặc tính bơm thì điều đó không có nghĩa là nó thường xuyên. Mặt khác, nếu ngôn ngữ không thể hiện tính chất bơm, thì chúng tôi chắc chắn rằng nó không thường xuyên. Về cơ bản, thuộc tính bơm là cần thiết nhưng không đủ để cho thấy rằng một ngôn ngữ là thường xuyên.
nbro

4

Về cơ bản, bạn có một định nghĩa về một ngôn ngữ (như XML), đó là một cách để biết liệu một chuỗi ký tự nhất định (một "từ") có phải là thành viên của ngôn ngữ đó hay không.

Bổ đề bơm thiết lập một phương pháp mà bạn có thể chọn một "từ" từ ngôn ngữ, và sau đó áp dụng một số thay đổi cho nó. Định lý nói rằng nếu ngôn ngữ là thường xuyên, những thay đổi này sẽ tạo ra một "từ" vẫn là từ cùng một ngôn ngữ. Nếu từ bạn nghĩ ra không có trong ngôn ngữ, thì ngay từ đầu ngôn ngữ đã không thể thông thường.


3

Bổ đề bơm đơn giản là bổ đề dành cho các ngôn ngữ thông thường, là các tập hợp các chuỗi được mô tả bởi các ô tự động hữu hạn, trong số những thứ khác. Đặc điểm chính của tự động hóa hữu hạn là nó chỉ có một lượng bộ nhớ hữu hạn, được mô tả bởi các trạng thái của nó.

Bây giờ, giả sử bạn có một chuỗi, được nhận dạng bởi một automaton hữu hạn và đủ dài để "vượt quá" bộ nhớ của tự động hóa, tức là ở trạng thái nào phải lặp lại. Sau đó, có một chuỗi con mà trạng thái của tự động ở đầu chuỗi con giống như trạng thái ở cuối chuỗi con. Vì việc đọc chuỗi con không thay đổi trạng thái nên nó có thể bị xóa hoặc sao chép một số lần tùy ý mà không cần tự động hóa là khôn ngoan hơn. Vì vậy những chuỗi sửa đổi này cũng phải được chấp nhận.

Ngoài ra còn có một bổ đề bơm hơi phức tạp hơn cho các ngôn ngữ không có ngữ cảnh, nơi bạn có thể loại bỏ / chèn những gì có thể được xem trực quan như dấu ngoặc đơn khớp ở hai vị trí trong chuỗi.


Đoạn văn thứ hai của bạn rất hay, nhưng đoạn đầu tiên hơi tệ: "Bổ đề bơm đơn giản là bổ đề dành cho các ngôn ngữ thông thường". Là một trong những ngôn ngữ thông thường để làm gì? Tại sao chúng ta cần bổ đề bơm? Mối quan hệ giữa bổ đề bơm và một ngôn ngữ thông thường là gì? Bạn nên trả lời tất cả những câu hỏi này, IMO.
nbro

@starblue: Bạn có thể cho biết tại sao Nếu ngôn ngữ là $ {a} $, thì độ dài bơm tối thiểu là $ 2 $; nếu ngôn ngữ là $ {a ^ n: n∈ℕ} $, thì độ dài bơm tối thiểu là $ 1 $. thêm tại đây :( math.stackexchange.com/questions/1508471/minimum-pumping-length/… ).
justin

0

Theo định nghĩa, các ngôn ngữ thông thường là những ngôn ngữ được công nhận bởi một Automaton trạng thái hữu hạn. Hãy coi nó như một mê cung: trạng thái là các phòng, chuyển tiếp là hành lang một chiều giữa các phòng, có một phòng ban đầu và một phòng thoát (cuối cùng). Như cái tên 'tự động hóa trạng thái hữu hạn' đã nói, có một số lượng phòng hữu hạn. Mỗi khi bạn đi dọc một hành lang, bạn ghi nhanh chữ cái được viết trên tường của nó. Một từ có thể được nhận ra nếu bạn có thể tìm thấy con đường từ phòng đầu tiên đến phòng cuối cùng, đi qua các hành lang được dán nhãn bằng các chữ cái của nó, theo đúng thứ tự.

Bổ đề bơm nói rằng có một độ dài tối đa (độ dài bơm) mà bạn có thể đi lang thang qua mê cung mà không bao giờ quay trở lại căn phòng mà bạn đã đi qua trước đó. Ý tưởng là vì chỉ có rất nhiều phòng riêng biệt mà bạn có thể đi bộ vào, qua một điểm nhất định, bạn phải thoát ra khỏi mê cung hoặc băng qua đường ray của mình. Nếu bạn cố gắng đi một con đường dài hơn chiều dài bơm này trong mê cung, thì bạn đang đi đường vòng: bạn đang chèn (t ít nhất một) chu trình vào con đường có thể bị loại bỏ (nếu bạn muốn vượt qua mê cung nhận ra một từ nhỏ hơn) hoặc lặp đi lặp lại (bơm) vô thời hạn (cho phép nhận ra một từ siêu dài).

Có một bổ đề tương tự cho các ngôn ngữ không có ngữ cảnh. Những ngôn ngữ đó có thể được biểu diễn dưới dạng từ được chấp nhận bởi tự động dữ liệu kéo xuống, là tự động dữ liệu trạng thái hữu hạn có thể sử dụng ngăn xếp để quyết định chuyển đổi nào sẽ thực hiện. Tuy nhiên, vì vẫn còn một số trạng thái hữu hạn, trực giác được giải thích ở trên vẫn tiếp diễn, thậm chí thông qua biểu thức chính thức của thuộc tính có thể hơi phức tạp hơn .


@Tìm kiếm một câu trả lời như thế này. Phòng ban đầu và phòng cuối cùng có giống nhau không? Tôi mắc kẹt với nhận xét này: Nếu ngôn ngữ là $ {a} $, độ dài bơm tối thiểu là $ 2 $; nếu ngôn ngữ là $ {a ^ n: n∈N} $, thì độ dài bơm tối thiểu là $ 1 $. Bạn có thể giúp tôi. thêm tại đây :( math.stackexchange.com/questions/1508471/minimum-pumping-length /… ).
justin

0

Theo thuật ngữ của giáo dân, tôi nghĩ bạn gần như đúng. Đó là một kỹ thuật chứng minh (thực tế là hai) để chứng minh rằng một ngôn ngữ KHÔNG thuộc một lớp nhất định.

Ví dụ Fer, hãy xem xét một ngôn ngữ thông thường (regexp, automata, v.v.) với vô số chuỗi trong đó. Tại một thời điểm nhất định, như starblue đã nói, bạn hết bộ nhớ vì chuỗi quá dài đối với tự động hóa. Điều này có nghĩa là phải có một đoạn của chuỗi mà máy tự động không thể biết bạn có bao nhiêu bản sao của nó (bạn đang ở trong một vòng lặp). Vì vậy, bất kỳ số lượng bản sao nào của chuỗi con đó ở giữa chuỗi và bạn vẫn đang sử dụng ngôn ngữ đó.

Điều này có nghĩa là nếu bạn có ngôn ngữ KHÔNG có thuộc tính này, tức là có một chuỗi đủ dài không có chuỗi con mà bạn có thể lặp lại bất kỳ số lần nào mà vẫn ở trong ngôn ngữ đó, thì ngôn ngữ đó không chính quy.


Câu cuối cùng, ít nhất, là sai. Ngôn ngữ bao gồm chuỗi "a" là thông thường, nhưng bạn không thể bơm nó. Nếu bạn có thể bơm một chuỗi theo một cách nhất định, nó không phải là thường xuyên. Ví dụ: ngôn ngữ có các ký hiệu '(' và ')', được tạo bằng tất cả các biểu thức cân bằng (và không có biểu thức không cân bằng) không chính quy và bạn chứng minh điều đó bằng cách bơm "()".
David Thornley

@David, cảm ơn, đã sửa câu cuối cùng. Nhưng tôi nghĩ rằng bạn đã sai về parens cân bằng. Tôi không nghĩ rằng bạn có thể chứng minh parens không đều đặn thông qua bổ đề bơm. Tôi nghĩ rằng máy bơm parens.
Brian Postow

0

Ví dụ, lấy ngôn ngữ này L = a n b n .

Bây giờ hãy thử hình dung tự động hữu hạn cho ngôn ngữ trên cho một số n .

nếu n = 1, chuỗi w = ab . Ở đây chúng ta có thể tạo một automaton hữu hạn với vòng lặp ngoài nếu n = 2, chuỗi w = a 2 b 2 . Ở đây chúng ta có thể tạo ra một automaton hữu hạn không có vòng lặp

nếu n = p thì chuỗi w = a p b p . Về cơ bản, một ô tô tự động hữu hạn có thể được giả định với 3 giai đoạn. Giai đoạn đầu tiên, cần một loạt đầu vào và bước vào giai đoạn thứ hai. Tương tự từ giai đoạn 2 đến giai đoạn 3. Chúng ta hãy gọi các giai đoạn này là x , yz .

Có một số quan sát

  1. Chắc chắn x sẽ chứa 'a' và z sẽ chứa 'b'.
  2. Bây giờ chúng ta phải rõ ràng về y :
    • trường hợp a : y chỉ có thể chứa 'a'
    • trường hợp b : y chỉ có thể chứa 'b'
    • trường hợp c : y có thể chứa sự kết hợp của 'a' và 'b'

Vì vậy, các trạng thái automaton hữu hạn cho giai đoạn y sẽ có thể nhận đầu vào 'a' và 'b' và nó cũng không được lấy thêm a và b mà không thể đếm được.

  1. Nếu giai đoạn y chỉ lấy một 'a' và một 'b', thì cần có hai trạng thái
  2. Nếu nó đang sử dụng hai 'a' và một 'b', ba trạng thái được yêu cầu với các vòng lặp ngoài, v.v.

Vì vậy, thiết kế của giai đoạn y hoàn toàn là vô hạn. Chúng ta chỉ có thể làm cho nó hữu hạn bằng cách đặt một số vòng lặp và nếu chúng ta đặt các vòng lặp, automaton hữu hạn có thể chấp nhận các ngôn ngữ ngoài L = a n b n . Vì vậy, đối với ngôn ngữ này, chúng ta không thể xây dựng một automaton hữu hạn. Do đó nó không thường xuyên.


-1

Đây không phải là một lời giải thích như vậy nhưng nó là đơn giản. Đối với a ^ nb ^ n FSM của chúng ta phải được xây dựng theo cách mà b phải biết số a đã được phân tích cú pháp và sẽ chấp nhận cùng số n của b. Một FSM không thể đơn giản làm những việc như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.