Tôi hiện đang làm việc với vellvm, phát triển một chuyển đổi trên đó. Tôi là một người mới.Làm cách nào để tránh lỗi tràn hoặc lỗi phân đoạn trong Coq nats?
Trong khi lập trình, tôi phải đối mặt với cảnh báo sau đây:
Warning: Stack overflow or segmentation fault happens when working with large numbers in nat (observed threshold may vary from 5000 to 70000 depending on your system limits and on the command executed).
chức năng của tôi mà tạo ra cảnh báo này sẽ tính toán một chữ ký. Chữ ký được chia thành các bit cao cấp và kém hơn. Với hai nats n1 và n2 đại diện cho các bit cao cấp và các bit kém hơn, nó tính toán (n1 * 65536) + n2 - đây là một sự trừu tượng để đặt hai số nhị phân 16 bit cạnh nhau.
Tôi khá ngạc nhiên vì định nghĩa coq nat xuất hiện để xử lý các int lớn từ bên ngoài, nhờ vào hàm tạo S.
Tôi nên tránh cảnh báo này/sử dụng số lớn trong coq như thế nào? Tôi đang mở để thay đổi việc triển khai từ nat thành một số loại xây dựng nhị phân.
Cảm ơn!
Làm việc với nats là crufty, vì chúng được xây dựng với 'S', nghĩa là mọi số sẽ * theo nghĩa đen * là một chuỗi các ứng dụng' S': bạn có thể làm việc với các số nguyên thay thế, có nguyên tắc chứng minh tương tự nhưng có ký hiệu đại diện dựa trên ký hiệu (bit): http://coq.inria.fr/library/Coq.ZArith.BinInt.html –
Tôi có thể sử dụng các hoạt động sau đó như thế nào? (Zpos 1) + (Zpos 2) dường như không hoạt động ... - Lỗi: Thuật ngữ "1% Z" có loại "|" trong khi nó được mong đợi có kiểu "nat". – fotanus
đó là vì "+" có nghĩa là nhiều thứ tùy thuộc vào vị trí của bạn. Trong thực tế "+" chỉ là đường cú pháp để thêm nats, trong đó 'plus' được định nghĩa một cách có cấu trúc trên hai loại nats. Bạn muốn sử dụng 'plus' cho các số nguyên, nằm trong một phạm vi _interpretation khác với' nat' (cụ thể là 'Int_scope'). Đọc về phạm vi diễn giải và cách mở chúng và sử dụng chúng. –