We present a brief introduction to what "type inference" is and how it works, in 5 minutes! This talk will take place in VRCLT #2. Please visit their website https://vrc-lt.github.io/ for more information.
22 / 42 2.1 実際にやってみよう ● 文脈(=変数・関数名とその型の辞書)と 推論規則(=制約を生成するルール)を用意する – 文脈: ● + は int 型 2 つを取って int 型を返す ( +: int → int → int ) – 推論規則: ● 整数リテラル 0,1,2... は int 型 ● 文脈に関数 f: a → b, 値 x: a があるとき 関数適用 f x は b 型 ● etc...
25 / 42 2.1 実際にやってみよう ● コード中の未知の型変数を文脈に追加し,推論規則 を用いて型の等値制約(≒型の等式)を生成する let-function add_two x = + x 2 制約 文脈 + : int → int → int, add_two : a → b, x : c ※ 未知の関数・変数に対して,他と重複 しないように型変数を生成し,文脈に追加する
26 / 42 2.1 実際にやってみよう ● コード中の未知の型変数を文脈に追加し,推論規則 を用いて型の等値制約(≒型の等式)を生成する let-function add_two x = + x 2 制約 a = c 文脈 + : int → int → int, add_two : a → b, x : c
27 / 42 2.1 実際にやってみよう ● コード中の未知の型変数を文脈に追加し,推論規則 を用いて型の等値制約(≒型の等式)を生成する let-function add_two x = + x 2 制約 a = c, c = int 文脈 + : int → int → int, add_two : a → b, x : c
28 / 42 2.1 実際にやってみよう ● コード中の未知の型変数を文脈に追加し,推論規則 を用いて型の等値制約(≒型の等式)を生成する let-function add_two x = + x 2 制約 a = c, c = int, int = int 文脈 + : int → int → int, add_two : a → b, x : c
29 / 42 2.1 実際にやってみよう ● コード中の未知の型変数を文脈に追加し,推論規則 を用いて型の等値制約(≒型の等式)を生成する let-function add_two x = + x 2 制約 a = c, c = int, int = int, b = int 文脈 + : int → int → int, add_two : a → b, x : c
30 / 42 2.1 実際にやってみよう ● 得られた制約列を単一化して,文脈に追加した 型変数を消す(≒型の連立方程式の解を求める) let-function add_two x = + x 2 制約 a = c, c = int, int = int, b = int 文脈 + : int → int → int, add_two : a → b, x : c
31 / 42 2.1 実際にやってみよう ● 得られた制約列を単一化して,文脈に追加した 型変数を消す(≒型の連立方程式の解を求める) let-function add_two x = + x 2 制約 a = int, b = int, c = int 文脈 + : int → int → int, add_two : a → b, x : c
32 / 42 2.1 実際にやってみよう ● 得られた制約列を単一化して,文脈に追加した 型変数を消す(≒型の連立方程式の解を求める) let-function add_two x = + x 2 制約 a = int, b = int, c = int 文脈 + : int → int → int, add_two : a → b, x : c
33 / 42 2.1 実際にやってみよう ● 得られた制約列を単一化して,文脈に追加した 型変数を消す(≒型の連立方程式の解を求める) let-function add_two x = + x 2 制約 文脈 + : int → int → int, add_two : int → int, x : int