Lý do để học logic mệnh đề & vị ngữ


14

Tôi có thể hiểu tầm quan trọng mà các nhà khoa học máy tính hoặc bất kỳ kỹ sư liên quan đến phát triển phần mềm nào nên hiểu về nghiên cứu logic cơ bản.

Nhưng có bất kỳ nhiệm vụ / công việc nào đòi hỏi kiến ​​thức rõ ràng về những điều này, ngoài những nhiệm vụ đòi hỏi bất kỳ loại biểu diễn tri thức nào sử dụng Knowledge Basekhông? Tôi muốn nghe các loại nhiệm vụ, thay vì phản ứng khái niệm.

Lý do tôi hỏi điều này chỉ là do sự tò mò của tôi. Trong khi các sinh viên CS phải dành một lượng thời gian nhất định cho chủ đề này, một số khóa học chuyên sâu thực tế (ví dụ: AI-Class ) đã bỏ qua chủ đề này hoàn toàn. Và tôi chỉ tự hỏi rằng ví dụ biết predicate logiccó thể giúp vẽ ER diagramnhưng có thể không phải là một yêu cầu.


Cập nhật 27/05/2012) Cảm ơn câu trả lời. Bây giờ tôi nghĩ rằng tôi hoàn toàn hiểu và đồng ý với tầm quan trọng của logicCS với số lượng ứng dụng khổng lồ của nó. Tôi chỉ chọn câu trả lời tốt nhất thực sự từ sự ấn tượng mà tôi có được bằng giải pháp cho Windowsvấn đề 'màn hình xanh.


4
Khi tôi đang viết câu trả lời của mình, tôi thấy phạm vi câu hỏi của bạn không rõ ràng. Bạn đang giới hạn bản thân mình vào CS, hoặc ngành công nghiệp, hoặc cả hai, hoặc có thể nói chung là nâng?
Dave Clarke

@Dave Clarke Vâng tôi thấy rằng không đủ rõ ràng quá. Điều đầu tiên tôi muốn biết là cần biết đọc biết viết logic cụ thể trong ngành nào (mặc dù tôi đánh giá cao phản hồi của bạn chỉ để thuyết phục bản thân rằng bất kỳ kỹ sư liên quan đến phần mềm nào cũng không nên bỏ qua chủ đề này).
IsaacS

Sẽ tốt hơn nếu bạn có thể thay đổi câu hỏi của mình để nắm bắt những gì bạn thực sự đang tìm kiếm.
Dave Clarke

Làm thế nào chính xác một người sẽ viết một ifđiều kiện mà không có logic mệnh đề?
edA-qa mort-ora-y

Câu trả lời:


22

Tôi có xu hướng thích Thống nhất và bất cứ điều gì liên quan đến nó. Nếu bạn không biết logic mệnh đề & vị ngữ, thì bạn đang bỏ qua những điều cơ bản của logic. Nếu bạn có hứng thú với bất cứ điều gì được liệt kê , thì nó sẽ giống như có hứng thú với toán học và bỏ qua phép cộng và phép nhân. Logic không chỉ dành cho AI.

Là một câu trả lời thực tế, hãy nhớ vấn đề dấu phẩy động của Intel và làm thế nào bạn không bao giờ nhìn thấy chúng nữa? Nhờ sử dụng các định lý định lý, chúng là một điều của quá khứ. Hãy nhớ màn hình xanh chết chóc của Microsoft . Nhờ các bộ giải SAT, kiểm tra mô hình và giải pháp dựa trên logic khác, chúng là một loài có nguy cơ tuyệt chủng.


3
các loài có nguy cơ tuyệt chủng [trích dẫn lỗi phân đoạn
JeffE

@JeffE Nếu bạn đang tìm kiếm một trích dẫn, thay vào đó tôi trình bày bằng chứng thực tế. Lần cuối bạn nhìn thấy là khi nào? :)
Guy Coder

3
Tôi chưa bao giờ nhìn thấy một. Tôi sử dụng máy Mac.
JeffE

1
@JeffE Mac là các hệ thống kết hợp chặt chẽ, trong đó mọi thứ từ kiến ​​trúc máy đến các chương trình ứng dụng đều do một nhóm / tổ chức quyết định. Các hệ thống Windows được mở, nơi một loạt các nhà sản xuất và nhóm cung cấp các giải pháp gắn kết với nhau, chỉ dựa vào các tiêu chuẩn và giao diện đã được chỉ định (thường lỏng lẻo và mơ hồ). Chúng là một thách thức nhiều hơn đối với Khoa học Máy tính. Các nhóm Microsoft đã phát triển các kỹ thuật phân tích tĩnh / chứng minh định lý để thực hiện điều này một cách an toàn đã tạo ra những tiến bộ cơ bản cho lĩnh vực của chúng tôi.
Uday Reddy

1
@UdayReddy: Tôi không nghi ngờ rằng các nhà nghiên cứu của Microsoft đã đạt được tiến bộ cơ bản hoặc BSOD ít phổ biến hơn trước đây. Nhưng "các loài có nguy cơ tuyệt chủng" là cường điệu không được hỗ trợ; mã bị lỗi không phải là nguồn duy nhất của sự cố.
JeffE

22

Có những mối liên hệ cực kỳ sâu sắclan tỏa giữa logic và khoa học máy tính. Để hiểu chúng có thể là gì, hãy nhớ rằng khoa học máy tính còn được gọi là "công nghệ thông tin" hoặc "tin học", nghĩa là hệ thống máy tính nắm bắt, xử lý và cung cấp thông tin. Vâng, logic là một điều tương tự. Nó nghiên cứu làm thế nào thông tin được nắm bắt trong câu và làm thế nào có thể một câu lệnh là hậu quả của một câu khác, nghĩa là làm thế nào nội dung thông tin của nó đã có trong một câu lệnh khác (hoặc tập hợp các câu lệnh). Theo nghĩa đó, logic và khoa học máy tính về cơ bản là giống nhaukỷ luật, tập trung vào các khía cạnh khác nhau. Các nhà logic học (Church, Kleene, Turing, Post và các sinh viên và đồng nghiệp của họ) đã tạo ra ngành khoa học máy tính và nhiều nhà logic học tiếp tục đóng góp cho Khoa học máy tính, đặc biệt là Jean-Yves Girard và các sinh viên của ông.

Dưới đây là một số ứng dụng logic tiêu chuẩn trong Khoa học Máy tính:

  • Thiết kế của các mạch kỹ thuật số hoàn toàn dựa trên logic đề xuất, đến mức các kỹ sư của nó gọi nó là "thiết kế logic" chứ không phải là "thiết kế mạch". Ngay cả việc viết một chương trình máy tính thường được cho là liên quan đến việc nghĩ ra "logic" của nó. (Lưu ý rằng "logic" theo nghĩa sau là ý tưởng không chính thức chứ không phải logic chính thức, được sử dụng để chỉ luồng thông tin qua chương trình và liệu nó có được xử lý chính xác hay không.)

  • Dự đoán logic và anh em toán học của nó, lý thuyết tập hợp, được sử dụng trong nhiều ngôn ngữ điện toán , ví dụ: SQL ngôn ngữ cho các truy vấn cơ sở dữ liệu quan hệ. Ngoài ra còn có các ngôn ngữ lập trình dựa trên logic, được gọi là "ngôn ngữ lập trình logic".

  • Biểu diễn tri thức , mà bạn đã đề cập, có nhiều hình thức dựa trên logic. Ngay cả khi nó sử dụng các hình thức phi logic, nhiều trong số chúng vẫn có ý nghĩa logic , và do đó dựa trên logic.

  • Logic xác suất, trong đó các câu lệnh không chỉ có giá trị đúng / sai, nhưng mức độ chắc chắn / không chắc chắn, ngày càng là nền tảng cho các hệ thống máy học .

  • Nếu bạn muốn chính thức nêu rõ những gì một chương trình làm, tức là đưa ra một đặc tả chương trình , cuối cùng bạn sẽ sử dụng một số dạng của ngôn ngữ logic. Thật vậy, có nhiều ngôn ngữ đặc tả chương trình, như Z và B, dựa trên logic vị ngữ và lý thuyết tập hợp. Ngoài ra còn có các ngôn ngữ đặc tả dựa trên logic phương trình, chẳng hạn như Larch. Các nhà khoa học máy tính thường phát minh ra logic mới để đại diện cho nhu cầu của khoa học máy tính, ví dụ, Logic Hoare và Logic tách, hoặc họ tiếp thu và phát triển các dạng logic truyền thống được sử dụng khác nhau, như logic tạm thời và logic phương thức, và phát triển chúng hơn nữa.

  • Nếu bạn muốn xác minh xem một chương trình có làm những gì nó phải làm hay không, thì cuối cùng bạn sẽ sử dụng không chỉ ngôn ngữ logic, mà toàn bộ bộ máy logic: lý thuyết bằng chứng, lý thuyết mô hình và quy trình quyết định. Công nghệ xác minh hiện đang phát triển bởi những bước nhảy vọt và tôi hy vọng rằng, trong một thập kỷ nữa hoặc lâu hơn, chúng sẽ được sử dụng thường xuyên cho hầu hết tất cả các phát triển phần mềm.

Trên thực tế, mối liên hệ giữa logic và khoa học máy tính rất sâu sắc và có sức lan tỏa đến mức tôi có thể nói rằng thật khó để trở thành một nhà khoa học máy tính giỏi mà không có sự hiểu biết thấu đáo về logic.

Lý do một số nhà khoa học AI đánh giá thấp logic vào thời điểm này là vì một số nhà phát triển ban đầu của AI đã đề xuất logic ngoài luồng như một công cụhơn là một nền tảng. AI, với bản chất của nó, hứa hẹn sẽ mang đến phép thuật. Chúng tôi không phải làm công việc khó khăn của các hệ thống lập trình để cung cấp kết quả. Họ sẽ có thể tự mình tìm ra cách sản xuất giải pháp vì họ sẽ "thông minh". Logic dường như chỉ ra con đường bởi vì nếu các hệ thống máy tính hiểu logic và biết cách xử lý thông tin bằng cách sử dụng các quy tắc logic, chúng sẽ có thể cung cấp phép thuật. Đó là loại niềm tin vào logic, khi nhìn lại, đặt không đúng chỗ. Ở nơi đầu tiên, logic ngoài luồng quá mạnh và quá yếu cùng một lúc. Nó quá mạnh theo nghĩa các quy tắc logic quá chung chung để đưa ra các quy trình hiệu quả. Nó cũng quá yếu vì đó là logic được các nhà toán học nghĩ ra cho nhu cầu của toán học và nó không ' Không có từ vựng cần thiết để xử lý nhiều loại thông tin trong thế giới thực khác mà các hệ thống AI phải xử lý (như sự không chắc chắn, thông tin theo ngữ cảnh như thời gian, thay đổi, kiến ​​thức, cơ quan, v.v.). Vì vậy, AI hiện đang trải qua một phản ứng dữ dội chống lại logic. Nhưng tôi nghĩ rằng, khi họ vượt qua được phản ứng dữ dội đó, các nhà khoa học AI sẽ nhận ra rằng tất cả các phương pháp mới hơn vẫn dựa trênlogic, được hiểu rộng rãi .


Thêm cơ sở dữ liệu quan hệ!
rebierpost

Câu trả lời rất hay và đầy đủ, đề cập đến Jean-Yves Girard. Bạn có coi logic xác suất là cùng một lĩnh vực nghiên cứu như logic mờ không? Trong tài liệu chúng tôi gặp hai thuật ngữ và tôi muốn biết liệu chúng có biểu thị cùng một lĩnh vực nghiên cứu hay không.
zurgl

@zurgl. Hiểu biết của tôi là không có chủ nghĩa hình thức duy nhất được gọi là "logic xác suất". Logic mờ thực sự là một trong những chủ nghĩa hình thức như vậy, nhưng cũng có những người khác. Hình thức lý luận xác suất thành công nhất trong trí tuệ nhân tạo ngày nay là suy luận Bayes. Tuy nhiên, nền tảng logic của nó vẫn chưa được đặt chắc chắn.
Uday Reddy

17

Logic là nền tảng cho tất cả các khoa học máy tính lý thuyết. Nếu không học những điều này, bạn sẽ không thể nắm bắt chính xác ngữ nghĩa ngôn ngữ lập trình, máy Turing, lập trình logic, khả năng tính toán, v.v. Ngay cả lý do về các chương trình của bạn sẽ khó khăn hơn nếu không có nó. Chắc chắn, cố gắng làm một bằng chứng toán học của một số khái niệm CS gần như không thể.

Hoặc có thể bạn đang hỏi về việc sử dụng trong công nghiệp. Học logic tạo cơ sở cho việc học cách suy luận rõ ràng và nhìn thấy lỗ hổng trong lập luận của người khác. Logic là cơ bản, cho dù bạn sử dụng các biểu tượng chính thức hay không.


Bạn đang thiếu thuật toán.
Yuval Filmus

4
Điều đó bao gồm trong 'và như vậy'.
Dave Clarke

9

Một trong những nhiệm vụ lặp đi lặp lại mà các học viên và nhà lý thuyết CS phải đối mặt là có được niềm tin vào tính chính xác của mã của họ.

Có hai cách tiếp cận chính:

  1. Bằng chứng: Đưa ra một bằng chứng logic rằng một phần của hệ thống có các thuộc tính nhất định, có thể được hỗ trợ bởi các điều kiện tiên quyết, thiết kế theo hợp đồng, kiểm tra mã.
  2. Kiểm tra: Kiểm tra các thuộc tính nhất định giữ cho nhiều loại đầu vào và sau đó tạo ra rằng thuộc tính đó giữ cho các đầu vào khác.

Thứ nhất, dựa trên các phương thức logic, thường là lựa chọn duy nhất khi

  1. Không có đầu vào điển hình. Ví dụ, khi kiểm tra các thuộc tính bảo mật, đó là các đầu vào không điển hình mà bạn phải lo lắng, trừ khi bạn có thể suy luận một cách logic về đầu vào nào không điển hình, bạn không có khả năng có được phạm vi bảo hiểm tốt.
  2. Không gian cấu hình rất lớn, vì vậy bạn phải phân tách nó thành các phần bằng cách suy luận logic về phần nào có thể ảnh hưởng đến phần nào khác trước khi kiểm tra cục bộ.
  3. Bạn chỉ có tài liệu mô tả hành vi trường hợp cạnh của các hệ thống ngoài tầm kiểm soát của bạn. Bạn có thể mô phỏng chúng nhưng không thể kiểm tra điều gì xảy ra khi sự phụ thuộc bên ngoài thất bại vì bạn không có khả năng khiến nó thất bại vì lý do pháp lý hoặc đạo đức.

Thử nghiệm thực nghiệm trong trường hợp không có bằng chứng về cơ bản là sự thay thế cho bằng chứng. Khi bạn đang thiết kế một hệ thống có thể kiểm tra được, bạn đang xây dựng một bản phác thảo bằng chứng trong đó bạn điền vào các phần của bằng chứng với "test X, Y và Z tại đây". Khả năng suy luận logic là điều cần thiết để có thể kiến ​​trúc một hệ thống có thể kiểm tra. Nếu hệ thống không thể kiểm tra hoặc chứng minh được thì nhà thiết kế / kiến ​​trúc sư của nó không có doanh nghiệp nào nói rằng nó phù hợp với mục đích sử dụng của nó.


6

Hai lĩnh vực quan trọng nhất mà logic đóng vai trò quan trọng là:

  1. Đặc tả ngôn ngữ chính thức và xác minh .
  2. Đã sửa lỗi các lớp có thể tham số .

Z

Tóm lại: 1. Định nghĩa ngôn ngữ cần logic, 2: Công lý về quy trình của nó cần logic, 3. quy trình xác minh cần logic.

Tôi nên đề cập rằng điều này khác với thiết kế trình biên dịch hoặc ..., Đây là định nghĩa "Chính thức" của ngôn ngữ, lý do chính để làm điều này là chứng minh tính chính xác của ngôn ngữ hoặc mô hình, cũng có bằng chứng chính thức. Điều này có thể được sử dụng để xác minh các mô hình phần mềm, tìm lỗi trước khi triển khai, tìm lại các bế tắc trước khi triển khai, ...., Đối với phần mềm mô phỏng điều này, bạn có thể xem qua NModel .

Bây giờ tại sao trong các vấn đề có thể điều chỉnh tham số cố định bạn cần làm việc với logic, Bạn có thể phân chia các lớp khả năng lưu thông số cố định với các mức logic khác nhau, chúng có thể được chuyển đổi cho nhau: logic thành automata, automata thành biểu đồ và ngược lại, nhưng nếu bạn là một chuyên gia về logic, bạn có thể phân chia và quyết định chúng một cách đơn giản, định lý quan trọng nhất (sau định lý Robertson và Seymour ), trong lĩnh vực này là định lý của Courcelle . để biết thêm thông tin hãy đọc khảo sát Định lý Thuật toán Meta .


Mặc dù logic có thể được sử dụng để xác định ngôn ngữ, nhưng đó hầu như không phải là "vai trò quan trọng" trong trải nghiệm của tôi. Tôi không thấy logic liên quan đến FPT như thế nào.
Raphael

@Raphael, tôi thấy câu trả lời cho nhận xét của bạn mất nhiều hơn một dòng, tôi đã cập nhật câu trả lời của mình. Tôi nghĩ rằng tôi đã trả lời bạn, nhưng nếu bạn vẫn nghĩ rằng nó không ổn, hãy nói cho tôi biết, về phần "Chính thức" của tôi Tôi nghĩ rằng liên kết wiki đầu tiên của tôi không đủ tốt, tôi đã thêm thông tin, Ngoài ra, trong phần thứ hai tôi đã thêm một bài báo hay và nếu bạn muốn biết thêm về nó, bạn có thể đọc nó.
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.