Created
August 20, 2011 00:26
-
-
Save einblicker/1158390 to your computer and use it in GitHub Desktop.
CoPL problem 72
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| |- let rec f = fun x -> if x < 1 then [] else x :: f (x - 1) in | |
| f 3 evalto 3 :: 2 :: 1 :: [] | |
| by E-LetRec { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] |- | |
| f 3 evalto 3 :: 2 :: 1 :: [] | |
| by E-AppRec { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] |- | |
| f evalto ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] |- | |
| 3 evalto 3 | |
| by E-Int {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| if x < 1 then [] else x :: f (x - 1) | |
| evalto 3 :: 2 :: 1 :: [] | |
| by E-IfF { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| x < 1 evalto false | |
| by E-Lt { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| x evalto 3 | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| 1 evalto 1 | |
| by E-Int {}; | |
| 3 less than 1 is false by B-Lt {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| x :: f (x - 1) | |
| evalto 3 :: (2 :: (1 :: [])) | |
| by E-Cons { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| x evalto 3 | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| f (x - 1) | |
| evalto 2 :: (1 :: []) | |
| by E-AppRec { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| f evalto ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| x - 1 evalto 2 | |
| by E-Minus { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| x evalto 3 by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 3 |- | |
| 1 evalto 1 by E-Int {}; | |
| 3 minus 1 is 2 by B-Minus {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| if x < 1 then [] else x :: f (x - 1) | |
| evalto 2 :: 1 :: [] | |
| by E-IfF { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| x < 1 evalto false | |
| by E-Lt { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| x evalto 2 by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| 1 evalto 1 by E-Int {}; | |
| 2 less than 1 is false by B-Lt {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| x :: f (x - 1) | |
| evalto 2 :: 1 :: [] | |
| by E-Cons { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| x evalto 2 by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| f (x - 1) | |
| evalto 1 :: [] | |
| by E-AppRec { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| f evalto ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] | |
| by E-Var{}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| x - 1 evalto 1 | |
| by E-Minus { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| x evalto 2 by E-Var{}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 2 |- | |
| 1 evalto 1 by E-Int{}; | |
| 2 minus 1 is 1 by B-Minus {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| if x < 1 then [] else x :: f (x - 1) | |
| evalto 1 :: [] | |
| by E-IfF { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| x < 1 evalto false | |
| by E-Lt { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| x evalto 1 | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| 1 evalto 1 | |
| by E-Int {}; | |
| 1 less than 1 is false by B-Lt {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| x :: f (x - 1) | |
| evalto 1 :: [] | |
| by E-Cons { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| x evalto 1 | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| f (x - 1) | |
| evalto [] | |
| by E-AppRec { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| f evalto ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)] | |
| by E-Var{}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| x - 1 evalto 0 | |
| by E-Minus { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| x evalto 1 | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 1 |- | |
| 1 evalto 1 | |
| by E-Int {}; | |
| 1 minus 1 is 0 by B-Minus {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 0 |- | |
| if x < 1 then [] else x :: f (x - 1) | |
| evalto [] | |
| by E-IfT { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 0 |- | |
| x < 1 evalto true | |
| by E-Lt { | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 0 |- | |
| x evalto 0 | |
| by E-Var {}; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 0 |- | |
| 1 evalto 1 | |
| by E-Int {}; | |
| 0 less than 1 is true by B-Lt {} | |
| }; | |
| f = ()[rec f = fun x -> if x < 1 then [] else x :: f (x - 1)], | |
| x = 0 |- | |
| [] evalto [] | |
| by E-Nil {} | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment