Bằng chứng kết hợp cho một hệ thống viết lại đơn giản


14

Giả sử chúng ta có một ngôn ngữ đơn giản bao gồm các điều khoản:

  • true
  • false
  • nếu là những thuật ngữ sau đó như vậy là i ft1,t2,t3ift1thent2elset3

Bây giờ giả sử các quy tắc đánh giá logic sau:

iftruethent2elset3t2[E-IfTrue]iffalsethent2elset3t3[E-IfFalse]t1t1ift1thent2elset3ift1thent2elset3[E-If]

Giả sử chúng ta cũng thêm quy tắc sôi nổi sau đây:

t2t2ift1thent2elset3ift1thent2elset3[E-IfFunny]

Đối với ngôn ngữ đơn giản này với các quy tắc đánh giá nhất định, tôi muốn chứng minh những điều sau:

Định lý: Nếu r t thì có một số thuật ngữ u sao cho s ut u .rsrtusutu

Tôi đang chứng minh điều này bằng cách cảm ứng trên cấu trúc của . Đây là bằng chứng của tôi cho đến nay, tất cả đều hoạt động tốt, nhưng tôi bị mắc kẹt ở trường hợp cuối cùng. Có vẻ như cảm ứng trên cấu trúc của r không đủ, ai có thể giúp tôi không?rr

Bằng chứng. Bằng cách cảm ứng trên , chúng tôi sẽ tách tất cả các hình thức mà r có thể thực hiện:rr

  1. là một constante, không có gì để chứng minh vì một hình thức bình thường không đánh giá bất cứ điều gì.r
  2. nếu đúng thì r 2 khác r 3 . (a) cả hai dẫn xuất đều được thực hiện với quy tắc E-IfTrue. Trong trường hợp nàyr=r2r3 , vì vậy không có gì để chứng minh. (b) một dẫn xuất được thực hiện với quy tắc E-IfTrue, quy tắc khác với quy tắc E-Funny. Giả sử r s đã được thực hiện với E-IfTrue, trường hợp khác được chứng minh tương đương. Bây giờ chúng ta biết rằng s = r 2 . Chúng ta cũng biết rằng t = nếu đúng thì r 2 khác r 3 và tồn tại một số dẫn xuất r 2s=trss=r2t=r2r3 (tiền đề). Nếu bây giờ chúng ta chọn u = r ' 2 , chúng tôi kết luận như vậy.r2r2u=r2
  3. nếu sai thì r 2 khác r 3 . Chứng minh tương đương như trên.r=r2r3
  4. nếu r 1 sau đó r 2 khác r 3 với r 1 đúng hay sai. (a) cả hai trường hợp được thực hiện với quy tắc E-If. Bây giờ chúng ta biết rằng s = if r 1 thì r 2 khác r 3 t = if r 1 thì r 2 khác r 3 . Chúng tôi cũng biết rằng có tồn tại deriviations r 1r ' 1r=r1r2r3r1s=r1r2r3t=r1r2r3r1r1 (cơ sở). Bây giờ chúng ta có thể sử dụng cảm ứng hypothese để nói rằng có tồn tại một số hạn r 1r ' 1r 1r " 1r 1 . Bây giờ chúng ta kết luận các trường hợp bằng cách nói u = nếu r 1 sau đó r 2 khác r 3 và nhận thấy rằng s ut ur1r1r1r1r1r1r1u=r1r2r3sututheo quy tắc E-If. (b) một đạo hàm được thực hiện theo quy tắc E-If và một theo quy tắc E-Funny.

Trường hợp sau này, trong đó một dẫn xuất được thực hiện bởi E-If và một bởi E-Funny là trường hợp tôi bị thiếu ... Tôi dường như không thể sử dụng các giả thuyết.

Trợ giúp sẽ được nhiều đánh giá cao.


@Gilles thực hiện rất tốt với việc chỉnh sửa. Tôi không biết rằng động cơ TeX của SE có khả năng cho tất cả ... :-)
codd

Tôi có sai không hay bài tập này được lấy từ "Các loại và ngôn ngữ lập trình" của Pierce?
Fabio F.

@FabioF. Nó thực sự là từ cuốn sách Các loại ngôn ngữ và lập trình của Pierce. Anh ta cung cấp một bằng chứng mà tôi thấy không rõ ràng, vì cách anh ta thực hiện cảm ứng. Đó là lý do tại sao tôi đã cố gắng chứng minh điều đó thông qua cảm ứng trên cấu trúc. Tôi đã nghĩ đến việc đề cập rằng nó là từ cuốn sách, nhưng tôi nghĩ rằng nó sẽ không liên quan. Cũng được chú ý, tuy nhiên!
codd

Câu trả lời:


7

Được rồi, vì vậy hãy xem xét trường hợp , s đã được bắt nguồn bằng cách áp dụng quy tắc E-If và t đã được bắt nguồn bằng cách áp dụng quy tắc E-Funny: Vì vậy s = i fr=ift1thent2elset3st trong đó t 1t 1 t = i fs=ift1thent2elset3t1t1 trong đó t 2t 2 .t=ift1thent2elset3t2t2

Các chúng tôi đang tìm kiếm là u = i fu . s u theo quy tắc E-Funny và t u theo quy tắc E-If.u=ift1thent2elset3sutu


Đánh tôi với nó Công việc tốt.
Patrick87

Trời ạ, tôi đã thực sự nhìn quá xa ... Cảm ơn!
codd

Bạn đã trộn chúng lên, theo sau từ E-Funny. Hay tôi đang nhìn thấy một cái gì đó sai? su
codd

@Jeroen Bạn nói đúng - Tôi trộn chúng lên. Đã sửa bây giờ.
sepp2k

8

Một thuật ngữ nhỏ có thể giúp ích nếu bạn muốn tìm kiếm điều này: các quy tắc này đang viết lại các quy tắc , chúng không liên quan gì đến các hệ thống loại¹. Tài sản bạn đang cố chứng minh được gọi là hợp lưu ; cụ thể hơn, đó là sự hợp lưu mạnh mẽ : nếu một thuật ngữ có thể được giảm theo nhiều cách khác nhau ở một bước, chúng có thể hội tụ trở lại ở bước tiếp theo. Nói chung, hợp lưu cho phép có được bất kỳ số lượng các bước và không chỉ là một: nếu r * t sau đó là us * ut * ursrtusutu - nếu một thuật ngữ có thể được giảm theo nhiều cách khác nhau, bất kể họ đã chuyển hướng bao xa, cuối cùng họ cũng có thể hội tụ trở lại.

Cách tốt nhất để chứng minh một tính chất của các quy tắc viết lại được quy định theo quy nạp như vậy là bằng cách cảm ứng trên cấu trúc của đạo hàm giảm, chứ không phải là cấu trúc của thuật ngữ rút gọn. Ở đây, hoặc là hoạt động, bởi vì các quy tắc tuân theo cấu trúc của thuật ngữ bên trái, nhưng lý luận về các quy tắc thì đơn giản hơn. Thay vì đi sâu vào thuật ngữ, bạn thực hiện tất cả các cặp quy tắc và xem thuật ngữ nào có thể là một mặt trái cho cả hai. Trong ví dụ này, cuối cùng bạn sẽ nhận được các trường hợp tương tự, nhưng nhanh hơn một chút.

t1t2t2t1 in [E-IfFunny]. So when you have a term to which both rules apply — which must be of the form ifr1thenr2elser3, you can choose to apply the rules in either order:

ifr1thenr2elser3[E-If][E-IfFunny]ifr1thenr2elser3ifr1thenr2elser3[E-IfFunny][E-If]ifr1thenr2elser3

¹ You'll sometimes see types and rewriting together, but at their core they're orthogonal concepts.

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.