Một câu hỏi cơ bản về toán học
Câu trả lời này đã được tổ chức lại sau khi OP đưa ra nhiều biện pháp hơn về ý nghĩa và ý định của câu hỏi của anh ấy. Tôi cũng bình luận các câu trả lời khác ở đây, vì thật khó xử khi làm như vậy trong định dạng bình luận thông thường. Bình luận họ cũng cung cấp cái nhìn sâu sắc thêm về các vấn đề có liên quan.
Tóm lại
Trực giác của bạn khá chính xác rằng chuỗi trống đóng vai trò đặc biệt trong nghiên cứu về chuỗi và ngôn ngữ chính thức, và đó là lý do tại sao nó thường được đặt một tên hoặc ký hiệu đặc biệt. Các chuỗi trên một tập hợp các ký hiệu nhất định tạo thành một cấu trúc đại số gọi là đơn hình, với phép toán nối có một phần tử trung tính: chuỗi rỗng. Xem câu trả lời của J.-E. Pin .
Bạn cũng đúng rằng có thể có nhiều ký hiệu hoặc đại diện khác cho nó. Sự lựa chọn của đại diện được quyết định bởi sự thuận tiện, tính thuyết phục và đơn giản hóa diễn ngôn, lý luận và tính toán.
Một sự tiện lợi như vậy, như bạn tự hỏi chính xác, là có một ký hiệu thống nhất cho tất cả các chuỗi, bao gồm cả chuỗi trống. Điều này có thể đạt được bằng nhiều cách, cho dù trên giấy hay trong máy tính. Chấm dứt chuỗi bằng một biểu tượng đặc biệt được cho là không thuộc về tập hợp các biểu tượng có trong chuỗi là một cách thực hiện. Tôi đoán đây là những gì bạn đề xuất với EOL. Điều này đã được thực hiện khoảng 45 năm trước bởi Denis Ritchie cho ngôn ngữ lập trình C, ngoại trừ việc anh ta sử dụng byte 0, cũng lưu ý NUL hoặc ^ @, thay vì EOL.
Trong văn bản, nó có thể được thực hiện với các trích dẫn xung quanh hoặc với một kiểu dáng cuối cùng ⊣. Tuy nhiên, lưu ý rằng trong khi⊣một mình sẽ biểu thị chuỗi rỗng, nó chấm dứt sau đó tất cả các chuỗi, đó không phải là trường hợp sử dụng chữ. Họ không đóng chính xác vai trò cú pháp.
Về nguyên tắc, ký hiệu chấm dứt như EOL, ^ @ hoặc ⊣ cũng không thể là một biểu tượng thuộc về một chuỗi, trừ khi bạn thêm các cơ chế biểu diễn phức tạp hơn.
Trong máy tính, chuỗi tham chiếu null có thể được sử dụng để biểu diễn chuỗi rỗng. Mặt khác, nó chỉ là một khái niệm lập trình không liên quan gì đến khái niệm trừu tượng của chuỗi.
Tuy nhiên, câu hỏi của bạn hơi khó hiểu và không được nêu quá rõ. Nói về một " khái niệm riêng biệt " gợi ý về các vấn đề ngữ nghĩa thay vì đọc lại cú pháp. Và bạn đã trộn các văn bản đại diện được in, sử dụng ε nhưng không phải EOL, với biểu diễn máy tính làm ngược lại.
Với nhiều chi tiết hơn
Đây là một câu hỏi kỳ lạ. Theo cách của nó, nó cũng đặt ra một hoặc hai vấn đề cơ bản về toán học.
Hiểu những vấn đề như vậy là không rõ ràng, như được chứng kiến bởi sự bất cập của một số câu trả lời được đưa ra bởi người dùng rõ ràng có thẩm quyền, và sự bất cập của chính câu hỏi. Đây là những gì thu hút tôi cho câu hỏi này.
Hai vấn đề liên quan đến:
Vấn đề thứ hai, liên quan đến ngữ nghĩa học, có lẽ đã được các nhà logic học giải quyết, và có thể bởi các nhà sử học về khoa học. Nhưng tôi không nhớ là đã thấy nó chính thức được giải quyết (hoặc có thể tôi đã không nhận ra nó).
Một sự nhầm lẫn giữa cú pháp và ngữ nghĩa có lẽ xuất phát từ việc OP nói về một " khái niệm riêng biệt " trong đó anh ta nên nói về một " ký hiệu riêng biệt ". Một sai lầm như vậy có lẽ là công bằng trong trường hợp của anh ấy khi anh ấy đang cố gắng hiểu vấn đề. Nhưng nó càng làm cho một số người dùng đã trả lời, rõ ràng là Yuval Filmus và tôi, khi chúng tôi lấy từ "khái niệm" cho ý nghĩa của nó.
Về ngữ nghĩa
Bây giờ tôi nhận ra rằng đoạn tiếp theo không phải là về câu hỏi bạn dự định; nhưng đó là câu hỏi bạn đã viết và được hiểu là ngữ nghĩa và được nhiều người sử dụng, trong khi bạn có nghĩa là cú pháp (sẽ được giải quyết trong phần cú pháp bên dưới).
Hãy bắt đầu với câu hỏi của bạn " Tại sao bạn cần một khái niệm riêng biệt, đó là 'chuỗi rỗng'? ", Mà tôi hiểu là: "chúng ta có thể sử dụng chuỗi, trong lý thuyết và lập trình, mà không bao giờ xem xét chuỗi trống không?" , như Yuval Filmus đã làm.
Thực tế là, chúng ta thường không cần chuỗi rỗng , nhưng nói chung sẽ thuận tiện hơn khi có nó. Hầu hết các lý thuyết có thể có thể được phát triển mà không bao giờ xem xét các chuỗi trống. Rốt cuộc, rất nhiều
đã được người Hy Lạp phát triển mà không coi số 0 là số. Zero được giới thiệu về mặt cú pháp và ngữ nghĩa chỉ một vài thế kỷ sau đó ở Ấn Độ. Mở rộng hệ thống số không chỉ là giới thiệu các khái niệm mới, mà còn là cách đơn giản hóa việc hiểu và sử dụng các khái niệm cũ. Giới thiệu số 0 và số âm giúp dễ hiểu các tính chất của số dương tự nhiên, v.v. Một số tính chất của các hàm trên các số thực (chẳng hạn như sự hội tụ của chuỗi) dễ dàng hơn để phân tích và hiểu khi bạn xem xét phần mở rộng cho các số phức.
Vì vậy, giới thiệu các khái niệm và phần mở rộng mới trong toán học thường là một cách tốt để làm cho lý thuyết đơn giản hơn (và thường mạnh mẽ hơn để diễn đạt các vấn đề).
Giới thiệu chuỗi rỗng cùng với "chuỗi tự nhiên" sẽ đơn giản hóa các lý thuyết được xây dựng trên chuỗi và đó là một lý do đủ tốt. Thông thường, như đã nêu trong các câu trả lời khác, việc có chuỗi trống cho phép chúng ta coi chuỗi là đại diện (mô hình) của các cấu trúc đại số nổi tiếng (đơn sắc) và áp dụng trực tiếp tất cả các kết quả đã biết về các cấu trúc đó. Thật vậy, như ghi nhận của J.-E. Ghim, chuỗi trống có liên quan trực tiếp đến hoạt động nối trên chuỗi (và tôi sẽ thêm vào, giống như cách số 0 có liên quan đến việc thêm số nguyên).
Chúng ta không hoặc có thể không cần chuỗi rỗng, nhưng sẽ thuận tiện hơn rất nhiều khi làm toán với nó hơn là không có nó. Và điều này cũng đúng với lập trình (là một dạng toán học nhằm tạo ra các bằng chứng mang tính xây dựng).
Một vấn đề nhất quán
Tuy nhiên, tôi không đồng ý với câu trả lời của Yuval Filmus về hiệu ứng không cho phép khái niệm chuỗi rỗng, giống như cách người Hy Lạp sẽ không coi số không. Giới thiệu số 0 là số mới sẽ không được chấp nhận nếu nó thay đổi kết quả đã biết của mỹ phẩm. Tốt nhất, nó sẽ được coi là một lý thuyết khác nhau, với mục đích riêng của nó.
Tương tự, một lý thuyết về chuỗi sẽ cho kết quả nhất quán cho dù nó có cho phép chuỗi trống hay không. Nhưng cả hai cách tiếp cận nên sử dụng các định nghĩa nhất quán để điều đó trở nên rõ ràng và có ý nghĩa, và Yuval Filmus đã không làm điều đó.
Khi chuỗi trống được cho phép , định nghĩa thông thường của tiền tố là:
Chuỗi u là tiền tố của chuỗi v iff có chuỗi w sao cho uw = v
trong đó dấu chấm biểu thị sự nối chuỗi. Điều này cho phép một chuỗi là tiền tố của chính nó bằng cách lấy w = (chuỗi trống). Sau đó, bạn có thể xác định:
Chuỗi u là tiền tố thích hợp của chuỗi v iff, nó là tiền tố của v và không bằng v.
Tuy nhiên, khi chuỗi trống không được phép , bạn phải nêu các định nghĩa này một cách nhất quán, nhưng khác nhau. Ví dụ:
Chuỗi u là tiền tố thích hợp của chuỗi v iff có chuỗi w sao cho uw = v
Lưu ý rằng w phải có ít nhất một ký hiệu. Sau đó, bạn có thể xác định:
Chuỗi u là tiền tố của chuỗi v iff u là tiền tố thích hợp của v hoặc u = v.
Với các định nghĩa nhất quán như vậy, một từ vẫn là tiền tố của chính nó, ngay cả khi chuỗi trống không được phép trong lý thuyết.
Vì vậy, điểm cần làm là không cho phép chuỗi rỗng thay đổi các thuộc tính của chuỗi (ít nhất là không theo cách tầm thường như vậy) như Yuval Filmus đã khẳng định. Vấn đề là nhiều hơn nữa, nó làm cho việc nghiên cứu các chuỗi phức tạp hơn, theo cùng cách mà arithologists phức tạp hơn khi bạn không thể nói về số không.
Về cú pháp
Vấn đề thứ hai là cú pháp. Làm thế nào các chuỗi nên được trình bày, trên giấy hoặc trong máy tính. Cụ thể, giả sử chúng tôi đồng ý rằng thật hữu ích khi có khái niệm về một chuỗi rỗng, làm thế nào nó được biểu diễn theo cú pháp để chúng ta có thể nói hoặc viết về nó.
Câu hỏi thực sự đặt ra cho tất cả các khái niệm toán học: chúng nên được trình bày như thế nào để chúng ta có thể nói hoặc viết về chúng, và làm như vậy một cách thuận tiện nhất có thể. Phần lớn sự tiến hóa của toán học cũng liên quan đến việc cải thiện cú pháp, biểu diễn các khái niệm. Một ví dụ tầm thường là sự lúng túng khi làm mỹ phẩm với đại diện La Mã cổ đại của các số nguyên.
Câu trả lời đầu tiên liên quan đến chuỗi trống là bạn có thể muốn điều đó phù hợp với biểu diễn của các chuỗi khác. Thông thường, việc biểu diễn một chuỗi sẽ bao gồm chuỗi các ký hiệu trong chuỗi cộng với một số ký hiệu bổ sung, chẳng hạn như dấu ngoặc kép: " gattaca " chẳng hạn. Sau đó, nó trở nên khá tự nhiên để biểu diễn chuỗi rỗng là "".
Nếu bạn đại diện cho ví dụ trên là gattaca⊣, sau đó biểu diễn tự nhiên cho chuỗi rỗng là ⊣ (như đã lưu ý ngầm bởi David Richerby).
Vì vậy, câu hỏi về sự cần thiết phải giới thiệu một ký hiệu riêng
(chứ không phải là một khái niệm riêng biệt , như thực sự được viết) có một câu trả lời tiêu cực. Không, nó không cần thiết. Ký hiệu thống nhất, đại diện thống nhất, có thể cho tất cả các chuỗi, bao gồm cả chuỗi trống.
Tuy nhiên, nếu bạn chỉ đơn giản biểu diễn chuỗi bằng chuỗi các ký hiệu được bao gồm, chẳng hạn như gattaca , không có ký tự nào khác, thì chuỗi trống sẽ trở nên vô hình về mặt cú pháp, điều này khá bất tiện. Sau đó, cần phải giới thiệu một số ký hiệu cụ thể, chẳng hạn như chữ Hy Lạp ε hoặc một số tên khác.
Tương tự như vậy, khi nghiên cứu các chuỗi một cách trừu tượng, sẽ hơi khó sử dụng "" để biểu diễn chuỗi trống, nếu chỉ vì nó không tạo ra các câu hay và rõ ràng trong lời nói, khi các nhà khoa học nói với nhau, điều được cho là xảy ra nhân dịp. Do đó, nó là đẹp hơn để đặt tên cho nó. Nói chuỗi trống có thể làm, nhưng viết lúng túng. Do đó, thói quen sử dụng một ký hiệu chữ cái thường được thực hiện trong toán học để biểu thị các thực thể có liên quan cụ thể,
Đề xuất đại diện cho từ trống bằng EOL về cơ bản giống như đại diện cho từ đó bằng ⊣. Nó chỉ đơn giản là một đại diện của các chuỗi với một ký tự kết thúc đặc biệt. EOL chỉ là một ký tự đặc biệt "bằng cách nào đó có sẵn trong máy tính".
Như đã lưu ý ở trên đối với các số nguyên học La Mã, việc lựa chọn một đại diện nên được quyết định bởi sự thuận tiện, đặc biệt là trong một môi trường thuật toán. Có nhiều cách để biểu diễn các chuỗi nói chung và chuỗi trống nói riêng trong máy tính. Từ quan điểm lý thuyết, bạn chọn gì không quan trọng. Từ quan điểm thực tế, điều cần thiết là chọn một thứ sẽ làm cho các hoạt động và thao tác chuỗi hiệu quả hơn. Đây là một vấn đề cơ bản trong bất kỳ lớp nào về thuật toán và cấu trúc dữ liệu.
Về sự nhầm lẫn của cú pháp và ngữ nghĩa
Câu trả lời của David Richerby rất thú vị vì sự nhầm lẫn của cú pháp và ngữ nghĩa.
Anh ta cố gắng giới thiệu cách sử dụng cú pháp của EOL được đề xuất trong câu hỏi, mà anh ta thay thế bằng biểu tượng ⊣, nhưng anh ta trộn lẫn nó một cách kỳ lạ với định nghĩa về miền ngữ nghĩa của các chuỗi, làm cho những gì được cho là chỉ là một phần ký hiệu của miền ngữ nghĩa đó.
Định nghĩa thứ hai của anh ta thực sự nên có như sau:
Một bảng chữ cái là một tập hợp hữu hạnΣcủa các biểu tượng. Một
chuỗi s trên bảng chữ cái Σ là một chuỗi hữu hạn của ℓ biểu tượng si, Ở đâu 0≤ℓ, 1≤i≤ℓ và
si∈Σ cho tất cả các giá trị của i. Nó được ghi nhậns1…sℓ⊣ Ở đâu ⊣ là một ký tự đặc biệt không biểu thị một biểu tượng trong Σ. Chúng tôi viết|s|cho chiều dài của
s, Được định nghĩa bởi |s1…sℓ⊣|=ℓ. Một chuỗi con củas1…sℓ⊣ là bất kỳ chuỗi si…sj⊣, Ở đâu 1≤i≤j≤ℓ. Sự kết hợp của các chuỗis1…sℓ⊣
và t1…tm⊣ là chuỗi s1…sℓt1…tm⊣ chiều dài ℓ+m.
Lưu ý rằng do đó, chuỗi duy nhất có độ dài bằng 0 được ký hiệu ⊣.
Định nghĩa này chỉ là một biến thể công chứng của định nghĩa thông thường được đưa ra bởi David Richerby. Nó không giới thiệu bất kỳ sự phức tạp hay " tính trung thực thêm " và không thay đổi gì đối với lý thuyết automata, vì lý do đơn giản là⊣là một phần của ký hiệu, không phải là ký hiệu trong chuỗi. Và nó đưa ra một ký hiệu thống nhất cho tất cả các chuỗi, bao gồm cả chuỗi trống.
Yuval Filmus mắc một lỗi tương tự trong nhận xét thứ hai của mình , vì EOL được dự định là một thiết bị công chứng cú pháp để biểu diễn các chuỗi, không phải là một biểu tượng trong chuỗi, trong khi{0,1} liên quan đến danh sách các ký hiệu có thể tạo thành chuỗi, về mặt ngữ nghĩa.
Để tóm tắt câu trả lời
J.-E. Câu trả lời của Pin khá chính xác, nhưng nó chỉ giải quyết một phần của câu hỏi, liên quan đến tầm quan trọng của chuỗi trống. Nó không giải quyết khả năng của một ký hiệu thống nhất.
Câu trả lời của Yuval Filmus và David Richerby gây nhầm lẫn cú pháp và ngữ nghĩa, do đó từ chối một cách sai lầm đề xuất của câu hỏi OPś để sử dụng EOL. Ngoài ra Yuval Filmus'argument để khẳng định tầm quan trọng về ngữ nghĩa của chuỗi trống là rất đáng tranh cãi. Mặc dù nó có ý nghĩa gì đó, nhận xét của David Richerby về việc sử dụng tham chiếu null cũng có phần không chính đáng: nó cũng có thể được sử dụng để biểu diễn chuỗi rỗng, miễn là mã được viết phù hợp.
Câu trả lời bằng bút danh là quá mức lý thuyết liên quan đến tầm quan trọng của chuỗi trống trong ngôn ngữ chính thức, nhưng không thực sự thảo luận về các vấn đề được nêu ra bởi câu hỏi.
Đối với câu trả lời của riêng tôi , tôi chỉ có thể hy vọng nó giải quyết thỏa đáng các vấn đề và không có lỗi, nhưng nó còn quá dài.