[obsidian] vault backup: 2024-11-23 20:37:43[
This commit is contained in:
		
							
								
								
									
										84
									
								
								content/lambda-mmm(実用版).md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								content/lambda-mmm(実用版).md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
---
 | 
			
		||||
date: 2024-11-23 08:05
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#mimium 
 | 
			
		||||
 | 
			
		||||
元々のLambda-mmmは実際に使われているmimiumでの中間表現と比べて以下のような差がある
 | 
			
		||||
 | 
			
		||||
- タプルなど構造化された型がない(実際にはVMの命令にワードサイズの情報を付加しているのでこれは結構重要)
 | 
			
		||||
- letで宣言された変数に対しては代入ができる(部分的に参照型が使われている)
 | 
			
		||||
- delayやfeedの項を終端の値として扱う意味論(コンパイル時の正規化作業)と、実際の評価に使われる意味論が混ざっている
 | 
			
		||||
 | 
			
		||||
## 型
 | 
			
		||||
 | 
			
		||||
$$
 | 
			
		||||
\begin{align}
 | 
			
		||||
\tau ::=
 | 
			
		||||
		& \quad unit &\\
 | 
			
		||||
	  |&\quad R \quad &\\
 | 
			
		||||
      |&\quad I_n \quad &n \in \mathbb{N} \\
 | 
			
		||||
      |& \quad \tau * \tau \quad &\\
 | 
			
		||||
      |&\quad \tau → \tau &\\
 | 
			
		||||
      % |&\quad \langle \tau \rangle
 | 
			
		||||
\end{align}
 | 
			
		||||
$$
 | 
			
		||||
 | 
			
		||||
## 値
 | 
			
		||||
 | 
			
		||||
$$
 | 
			
		||||
\begin{align}
 | 
			
		||||
v ::=
 | 
			
		||||
	  &\quad unit & \\
 | 
			
		||||
	  |&\quad R & R \in \mathbb{R} \\
 | 
			
		||||
      |&\quad v * v \quad &\\
 | 
			
		||||
      |&\quad \lambda x.e \\
 | 
			
		||||
      |&\quad delay(e,e_{time},v_{bound})\\
 | 
			
		||||
      |&\quad feed\ x.e
 | 
			
		||||
\end{align}
 | 
			
		||||
$$
 | 
			
		||||
## 項
 | 
			
		||||
 | 
			
		||||
$$
 | 
			
		||||
\begin{align}
 | 
			
		||||
e_p ::=
 | 
			
		||||
	  &\quad unit & \\
 | 
			
		||||
	  |&\quad R & R \in \mathbb{R} \\
 | 
			
		||||
 | 
			
		||||
e ::=
 | 
			
		||||
	  &\quad e_p & \\
 | 
			
		||||
	  |&\quad e,e & [tuple]\\ 
 | 
			
		||||
      |&\quad x\quad &[var]\\
 | 
			
		||||
      |&\quad \lambda x.e &[abs]\\
 | 
			
		||||
	 .|&\quad let\; x\; =\; e\; in\; e &[let]\\
 | 
			
		||||
      |&\quad e\; e &[app]\\
 | 
			
		||||
      |&\quad delay(e,e_{time},e_{bound}) &[delay]\\
 | 
			
		||||
      |&\quad feed\; x.e &[feed]
 | 
			
		||||
\end{align}
 | 
			
		||||
$$
 | 
			
		||||
 | 
			
		||||
## 評価環境(正規化時)
 | 
			
		||||
 | 
			
		||||
$$
 | 
			
		||||
\begin{align}
 | 
			
		||||
E ::= &\; ()\\
 | 
			
		||||
    &|\; E :: (x,v)
 | 
			
		||||
\end{align}
 | 
			
		||||
$$
 | 
			
		||||
 | 
			
		||||
## 正規化の操作的意味論
 | 
			
		||||
 | 
			
		||||
$$
 | 
			
		||||
\begin{gathered}
 | 
			
		||||
	&\frac{E \vdash e_{bound} \Downarrow v_{bound} }
 | 
			
		||||
			{E \vdash delay\; e\;e_{time}\; e_{bound} \Downarrow delay\; e \; e_{time}\; v_{bound} } &\textrm{[E-DELAY]} \\\\
 | 
			
		||||
 | 
			
		||||
&\frac{}{E^n \vdash\ \lambda x.e \Downarrow cls(\lambda x.e , E^n) }\ &\textrm{[E-LAM]} \\
 | 
			
		||||
 | 
			
		||||
&\frac{ E^{n-1} \vdash e \Downarrow v_1\ E^n, x \mapsto v_1 \vdash e \Downarrow v_2 }{E^n, x \mapsto v_2\ \vdash\ feed\ x\ e \Downarrow v_1}\ &\textrm{[E-FEED]} \\
 | 
			
		||||
 | 
			
		||||
&\frac{E^n \vdash e_c \Downarrow n \quad n > 0\ E^n \vdash e_t\ \Downarrow v\ }{E^n \vdash\ if (e_c)\ e_t\ else\ e_t \Downarrow v }\ &\textrm{[E-IFTRUE]}\\
 | 
			
		||||
&\frac{E^n \vdash e_c \Downarrow n \quad n \leqq0\ E^n \vdash e_e\ \Downarrow v\ }{E^n \vdash\ if (e_c)\ e_t\ else\ e_t \Downarrow v }\ &\textrm{[E-IFFALSE]}\\
 | 
			
		||||
&\frac{E^n \vdash e_1 \Downarrow cls(\lambda x_c.e_c, E^n_c) E^n \vdash e_2 \Downarrow v_2\ E^n_c,\ x_c \mapsto v_2 \vdash e_c \Downarrow v }{E^n \vdash\ e_1\ e_2 \Downarrow v }\ &\textrm{[E-APP]}
 | 
			
		||||
\end{gathered}
 | 
			
		||||
$$
 | 
			
		||||
		Reference in New Issue
	
	Block a user