comparison paper/type.tex @ 43:9030d2680559

Wrote typed-lambda
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Sun, 29 Jan 2017 12:27:25 +0900
parents 142c8de4a24f
children 3b2446944d11
comparison
equal deleted inserted replaced
42:142c8de4a24f 43:9030d2680559
789 よって、関数適用 $ t_1 \; t_2 $ の評価順は、まずE-APP1を用いて$t_1$が値となった後にE-APP2を用いて$t_2$を値とし、最後にE-APPABSで関数を適用を行なう。 789 よって、関数適用 $ t_1 \; t_2 $ の評価順は、まずE-APP1を用いて$t_1$が値となった後にE-APP2を用いて$t_2$を値とし、最後にE-APPABSで関数を適用を行なう。
790 790
791 791
792 % }}} 792 % }}}
793 793
794 % {{{ 単純型付きラムダ計算
795
794 \section{単純型付きラムダ計算} 796 \section{単純型付きラムダ計算}
795 型無しラムダ計算に対して単純型を適用する場合、ラムダ抽象の型について考える必要がある。 797 型無しラムダ計算に対して単純型を適用する場合、ラムダ抽象の型について考える必要がある。
796 ラムダ抽象は値を取って値を返すため、関数として考えることもできる。 798 ラムダ抽象は値を取って値を返すため、関数として考えることもできる。
797 差し当たりBool型における関数の型を $ \lambda x . t : \rightarrow $ と定義する。 799 差し当たりBool型における関数の型を $ \lambda x . t : \rightarrow $ と定義する。
798 この定義においては $ \lambda x . true $ についても $\lambda x . \lambda y . y $ のような型も同一の型を持つ。 800 この定義においては $ \lambda x . true $ についても $\lambda x . \lambda y . y $ のような型も同一の型を持つ。
863 865
864 最後に関数適用の型付け規則を定義する。 866 最後に関数適用の型付け規則を定義する。
865 867
866 \begin{align*} 868 \begin{align*}
867 \AxiomC{$ \Gamma \vdash t_1 : T_{11} \rightarrow T_{12}$} 869 \AxiomC{$ \Gamma \vdash t_1 : T_{11} \rightarrow T_{12}$}
868 AxiomC{$ \Gamma \vdash t_2 : T_{11}$} 870 \AxiomC{$ \Gamma \vdash t_2 : T_{11}$}
869 \BinaryInfC{$ \Gamma \vdash t_1 \; t_2 : T_{12}$} 871 \BinaryInfC{$ \Gamma \vdash t_1 \; t_2 : T_{12}$}
870 \DisplayProof && \text{T-APP} 872 \DisplayProof && \text{T-APP}
871 \end{align*} 873 \end{align*}
872 874
873 もし $t_1$ が$ T_{11}$の引数を $ T_{12}$の計算結果に移す関数へ評価され、$ t_2$が型$T_{11}$の計算結果にに評価されるのであれば、$t_1$ を $ t_2$に適用した計算結果は $ T_{12}$の型を持つ。 875 もし $t_1$ が$ T_{11}$の引数を $ T_{12}$の計算結果に移す関数へ評価され、$ t_2$が型$T_{11}$の計算結果にに評価されるのであれば、$t_1$ を $ t_2$に適用した計算結果は $ T_{12}$の型を持つ。
874 ブール定数と条件式の型付け規則は型付き算術式と時と同様である。 876 ブール定数と条件式の型付け規則は型付き算術式と時と同様である。
875 877
876 最終的な型付きラムダ計算の規則を示す。 878 最終的な純粋単純型付きラムダ計算の規則を示す。
877 879 純粋とは基本型を持たないという意味であり、純粋単純型付きラムダ計算にはブールのような型を持たない。
878 \begin{definition} 880 この純粋単純型付きラムダ計算でブール値を扱う場合は型環境$\Gamma$を考慮してブール値の規則を追加すれば良い。
879 $ \rightarrow $ (型付き)の項 881
882 \begin{definition}
883 $ \rightarrow $ (型付き)の構文
880 884
881 \begin{align*} 885 \begin{align*}
882 t ::= && \text{項} \\ 886 t ::= && \text{項} \\
883 x && \text{変数} \\ 887 x && \text{変数} \\
884 \lambda x : T . t && \text{ラムダ抽象} \\ 888 \lambda x : T . t && \text{ラムダ抽象} \\
885 t \; t && \text{関数適用} \\ 889 t \; t && \text{関数適用} \\
886 \end{align*} 890 \end{align*}
887 \end{definition} 891
892 \begin{align*}
893 v ::= && \text{項} \\
894 \lambda x : T . t && \text{ラムダ抽象値} \\
895 \end{align*}
896
897 \begin{align*}
898 T ::= && \text{型} \\
899 T \rightarrow T && \text{関数型} \\
900 \end{align*}
901
902 \begin{align*}
903 \Gamma ::= && \text{文脈} \\
904 \emptyset && \text{空の文脈} \\
905 \Gamma , x : T && \text{項変数の束縛} \\
906 \end{align*}
907 \end{definition}
908
909 \begin{definition}
910 $ \rightarrow $ (型付き)の評価($ t \rightarrow t'$)
911
912 \begin{align*}
913 \AxiomC{$t_1 \rightarrow t_1'$}
914 \UnaryInfC{$t_1 \; t_2 \rightarrow t_1' \; t_2$}
915 \DisplayProof && \text{E-APP1} \\
916 \AxiomC{$t_2 \rightarrow t_2'$}
917 \UnaryInfC{$v_1 \; t_2 \rightarrow v_1 \; t_2'$}
918 \DisplayProof && \text{E-APP2} \\
919 (\lambda x : T_{11} . t_{12}) v_2 \rightarrow [ x \mapsto v_2] t_{12} &&
920 \text{E-APPABS}
921 \end{align*}
922 \end{definition}
923
924 \begin{definition}
925 $ \rightarrow $ (型付き)の型付け($\Gamma \vdash t : T $)
926
927 \begin{align*}
928 \AxiomC{$ x : T \in \Gamma$}
929 \UnaryInfC{$\Gamma \vdash x : T $}
930 \DisplayProof && \text{T-VAR} \\
931 \AxiomC{$\Gamma , x : T_1 \vdash t_2 : T_2$}
932 \UnaryInfC{$\Gamma \vdash \lambda x : T_1 . t_2 : T_1 \rightarrow T_2$}
933 \DisplayProof && \text{E-ABS} \\
934 \AxiomC{$ \Gamma \vdash t_1 : T_{11} \rightarrow T_{12}$}
935 \AxiomC{$ \Gamma \vdash t_2 : T_{11}$}
936 \BinaryInfC{$\Gamma \vdash t_1 \; t_2 : t_{12}$}
937 \DisplayProof && \text{T-APP}
938 \end{align*}
939 \end{definition}
940
941 単純型付きラムダ計算の型付け規則のインスタンスも型付き算術式のように導出木をすることで示せる。
942 例えば $ (\lambda x : Bool\; x) \; true $ が空の文脈において $ Bool$を持つことは以下の木で表せる。
943
944 \begin{prooftree}
945 \AxiomC{$ x : Bool \in x : Bool$}
946 \RightLabel{T-VAR}
947 \UnaryInfC{$x : Bool \vdash x : Bool$}
948 \RightLabel{T-ABS}
949 \UnaryInfC{$\vdash \lambda x : Bool . x : Bool \rightarrow Bool$}
950 \AxiomC{}
951 \RightLabel{T-TRUE}
952 \UnaryInfC{$\vdash true : Bool$}
953 \RightLabel{T-APP}
954 \BinaryInfC{$\vdash (\lambda x : Bool . x) \; true : Bool $}
955 \end{prooftree}
956
957 純粋型付きラムダ計算の型システムにおいて、閉じた項に対して進行定理と保存定理は成り立つ\ref{Pierce:2002:TPL:509043}\ref{pierce2013型システム入門プログラミング言語と型の理論}。 % FIXME: 進行定理と保存定理の証明。
958 閉じた項、という制限が付いているのは $ f \; true $ といった自由変数が存在する項は正規形ではあるが値でないからである。
959 しかし、開いた項に関しては評価が行なえないために型システムの検査対象に含まれない。
960
961 % }}}
888 962
889 \section{部分型付け} 963 \section{部分型付け}
890 \section{部分型と Continuation based C} 964 \section{部分型と Continuation based C}