\( % Latex Preamble definitions here (mostly usepackage) \usepackage% %[dvipsnames] {xcolor} % make sure this is before the loading font packages \newcommand\hmmax{0} \newcommand\bmmax{0} \usepackage{amssymb} \usepackage{amsmath} \usepackage{mathtools} \usepackage %[dvipsnames] {graphicx} \usepackage{float} %\usepackage[numbers]{natbib} \usepackage[document]{ragged2e} % % enumitem doesn't seem to work with beamer %\usepackage[inline]{enumitem} \usepackage{wrapfig} \usepackage{stackrel} % extensible arrows \usepackage{extpfeil} % \usepackage{trfrac} \usepackage{amsthm} \usepackage{tikz} \usepackage{tikz-cd} \usepackage{tikz} \usepackage{tikz-qtree} \usetikzlibrary{automata, positioning, arrows, shapes.geometric} \usepackage{turnstile} \usepackage{comment} %https://tex.stackexchange.com/questions/21334/is-there-a-package-that-has-the-clockwise-gapped-circle-arrow-in-it % \usepackage{mathbx} \usepackage{datetime} \usepackage{datetime2} %% Also See %% http://u.cs.biu.ac.il/~tsaban/Pdf/LaTeXCommonErrs.pdf %% for general tips \usepackage{listings} \usepackage{subfigure} \usepackage{bm} \usepackage{amsfonts} %% - also included by amssymb \usepackage{mathpazo} %% - because the OP uses mathpazo, optional %\usepackage{tufte-latex} \usepackage{comment} \usepackage{mathtools} \usepackage{bussproofs} \usepackage{hyperref} %\usepackage{cleveref} \)
\( %% Your math definitions here % \newcommand{\alphaequiv}{{\underset{\raise 0.7em\alpha}{=}}} \newcommand{\yields}{\Rightarrow} \newcommand{\derives}{\overset{*}{\yields}} \newcommand{\alphaequiv}{=_{\alpha}} \newcommand{\tto}[2]{{\overset{#1}{\underset{#2}{\longrightarrow}}}} \newcommand{\transitsto}[2]{{\overset{#1}{\underset{#2}{\longrightarrow}}}} \newcommand{\xtransitsto}[2]{{\underset{#2}{\xrightarrow{#1}}}} \newcommand{\xtransitsfrom}[2]{{\underset{#2}{\xleftarrow{#1}}}} \newcommand{\xto}[2]{{\xtransitsto{#1}{#2}}} \newcommand{\xfrom}[2]{{\xtransitsfrom{#1}{#2}}} \newcommand{\xreaches}[2]{{\underset{#2}{\xtwoheadrightarrow{#1}}}} \newcommand{\reaches}[2]{{\underset{#2}{\xtwoheadrightarrow{#1}}}} %\newcommand{\reaches}[2]{{\overset{#1}{\underset{#2}{\twoheadrightarrow}}}} %\newcommand{\goesto}[2]{\transitsto{#1}{#2}} %\newcommand{\betareducesto}{{\underset{\beta}{\rightarrow}}} \newcommand{\betareducesto}{\rightarrow_{\beta}} %\newcommand{\etareducesto}{{\underset{\eta}{\rightarrow}}} \newcommand{\etareducesto}{\rightarrow_{\eta}} %\newcommand{\betaetareducesto}{{\underset{\beta\ \eta}{\rightarrow}}} \newcommand{\betaetareducesto}{\rightarrow_{\beta\eta}} \newcommand{\preducesto}{\rhd} \newcommand{\psimplifiesto}{\stackrel{\scriptstyle{*}}{\rhd}} \newcommand{\lreducesto}{\rightsquigarrow} \newcommand{\lsimplifiesto}{\stackrel{\scriptstyle{*}}{\lreducesto}} \newcommand{\rewritesto}{\hookrightarrow} \newcommand{\goesto}[1]{\stackrel{#1}{\rightarrow}} \newcommand{\xgoesto}[1]{\xrightarrow{#1}} \newcommand{\reducesto}{\stackrel{}{\rightarrow}} \newcommand{\simplifiesto}{\stackrel{\scriptstyle{*}}{\rightarrow}} \newcommand{\connected}[1]{\stackrel{#1}{\leftrightarrow}} \newcommand{\joins}{\downarrow} \newcommand{\evaluatesto}{\Longrightarrow} %\newcommand{\lit}[1]{\hbox{\sf{#1}}} \newcommand{\lit}[1]{{\sf{#1}}} \newcommand{\true}{\lit{true}} \newcommand{\false}{\lit{false}} \def\Z{\mbox{${\mathbb Z}$}} \def\N{\mbox{${\mathbb N}$}} \def\P{\mbox{${\mathbb P}$}} \def\R{\mbox{${\mathbb R}$}} \def\T{\mbox{${\mathbb T}$}} \newcommand{\Rp}{{\mathbb{R}}^+} \def\Bool{\mbox{${\mathbb B}$}} \def\Q{\mbox{${\mathbb Q}$}} \def\sA{\mbox{${\cal A}$}} \def\sB{\mbox{${\cal B}$}} \def\sC{\mbox{${\cal C}$}} \def\sD{\mbox{${\cal D}$}} \def\sF{\mbox{${\cal F}$}} \def\sG{\mbox{${\cal G}$}} \def\sL{\mbox{${\cal L}$}} \def\sP{\mbox{${\cal P}$}} \def\sM{\mbox{${\cal M}$}} \def\sN{\mbox{${\cal N}$}} \def\sR{\mbox{${\cal R}$}} \def\sS{\mbox{${\cal S}$}} \def\sO{\mbox{${\cal O}$}} \def\sT{\mbox{${\cal T}$}} \def\sU{\mbox{${\cal U}$}} \def\th{\mbox{$\widetilde{h}$}} \def\tg{\mbox{$\widetilde{g}$}} \def\tP{\mbox{$\widetilde{P}$}} \def\norm{\mbox{$\parallel$}} \def\osum{${{\bigcirc}}\!\!\!\!{\rm s}~$} \def\pf{\noindent {\bf Proof}~~} \def\exec{\mathit{exec}} \def\Act{\mathit{A\!ct}} \def\Traces{\mathit{Traces}} \def\Spec{\mathit{Spec}} \def\uns{\mathit{unless}} \def\ens{\mathit{ensures}} \def\lto{\mathit{leads\!\!-\!\!to}} \def\a{\alpha} \def\b{\beta} \def\c{\gamma} \def\d{\delta} \def\sP{\mbox{${\cal P}$}} \def\sM{\mbox{${\cal M}$}} \def\sA{\mbox{${\cal A}$}} \def\sB{\mbox{${\cal B}$}} \def\sC{\mbox{${\cal C}$}} \def\sI{\mbox{${\cal I}$}} \def\sS{\mbox{${\cal S}$}} \def\sD{\mbox{${\cal D}$}} \def\sF{\mbox{${\cal F}$}} \def\sG{\mbox{${\cal G}$}} \def\sR{\mbox{${\cal R}$}} \def\tg{\mbox{$\widetilde{g}$}} \def\ta{\mbox{$\widetilde{a}$}} \def\tb{\mbox{$\widetilde{b}$}} \def\tc{\mbox{$\widetilde{c}$}} \def\tx{\mbox{$\widetilde{x}$}} \def\ty{\mbox{$\widetilde{y}$}} \def\tz{\mbox{$\widetilde{z}$}} \def\tI{\mbox{$\widetilde{I}$}} \def\norm{\mbox{$\parallel$}} \def\sL{\mbox{${\cal L}$}} \def\sM{\mbox{${\cal M}$}} \def\sN{\mbox{${\cal N}$}} \def\th{\mbox{$\widetilde{h}$}} \def\tg{\mbox{$\widetilde{g}$}} \def\tP{\mbox{$\widetilde{P}$}} \def\norm{\mbox{$\parallel$}} \def\to{\rightarrow} \def\ov{\overline} \def\gets{\leftarrow} \def\too{\longrightarrow} \def\To{\Rightarrow} %\def\points{\mapsto} %\def\yields{\mapsto^{*}} \def\un{\underline} \def\vep{$\varepsilon$} \def\ep{$\epsilon$} \def\tri{$\bigtriangleup$} \def\Fi{$F^{\infty}$} \def\Di{\Delta^{\infty}} \def\ebox\Box \def\emp{\emptyset} \def\leadsto{\rightharpoondown^{*}} \newcommand{\benum}{\begin{enumerate}} \newcommand{\eenum}{\end{enumerate}} \newcommand{\bdes}{\begin{description}} \newcommand{\edes}{\end{description}} \newcommand{\bt}{\begin{theorem}} \newcommand{\et}{\end{theorem}} \newcommand{\bl}{\begin{lemma}} \newcommand{\el}{\end{lemma}} % \newcommand{\bp}{\begin{prop}} % \newcommand{\ep}{\end{prop}} \newcommand{\bd}{\begin{defn}} \newcommand{\ed}{\end{defn}} \newcommand{\brem}{\begin{remark}} \newcommand{\erem}{\end{remark}} \newcommand{\bxr}{\begin{exercise}} \newcommand{\exr}{\end{exercise}} \newcommand{\bxm}{\begin{example}} \newcommand{\exm}{\end{example}} \newcommand{\beqa}{\begin{eqnarray*}} \newcommand{\eeqa}{\end{eqnarray*}} \newcommand{\bc}{\begin{center}} \newcommand{\ec}{\end{center}} \newcommand{\bcent}{\begin{center}} \newcommand{\ecent}{\end{center}} % \newcommand{\la}{\langle} % \newcommand{\ra}{\rangle} \newcommand{\bcor}{\begin{corollary}} \newcommand{\ecor}{\end{corollary}} \newcommand{\bds}{\begin{defns}} \newcommand{\eds}{\end{defns}} \newcommand{\brems}{\begin{remarks}} \newcommand{\erems}{\end{remarks}} \newcommand{\bxrs}{\begin{exercises}} \newcommand{\exrs}{\end{exercises}} \newcommand{\bxms}{\begin{examples}} \newcommand{\exms}{\end{examples}} \newcommand{\bfig}{\begin{figure}} \newcommand{\efig}{\end{figure}} \newcommand{\set}[1]{\{#1\}} \newcommand{\pair}[1]{\langle #1\rangle} \newcommand{\tuple}[1]{\langle #1\rangle} \newcommand{\size}[1]{| #1 |} \newcommand{\union}{\cup} \newcommand{\Union}{\bigcup} \newcommand{\intersection}{\cap} \newcommand{\Intersection}{\bigcap} \newcommand{\B}{\textbf{B}} %\newcommand{\be}[2]{\begin{equation} \label{#1} \tag{#2} \end{equation}} \newcommand{\abs}[1]{{\lvert}#1{\rvert}} \newcommand{\id}[1]{\mathit{#1}} \newcommand{\pfun}{\rightharpoonup} \newcommand{\ra}[1]{\kern-1.5ex\xrightarrow{\ \ #1\ \ }\phantom{}\kern-1.5ex} \newcommand{\ras}[1]{\kern-1.5ex\xrightarrow{\ \ \smash{#1}\ \ }\phantom{}\kern-1.5ex} \newcommand{\da}[1]{\bigg\downarrow\raise.5ex\rlap{\scriptstyle#1}} \newcommand{\ua}[1]{\bigg\uparrow\raise.5ex\rlap{\scriptstyle#1}} % \newcommand{\lift}[1]{#1_{\bot}} \newcommand{\signal}[1]{\tilde{#1}} \newcommand{\ida}{\stackrel{{\sf def}}{=}} \newcommand{\eqn}{\doteq} \newcommand{\deduce}[1]{\sststile{#1}{}} %% These don't sit very well with MathJax %% so we don't plan to use theorem like environments %% in org documents. %% instead we plan to use headings with %% 1. property drawers with a CLASS property identifying %% the environment %% 2. A tag with the same name as the CLASS property %% In LaTeX export, these turn into (sub)sections. %% See http://u.cs.biu.ac.il/~tsaban/Pdf/LaTeXCommonErrs.pdf %% \newtheorem{prop}[thm]{Proposition} %% \theoremstyle{plain}%default %% \newtheorem{theorem}{Theorem}[section] %% \newtheorem{lemma}{Lemma}[section] %% \newtheorem{corollary}{Corollary}[section] %% \newtheorem{definition}{Definition}[section] %% \newtheorem{remark}{Remark}[section] %% \newtheorem{example}{Example}[section] %% \newtheorem{exercise}{Exercise}[section] \newcommand{\less}[1]{#1_{<}} \newcommand{\pfn}{\rightharpoonup} \newcommand{\ffn}{\stackrel{{\sf fin}}{\rightharpoonup}} \newcommand{\stkout}[1]{\ifmmode\text{\sout{\ensuremath{#1}}}\else\sout{#1}\fi} % Caution: Not supported by MathJax! % ---------------------------------- % \DeclareMathSymbol{\shortminus}{\mathbin}{AMSa}{"39} % \usepackage{amsfonts} %% <- also included by amssymb % \DeclareMathSymbol{\shortminus}{\mathbin}{AMSa}{"39} \usepackage{mathpazo} %% <- because the OP uses mathpazo, optional \newcommand{\mbf}[1]{\mathbf{#1}} \newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor} \newcommand{\ceil}[1]{\left\lceil #1 \right\rceil} \newcommand{\rel}{\twoheadrightarrow} \newcommand{\map}{\rightarrow} %\newcommand{\fixed}{\boldsymbol{\circlearrowleft}} \newcommand{\terminal}{\not\xto{}{}} \newcommand{\fixed}{\bm\circlearrowleft} \newcommand{\imp}{\rightarrow} \newcommand{\dimp}{\leftrightarrow} % double implication \newcommand{\lequiv}{\Longleftrightarrow} % logical equivalence \newcommand{\limplies}{\Rightarrow} \newcommand{\lxor}{\veebar} \)
UP | HOME

Lecture notes on the IF+/ Language: Operational Semantics

Table of Contents

1 Revision History

[2018-08-22 Wed 16:31]
Created.

2 Introduction

We define the language IF+/ by extending the ADDITION language in two orthogonal directions. First, we extend semantic (value) domain to include boolean constants. Second, we include the division operation \(/\) corresponding to division over numbers. We also include ifte, the ``if then else'' operator, common to many programming languages.

As we will see, the language IF+/ exhibits interesting semantic behaviour not found in the ADDITION language. For example, normal forms are no longer values. We encounter the possibility of errors.

3 IF+/ Syntax

\begin{align*} e ::= & & \scriptstyle{EXP} & \qquad \mbox{IF+/ Expression}\\ & \overline{n} & \scriptstyle{NUM\_LIT} & \qquad \mbox{Number Literal}\\ & e + e & \scriptstyle{PLUSEXP} & \qquad \mbox{Plus Expression}\\ \\ & e / e & \scriptstyle{DIVEXP} & \qquad \mbox{Div Expression}\\ \\ & \sf{if}\ e\ e \ e & \scriptstyle{IFEXP} & \qquad \mbox{If Expression}\\ \\ & \overline{b} & \scriptstyle{BOOL\_LIT} & \qquad \mbox{Boolean literal}\\ \\ \end{align*}

4 Semantic domains

\begin{align*} v ::= & & \scriptstyle{VAL} & \qquad \mbox{Value} \\ \\ & n & \scriptstyle{NUM\_VAL} & \quad \mbox{Number value}\\ \\ & b & \scriptstyle{BOOL\_VAL} & \quad \mbox{Boolean value}\\ \\ n ::= & & \scriptstyle{NUM} & \qquad \mbox{Number} \\ \ b ::= & & \scriptstyle{BOOL} & \qquad \mbox{Boolean} \\ \\ & \sf{true} & \scriptstyle{TRUE\_VAL} & \qquad \mbox{True value}\\ \\ & \sf{false} & \scriptstyle{FALSE\_VAL} & \qquad \mbox{True value}\\ \\ \end{align*}

4.1 Theorem (Values are represented by literals)

4.1.1 Statement

If \(v\) is a value, then \(\overline{v}\) is an expression.

4.1.2 Proof

By inspection of the syntax of expressions and the definition of the value domain.

Expressions of the form \(\overline{v}\) are called literals.

5 IF+/ Rewrite (redex) rules

\[\rewritesto \subseteq \id{EXP}\times \id{EXP}\]

\begin{align*} \overline{n_1}+\overline{n_2} \rewritesto \overline{n_1+n_2}\qquad \scriptstyle{PLUS} \\ \\ \\ \overline{n_1}/\overline{n_2} \rewritesto \overline{n_1/n_2}\quad n_2\neq 0\quad\scriptstyle{DIV} \\ \\ \\ {\sf{if}}\ \overline{\true} \ e\ e' \rewritesto e \quad \scriptstyle{IFTRUE}\\ \\ \\ {\sf{if}}\ \overline{\false} \ e\ e' \rewritesto e' \quad \scriptstyle{IFFALSE} \end{align*}

Note how the rewrite rules for \({\sf if}\) capture the intended meaning of an d\({\sf if}\) expression.

6 Reduction (small step semantics)

\[\reducesto \subseteq \id{EXP}\times \id{EXP}\]

\begin{align*} \frac{e \hookrightarrow e'}{e\reducesto e'}\quad \scriptstyle{REWRITE} \\ \\ \\ % \frac{e_1\rightarrow e_1'}{e_1+e_2 \reducesto e_1'+e_2}\quad \scriptstyle{P\_LEFT} \\ \\ \\ % \frac{e_2\reducesto e_2'}{e_1+e_2 \reducesto e_1+e'_2}\quad \scriptstyle{P\_RIGHT} \\ \\ \\ % \frac{e_1\rightarrow e_1'}{e_1/e_2 \reducesto e_1'/e_2}\quad \scriptstyle{D\_LEFT} \\ \\ \\ % \frac{e_2\reducesto e_2'}{e_1/e_2 \reducesto e_1/e'_2}\quad \scriptstyle{D\_RIGHT} \\ \\ \\ % \frac{e_1 \reducesto e'_1}{{\sf if}\ e_1\ e_2\ e_3 \reducesto {\sf if}\ e'_1\ e_2\ e_3}\quad \scriptstyle{IF\_TEST} \\ \\ \\ % \end{align*}

Note the reduction rules for \({\sf if}\). These capture our intuition that in an {\sf if} expression, the then or else expressions are reduced only after the test expression is reduced to either the literal \(\true\) or \(\false\), respectively.

7 Semantic Properties

7.1 Theorem (Literals are irreducible)

7.1.1 Statement

If \(v\) is a value then \(\overline{v}\) is irreducible.

7.1.2 Proof

By inspection of the reduction rules. \(\overline{v}\) does not match the right hand side of the consequent of any of the rules.

Note that the converse is not true: there are irreducible expressions that are not values, e.g., \(5/0\). (Can you give other examples?) Contrast this with the ADDITION langugae, where every irreducible expression represented a value.

7.2 Theorem (Termination)

7.2.1 Statement

\(\reducesto\) is terminating.

7.2.2 Proof

Exercise.

7.3 Theorem (Local Confluence)

7.3.1 Statement

If \(e\reducesto e_1\) and \(e\reducesto e_2\), there there exists \(e_3\) such that \(e_1\simplifiesto e_3\) and \(e_2 \simplifiesto e_3\).

7.3.2 Proof

Exercise.

7.4 Theorem (Confluence)

7.4.1 Statement

\(\reducesto\) is confluent.

7.4.2 Proof

Follows from termination and local confluence.

7.5 Theorem (Convergence)

7.5.1 Statement

Every expression simplifies to a unique normal form.

7.5.2 Proof

Confluence and termination imply convergence.

8 Examples of simplification resulting in an error

\begin{align*} & 1. \qquad (2-2) \reducesto 0 \qquad & \mbox{REWRITE}\\ \\ & 2. \qquad (3+4)/(2-2) \reducesto (3+4)/0 \qquad & \mbox{1, D_RIGHT} \\ \\ & 3. \qquad (3+4) \reducesto 7 \qquad & \mbox{REWRITE}\\ \\ & 4. \qquad (3+4)/0 \reducesto 7/0 \qquad & \mbox{3, D_LEFT}\\ \\ & 5. \qquad (3+4)/0 \simplifiesto 7/0 \qquad & \mbox{4, REDUCE}\\ \\ & 6. \qquad (3+4)/(2-2) \simplifiesto 7/0 \qquad & \mbox{2, 5, TRANS} \\ \\ & 7. \qquad 7/0 \not\reducesto \end{align*}

9 Errors: Normal forms that do not represent values

A normal form that is not a literal is an error. Note that an expression may terminate at a literal representing a value, or terminate at an error.

9.1 Type Errors versus /0 Errors

A closer examination of the errors shows that errors arise when operators receive arguments that do not match their specification. For example:

  1. \({\sf if}\) expects its test argument to be boolean, but it is not (TYPE ERROR)
  2. \(+\) expects both its arguments to be numbers, but one or more of the arguments are not numbers. (TYPE ERROR)
  3. \(/\) expects both its arguments to be numbers, but one or more of its arguments are not numbers. (TYPE ERROR)
  4. \(/\) expects its second argument (denominator) to be non-zero, but it is in fact zero. (CHECKED ERROR: /0)

Of these, the first three error are called type errors. The last kind of error (4) is what called a checked error.

To a certain extent, the classification of errors into type errors versus checked errors is arbitrary. In our semantics, both actually occur at runtime (simplification) and checks are runtime necessary to flag them. The classification, however, serves a useful purpose when, with some compromises on the semantics, we can eliminate checking for the type errors completely at runtime. How this is done and what compromises this entails is material for the chapter on type systems (coming soon to a classroom near you.)

9.2 Theorem (Progress)

9.2.1 Statement

Every expression

  • is reducible, or
  • is is irreducible, in which case it is a
    • literal,
    • type error, or
    • /0 error

9.2.2 Proof

Exercise.

10 Valuation (Big step) Semantics

10.1 Evaluation Rules

\[\evaluatesto \subseteq \id{EXP}\times \id{VAL}\]

\begin{align*} \frac{}{\overline{v}\evaluatesto v}\quad \scriptstyle{VAL} \\ \\ \\ \frac{{e_1\evaluatesto n_1}\qquad {e_2\evaluatesto n_2}}{e_1+e_2 \evaluatesto n_1+n_2}\quad \scriptstyle{PLUS} \\ \\ \\ \frac{{e_1\evaluatesto n_1}\qquad {e_2\evaluatesto n_2}\quad n_2\neq 0}{e_1/e_2 \evaluatesto n_1/n_2}\quad \scriptstyle{DIV} \\ \\ \\ \frac{{e_1\evaluatesto {\sf true}}\qquad{e_2\evaluatesto v_2}}{{\sf if}\ e_1\ e_2 \ e_3 \evaluatesto v_2}\quad \scriptstyle{IF\_TRUE} \\ \\ \\ \frac{{e_1\evaluatesto {\sf false}}\qquad{e_3\evaluatesto v_3}}{{\sf if}\ e_1\ e_2 \ e_3 \evaluatesto v_3}\quad \scriptstyle{IF\_FALSE} \\ \\ \\ \end{align*}

11 Theorem (Consistency between small-step and valuation semantics)

11.0.1 Statement

\[e\simplifiesto \overline{v}\] iff \[e\evaluatesto v\]

11.0.2 Proof

Left as an exercise.

12 Implementations (Reduction Strategies)

Exercise.

13 Theorem (Relating reduction, evaluation and implementation)

13.0.1 Statement

\(e\simplifiesto \overline{v}\) \(\qquad\) iff \(\qquad\) \(e\lsimplifiesto \overline{v}\) \(\qquad\) iff \(\qquad\) \(e\evaluatesto v\).

13.0.2 Proof

Exercise.

Author: Venkatesh Choppella

Created: 2023-11-25 Sat 09:14

Validate