Để theo dõi What is Axiom K?, tôi tự hỏi điều gì xảy ra khi bạn sử dụng Agda với tùy chọn --without-k
. Kết quả có kém hiệu quả hơn không? Nó là một ngôn ngữ khác hoặc làm tất cả các chương trình trước vẫn gõ kiểm tra?Agda có K không mạnh hơn?
Trả lời
Tình huống với lý thuyết loại Martin-Löf và Axiom K theo một số cách tương tự với hình học Euclide và định đề song song. Với giả thuyết song song, nhiều định lý hơn có thể được chứng minh, nhưng đó chỉ là về không gian Euclide. Nếu không có định lý có thể chứng minh được song song cũng đúng với các không gian phi Euclide và người ta có quyền tự do thêm các tiên đề phi Euclide rõ ràng.
Axiom K gần nói rằng bằng chứng bình đẳng không mang thông tin không tầm thường và không có nội dung tính toán. Đó là một cách logic tương đương với cả hai câu lệnh sau:
-- uniqueness of identity proofs
UIP : {A : Set}(x y : A)(p p' : x ≡ y) → p ≡ p'
-- reflexive equality elimination
EqRefl : {A : Set}(x : A)(p : x ≡ x) → p ≡ refl
Đương nhiên, cả hai đều không thể chứng minh với --without-K
. Tôi cho đây là một vài báo cáo cụ thể hơn đó là không thể chứng minh mà không cần K, và có unprovability có vẻ phản trực giác ngay từ cái nhìn đầu tiên:
{-# OPTIONS --without-K #-}
open import Relation.Binary.PropositionalEquality
open import Data.Bool
open import Data.Empty
-- this one is provable, we're just making use of it below
coerce : {A B : Set} → A ≡ B → A → B
coerce refl a = a
coerceTrue : (p : Bool ≡ Bool) → coerce p true ≡ true
coerceTrue = ? -- unprovable
data PointedSet : Set₁ where
pointed : (A : Set) → A → PointedSet
BoolNEq : pointed Bool true ≡ pointed Bool false → ⊥
BoolNEq = ? -- unprovable
Axiom K có vẻ trực quan, vì chúng ta định nghĩa bình đẳng mệnh đề Agda với một refl
constructor duy nhất. Tại sao ngay cả bận tâm với các bằng chứng không bình đẳng không refl
có sự tồn tại mà chúng ta không thể bác bỏ mà không có K?
Nếu chúng ta không có tiên đề K, chúng ta được tự do thêm các tiên đề mâu thuẫn với K, cho phép chúng ta khái quát hóa khái niệm các loại của chúng ta. Chúng ta có thể mô tả tiên đề duy nhất và các loại quy nạp cao hơn, về cơ bản cho chúng ta lý thuyết loại mà cuốn sách Homotopy Type Theory là về.
Quay lại tương tự Euclide: giả thiết song song cho rằng không gian bằng phẳng, vì vậy chúng tôi có thể chứng minh những điều phụ thuộc vào độ phẳng của không gian, nhưng không thể nói gì về không gian phẳng. Axiom K thừa nhận rằng tất cả các loại có bằng chứng bình đẳng tầm thường, vì vậy chúng ta có thể chứng minh các câu lệnh phụ thuộc vào điều đó, nhưng chúng ta không thể có các loại với cấu trúc chiều cao hơn. Các không gian phi Euclide và các loại chiều cao hơn cũng có một số yếu tố kỳ quặc nhưng cuối cùng chúng là nguồn ý tưởng phong phú và hữu ích.
Nếu chúng tôi chuyển sang lý thuyết loại đồng luân "sách", thì "có tỷ lệ bình đẳng" trở thành tài sản mà chúng ta có thể nói về nội bộ và chứng minh cho các loại cụ thể có thuộc tính đó.
Điều tôi vẫn đang đấu tranh để hiểu là nếu '_≡_' được định nghĩa là một kiểu dữ liệu với một constructor' refl' duy nhất, như nó là trong 'Relation.Binary.PropositionalEquality', thì những điểm cân bằng khác được cho là từ đâu? Nói cách khác, ví dụ về 'x ≡ y' không làm giảm' phản xạ' là gì? Đây có phải chỉ là một tạo phẩm của backdoor 'postulate' mà Agda cung cấp không? Liệu có 'giả định' có nhiều cơ sở lý thuyết hơn là một lối thoát hiểm? – Cactus
Các định nghĩa kiểu được lập chỉ mục có thể được hiểu là các định nghĩa không được lập chỉ mục với các bằng chứng bình đẳng bổ sung trong các nhà xây dựng đã thiết lập các chỉ mục. Trong Agda, điều cuối cùng quan trọng là phương thức hợp nhất các chỉ số trong khớp mẫu phụ thuộc, vì vậy '_≡_' có thể được xem như là một trình bao bọc cho bất kỳ khái niệm bình đẳng nào bắt nguồn từ sự khớp mẫu. Nhưng sự phù hợp với mô hình cuối cùng có thể giảm được đối với các ứng dụng của Axiom K hoặc Axiom J. So, ngay cả trong bối cảnh Agda, bạn chỉ nên nhìn vào sự phản chiếu của xương trần/định nghĩa Axiom J để xem sự cân bằng phụ đến từ đâu. –
Vì sao Axiom J lại cho phép HoTT, tôi nghi ngờ có một câu trả lời trực tiếp ngay lập tức cho mọi người, vì vậy đây là câu trả lời của riêng tôi. Đầu tiên, chúng ta nên cố gắng quên đi các khái niệm trước đây của chúng ta về các loại và chỉ đơn giản là xem các tiên đề như chỉ định một số đối tượng lạ không nhìn thấy được. Chúng ta có thể nghĩ về J là nguyên tắc cảm ứng cho các đường trong không gian với cấu trúc tùy ý, và sau đó J nói rằng một vị từ là đúng của một đường đi nếu nó đúng với đường dẫn không đổi tại một điểm cuối (không quan trọng cái nào) của con đường. –
- 1. Có cách nào tốt hơn để làm Bản đồ k [v] -> Có thể (Bản đồ k v)?
- 2. MOD có hoạt động mạnh hơn CPU nhân?
- 3. Cách tìm hiểu agda
- 4. Khó hơn, tốt hơn, nhanh hơn, mạnh hơn ... Kỹ thuật cho CAPTCHA dựa trên hình ảnh?
- 5. Phân cấp loại trong Agda
- 6. Mạnh mẽ haskell mà không có lỗi
- 7. Sự khác biệt giữa Coq và Agda
- 8. Trường VARCHAR - Là sức mạnh của hai hiệu quả hơn?
- 9. cách xác định xem phần tử lớn nhất thứ k của heap có lớn hơn x
- 10. Cách tạo truy vấn tìm kiếm sql mạnh mẽ hơn?
- 11. Khó hiểu Đồng bộ của Agda
- 12. Danh mục thư viện cho Agda?
- 13. Sự khác biệt giữa Agda và Idris
- 14. Cơ chế phát sinh Haskell cho Agda
- 15. Bộ loại mức trong Haskell/Agda
- 16. Có phải Visual C++ mạnh mẽ như gcc không?
- 17. Có trình soạn thảo K ++ Kode tốt cho Klingon không?
- 18. Py.test có thể hỗ trợ nhiều tùy chọn -k không?
- 19. k-có nghĩa là cụm trống
- 20. Liệt kê tất cả các kết hợp có thể có của k số nguyên giữa 1 ... n (n chọn k)
- 21. Có thể kết nối một trình phân tích cú pháp HTML mạnh mẽ hơn để Python cơ giới hóa không?
- 22. knnMatch không làm việc với K = 1
- 23. đối số chiều dài Tiềm ẩn trong chiều dài cố định-vector-chức năng trong Agda
- 24. Được biết đến mô hình phù hợp trong agda
- 25. Matlab: K-có nghĩa là clustering
- 26. Đọc bảng có dấu cách = k khoảng trắng với biến k
- 27. Axiom K là gì?
- 28. IBOutlet có nên là var yếu hoặc mạnh không?
- 29. .NET MVC có một RedirectToAction được đánh máy mạnh không?
- 30. Thuộc tính NSString trong ARC có mạnh hay không?
Mẫu phù hợp với việc thực hiện K (do đó không phải là tiên đề, để tính toán) là ví dụ chính của một chương trình không còn gõ nữa khi bạn chọn - không có K. Đó là một công tắc vô hiệu hóa. Nhưng sau đó nó cho phép bạn thêm các nguyên tắc equational mâu thuẫn với K nhưng phù hợp với J. – pigworker