It's perfectly possible to write the evaluation rules for my language without using evaluation contexts. My semantics are entirely call by value and do not permit the term to be stepped forwards inside of lambdas. Despite this, all the resources I've seen use reduction contexts in some way. Is there a good reason to use contexts that I am missing?
Why do I need evaluation contexts in Redex?
316 Views Asked by superlizardmo At
1
There are 1 best solutions below
Related Questions in RACKET
- Python Requests just got very slow, better alternative?
- Getting X Cursor in WebKit GTK2+ widget if run by startx
- How to increase PHP memory_limit in Debian Jessie?
- Unable to install RabbitMQ using puppet due to curl error
- phpinfo() uses old version. What am I missing after "make install"?
- How to make home directory the root with useradd on Debian
- Is Google using Debian and Apache?
- scanbd doesn't work unless I restart it from the command line
- debconf selections for phpmyadmin unattended installation with no webserver installed and no dbconfig-common
- How to run TeamSpeak3 server on boot?
Related Questions in SEMANTICS
- Python Requests just got very slow, better alternative?
- Getting X Cursor in WebKit GTK2+ widget if run by startx
- How to increase PHP memory_limit in Debian Jessie?
- Unable to install RabbitMQ using puppet due to curl error
- phpinfo() uses old version. What am I missing after "make install"?
- How to make home directory the root with useradd on Debian
- Is Google using Debian and Apache?
- scanbd doesn't work unless I restart it from the command line
- debconf selections for phpmyadmin unattended installation with no webserver installed and no dbconfig-common
- How to run TeamSpeak3 server on boot?
Related Questions in PLT-REDEX
- Python Requests just got very slow, better alternative?
- Getting X Cursor in WebKit GTK2+ widget if run by startx
- How to increase PHP memory_limit in Debian Jessie?
- Unable to install RabbitMQ using puppet due to curl error
- phpinfo() uses old version. What am I missing after "make install"?
- How to make home directory the root with useradd on Debian
- Is Google using Debian and Apache?
- scanbd doesn't work unless I restart it from the command line
- debconf selections for phpmyadmin unattended installation with no webserver installed and no dbconfig-common
- How to run TeamSpeak3 server on boot?
Related Questions in REDEX
- Python Requests just got very slow, better alternative?
- Getting X Cursor in WebKit GTK2+ widget if run by startx
- How to increase PHP memory_limit in Debian Jessie?
- Unable to install RabbitMQ using puppet due to curl error
- phpinfo() uses old version. What am I missing after "make install"?
- How to make home directory the root with useradd on Debian
- Is Google using Debian and Apache?
- scanbd doesn't work unless I restart it from the command line
- debconf selections for phpmyadmin unattended installation with no webserver installed and no dbconfig-common
- How to run TeamSpeak3 server on boot?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Short answer: You don't, but its much easier with them.
Long answer: Pretty much everything you would use an evaluation context for, you can do yourself with a different reduction rule in your reduction relation, it just becomes much more obnoxious, especially as you model anything but the smallest of languages.
Let's say you want to model the call by value lambda calculus. The language for it (without evaluation contexts) would be:
(here, the last two lines are used to take advantage of Redex's capture avoiding substitution.
Now, lets try making the semantics for this language without using evaluation contexts. There are two places we can expand sub-expressions, the operator and the operand of function application. So, including that with normal beta-reduction gives us:
This isn't too bad, but remember that we have to add an additional rule for every place that a sub-expression can be evaluated. So let would need its own rule, if would need its own rule, etc. And remember that this is on top of the rules for each of these forms.
A much easier way to do this is just with evaluation contexts, which allows us to specify which expressions have sub-expressions that can take a step, and what order they should happen in. So let's try rewriting our
Lvlanguage with evaluation contexts:It's three lines longer now, but this tells redex that we'll be evaluating our expressions in an evaluation context,
E, and when its done evaluating the expression, place it into the context (whereholeis the top-level context so to speak). Thus, we can reduce our reduction relation down to just one rule, beta reduction:Here we use
in-holeto say that we are in a hole that followsEas shown above. This follows call by value semantics because holes can only appear from left to right in applications.You can imagine that if you had a much larger calculi with many sub-expressions that this would save you from writing a very large amount of reduction rules.
So, to recap, you don't need to, it just makes your model much much shorter.