Quy tắc rút gọn mà bạn yêu cầu là quy tắc thông thường cho các câu lệnh IF. Nó bao gồm hai quy tắc tính toán và một quy tắc ngữ cảnh:
IF TRUE a b → a
IF FALSE a b → b
a→a′IF a b c→IF a′ b c
Trong cả cài đặt gọi theo giá trị (nghiêm ngặt) và gọi theo nhu cầu (lười biếng), cả hai a và bcó thể là biểu thức tùy ý. Họ không cần phải là giá trị.
Các quy tắc loại này, làm giảm các chức năng cụ thể (ở đây IF
), thường được gọi là quy tắc delta.
Bây giờ, bước lý do (2) ở trên là cần thiết để quy tắc rút gọn cho IF có thể áp dụng. IFyêu cầu 3 đối số, nhưng trong thuật ngữ gốc, nó chỉ có hai, vì vậy không thể giảm. (IFđang được áp dụng một phần, giống như bất kỳ chức năng nào trong Haskell. Điều này có nghĩa là chỉ một phần đối số của nó cần được cung cấp.) Việc sử dụngη-Phát triển cung cấp đối số bổ sung, mà không thay đổi ngữ nghĩa.
IF a b c -> IF a' b c with a-> a'