SlideShare a Scribd company logo
1 of 85
Download to read offline
Agda による定式化された型推論
器の拡張と改良
お茶の水女子大学 門脇香子 浅井健一
2016. 3. 8
1はじめに
•研究概要
•研究背景
•本研究の貢献
•発表の流れ
研究概要
•Agda を用いて、定式化された型推論器に generic
programming や不等式制約などのテクニックを用
いて、実装を簡明にし、構文の拡張を簡単にした
•generic programming
•不等式制約
Agda について
•依存型を用いることのできる、定理証明支援システ
ムおよびプログラミング言語
•Haskell などに文法が似ている
依存型(Dependent Types)
•値に依存する型をつくることができる型
•例: Vec n 型 (n は int 型の値)

長さが n のベクトルを(型のレベルで)表現している
•例えば、OCamlのリストでは長さが型レベルでは指
定できない(length関数などで取り出すことが必要)
定式化
入力(型無し言語) 出力(型付き言語)
型推論
n = 1

let f x = match x with 

0 -> “zero”

| _ -> “not zero”
n : int

n = 1

f : int -> string

f x = match x with …
型
定式化
入力(型無し言語) 出力(型付き言語)
型推論
n : int

f : int -> string
型
定式化
入力(型無し言語) 出力(型付き言語)
型推論
n : int

f : int -> string
検証機構
チェック①
定式化
入力(型無し言語) 出力(型付き言語)
型推論
型を消去
型無し言語
同じであることを保証する❷
研究背景
•型推論をするには unification の機構が必要だが、
普通に実装すると変数の書き換えなどが必要で、
Agdaではできない
•そこで McBride は型変数の数を巧妙に管理する形
でunificationの機構を pure functional に実現した
•これにより、Agdaで型推論器をつくる土台が出来
た
本研究の貢献
•McBride が示した unification の機構 [McBride, 2003] を拡張し、単
一化できている証明も返す形で定式化した(PPL2015)
•この unification の機構をもとにして、 Agda で定式化された型推論器
を実装した(PPL2015)
•この型推論器に不等式制約を導入することで型変数を指定するの
みの実装より簡単に実装する方法を示し、それを型規則の形で定
式化した
•unification の機構をgeneric programmingにより任意の型に
拡張し、 型の拡張を簡単にした
•型推論の結果、得られた型付き項から型を取り除くと元の項が得
られることも証明した
•型推論の拡張の例として、組を導入した 

今日のコンテンツ
1.はじめに
2.unification
3.型定義
4.generic programming と不等式制約
5.型推論
6.まとめ
2unification
•McBrideによる手法
•unificationの定式化
McBride による unification の機構
McBrideは、型変数を有限集合で表現する手法で停止性が明
らかな unificationを実現した

型 τ
a0
a1
..
..
a(m - 1)
型変数の集合(最大で m 個)
有限集合
(finite set)
(m)
McBride による unification の機構
型 τ
a0
int
..
..
a(m - 1)
(m)
型変数は代入により具体化(具体的な型になる)可能性がある
型 t1 : a0 → (a2 → a1)
a0
a1
a2
型 t2 : a0 → (a2 → int)
a0
int
a2
型 t1 : a0 → (a2 → a1)
a0
a1
a2
型 t2 : a0 → (a2 → int)
a0
int
a2
unification
a1 = int
a0
int
a2
型 t1 : a0 → (a2 → a1)
a0
a1
a2
型 t2 : a0 → (a2 → int)
a0
int
a2
unification
a1 = int
a0
int
a2
❌
具体化された型を集合から削除
型 t1 : a0 → (a2 → a1)
a0
a1
a2
型 t2 : a0 → (a2 → int)
a0
int
a2
unification
a1 = int
a0
a1
a0 → (a1 → int)
型変数の数が確かに減っている
型 t1 : a0 → (a2 → a1)
a0
a1
a2
型 t2 : a0 → (a2 → int)
a0
int
a2
unification
a1 = int
a0
a1
a0 → (a1 → int)
型変数の数が確かに減っている
型変数が具体化されるたびに、具体化されていない型変数の数
がひとつ減る
型 t1 : a0 → (a2 → a1)
a0
a1
a2
型 t2 : a0 → (a2 → int)
a0
int
a2
unification
a1 = int
a0
a1
a0 → (a1 → int)
型変数の数が確かに減っている
型変数が具体化されるたびに、具体化されていない型変数の数
がひとつ減る
停止性が明らか
unificationの定式化
•先ほど示した手法で、unificationをAgda上で実装できた
•型推論器を定式化するには 確かにunifyされている 証明
を返すことも必要

 式にすると subst σ t1 == subst σ t2

「代入した後の型が確かに同一」
•unification の関数を拡張して、この証明を返すようにし
た(PPL2015)

3型定義
•型、型判断、項
•本研究における特殊な表現

型定義
項
型定義
項
m 番目の型変数 関数型
型定義
項
変数 ラムダ抽象 関数適用
型判断
推論規則
型判断
推論規則
「型環境 Γ のもとで、項 M の型は τ になる」
型判断
推論規則
型推論の特殊な表現
型を計算して出力するための規則
型推論の特殊な表現
入力
出力
型推論の特殊な表現
① 項 M と
型変数を最大で m 個もつ型環境 Γが入力される
型推論の特殊な表現
②新しい型変数が型推論中に m - m 個割り当てられる
型推論の特殊な表現
③型変数の数をm 個まで減らす代入が得られる
型推論の特殊な表現
⑤型変数の数が m まで減った型 τ が返ってくる
unification の特殊な表現
型 τ1 と τ2 を同じにする(unifyする)代入σを得る
unification の特殊な表現
入力
出力
unification の特殊な表現
型変数を最大で m 個持つ型 τ1 と τ2 は

型変数を m 個から m 個まで減らす代入 σによって
unification (単一化)される
4generic programmingと

不等式制約
•generic programming
•不等式制約
generic programming
•普通は型をコンストラクタで定義する
•この場合、型を操作する関数において、型を再実装するた
びにパターンマッチを再実装する必要がある
•型を generic に生成することで、パターンマッチの再実装
を避け、ユーザが指定した任意の型を再実装なく推論でき
るようになる
•本研究では、 Regular[Noortら, 2008]を元にgenericな
型を実装した
generic programming
組の構文(Cons, Fst, Snd)を増やしたいとき、

直積型を追加する必要が有る
generic programming
このように型を増やしても、

unification や型に関する補題の実装を変更する必要がない
generic programming
構文を増やすとき、

構文そのものの型推論に集中できる
generic programming
型をBNFのような形で表現する
generic programming
型をBNFのような形で表現する
generic programming
型をBNFのような形で表現する
generic programming
型をBNFのような形で表現する
generic programming
型をBNFのような形で表現する
generic programming
型をBNFのような形で表現する
これで、型の表現ができた
generic programming
具体的な型の表現
generic programming
表現の意味を与えている
generic programming
自分自身を与えることで再帰する
generic programming
再帰を閉じるための型
generic programming
再帰を閉じるための型
generic programming
再帰を閉じるための型
generic programming
任意に大きい型を表現できる
不等式制約
型推論を実装する際、以前は m を厳密に型に組み
込んでいた
不等式制約
たとえば Lam s を型推論するとき
m : Nat
m = count s + 1
Γ : Cxt m
Γ = …
不等式制約
たとえば Lam s を型推論するとき
m : int
m = count s + 1
Γ : Cxt m
Γ = …
型の値レベルで型を合わせて証明しないといけなくなる
不等式制約
m は m ≤ m ' を満たしていればよく、具体的な数
は以後持ち歩く必要がない
代わりに m ≤ m という証明を持ち歩く
5型推論
•関数定義
•型推論の例 - 関数適用 -
関数定義
入力

s : m 個の型変数をもつ well-scoped term 

Γ : 型環境
出力
m , m : 自然数
m≤m :m≤m であることの証明
σ : m 個の型変数を持つ型を m 個の型変数を持つ型にする 代入
τ : 推論結果の型
w : 推論された well-typed term。型変数をm 個もつ
erase w s : 返された well-typed term s から型情報を削除したものが、

もとの well-scoped term と等しいという証明
infer
関数定義
入力

s: m 個の型変数をもつ well-scoped term 

Γ : 型環境
(Maybe)出力
m , m : 自然数
m≤m :m≤m であることの証明
σ : m 個の型変数を持つ型を m 個の型変数を持つ型にする 代入
τ : 推論結果の型
w : 推論された well-typed term。型変数をm 個もつ
erase w s : 返された well-typed term s から型情報を削除したものが、

もとの well-scoped term と等しいという証明
infer
関数定義
入力

s: m 個の型変数をもつ well-scoped term 

Γ : 型環境
(Maybe)出力
m , m : 自然数
m≤m :m≤m であることの証明
σ : m 個の型変数を持つ型を m 個の型変数を持つ型にする 代入
τ : 推論結果の型
w : 推論された well-typed term。型変数をm 個もつ
erase w s : 返された well-typed term s から型情報を削除したものが、

もとの well-scoped term と等しいという証明
infer
nothingが返る= 型エラーである
関数定義
コードではこのようになる(参考)
型推論の例 (App)
App s1 s2 の型推論は
1. s1 を型推論し、σ1 と τ1を得る
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る
3. τ1 == τ2 → β (βは新しい型変数)となるよう unifyし,
成功したら σ3を得る
4. 返される型はβとなる
型推論の例 (App)
App s1 s2 の型推論は
1. s1 を型推論し、σ1 と τ1を得る
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る
3. τ1 == τ2 → β (βは新しい型変数)となるよう unifyし,
成功したら σ3を得る
4. 返される型はβとなる
型推論の例 (App)
App s1 s2 の型推論は
1. s1 を型推論し、σ1 と τ1を得る
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る
3. τ1 == τ2 → β (βは新しい型変数)となるよう unifyし,
成功したら σ3を得る
4. 返される型はβとなる
型推論の例 (App)
App s1 s2 の型推論は
1. s1 を型推論し、σ1 と τ1を得る
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る
3. τ1 == τ2 → β (βは新しい型変数)となるよう unifyし,
成功したら σ3を得る
4. 返される型はβとなる
型推論の例 (App)
1. s1 を型推論し、σ1 と τ1を得る。
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る。
型推論の例 (App)
1. s1 を型推論し、σ1 と τ1を得る。
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る。
型推論の例 (App)
1. s1 を型推論し、σ1 と τ1を得る。
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る。
型推論の例 (App)
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る。
3. τ1 == τ2 → β (βは新しい型変数)となるよう unifyし,
型推論の例 (App)
2. Γにσ1 を施した上でs2を型推論し、σ2とτ2を得る。
3. τ1 == τ2 → β    となるよう unifyし,
m2 番目の型変数を新しく取り出す
型推論の例 (App)
3. τ1 == τ2 → β    となるよう unifyし,
成功したら σ3を得る
型推論の例 (App)
3. τ1 == τ2 → β    となるよう unifyし,
成功したら σ3を得る
型推論の例 (App)
4.Appの型規則を適用する。
4.Appの型規則を適用する。
型推論の例 (App)
4.Appの型規則を適用する。
必要な代入
型推論の例 (App)
4.Appの型規則を適用する。
なる代入σを返したい
型推論の例 (App)
4.Appの型規則を適用する。
なる代入σを返したい
型推論の例 (App)
型推論の例 (App)
他の構文(Fst, Sndなど)に関しても同様に証明できる
まとめ
•型変数を数ではなく不等式を用いて表現する方式に
改良し、また型定義を generic programming の考
え方を取り入れてより一般的に改良することで、型
推論器における syntax の拡張と証明の簡略化を実
現した
•ソースコード : github.com/kdxu/inferagda 

(Agda 合計1913行)
今後の課題
•構文の拡張(多相のLet文など)

PolyP [Janssonら, 1997] や Indexed Functors [Löhら,
2011] など型パラメタを扱えるものを使う必要がある
•完全性の証明
型がつかない場合 :

More Related Content

What's hot

C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!Akihiro Nishimura
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたKazuyuki TAKASE
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Takashi Hoshino
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_finalCryolite
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208atmiya
 
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswiftProtocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswiftTomohiro Kumagai
 
D言語会議#1
D言語会議#1D言語会議#1
D言語会議#19rnsr
 
TaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionTaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionAkihiro Miyashita
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング道化師 堂華
 
Sized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルSized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルAkinori Abe
 

What's hot (20)

TaPL9
TaPL9TaPL9
TaPL9
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみた
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_final
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208a
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswiftProtocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
 
D言語会議#1
D言語会議#1D言語会議#1
D言語会議#1
 
TaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionTaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 Exception
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
Sized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルSized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアル
 

Viewers also liked

証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門Kyoko Kadowaki
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2Kyoko Kadowaki
 
Ta plスライド第4章
Ta plスライド第4章Ta plスライド第4章
Ta plスライド第4章Kyoko Kadowaki
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門k h
 
Agda 入門@ProofSummit 2011
Agda 入門@ProofSummit 2011Agda 入門@ProofSummit 2011
Agda 入門@ProofSummit 2011ikegami__
 
ネット検索をしなくなる時代
ネット検索をしなくなる時代ネット検索をしなくなる時代
ネット検索をしなくなる時代Masakazu Mito
 
よくわかるCoqプログラミング
よくわかるCoqプログラミングよくわかるCoqプログラミング
よくわかるCoqプログラミングReal_analysis
 
Intoduction to Homotopy Type Therory
Intoduction to Homotopy Type TheroryIntoduction to Homotopy Type Therory
Intoduction to Homotopy Type TheroryJack Fox
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへYusuke Matsushita
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界maruyama097
 
エニグマ暗号とは何だったのか
エニグマ暗号とは何だったのかエニグマ暗号とは何だったのか
エニグマ暗号とは何だったのかTakahiro (Poly) Horikawa
 

Viewers also liked (14)

証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2
 
Ta plスライド第4章
Ta plスライド第4章Ta plスライド第4章
Ta plスライド第4章
 
Hott_1
Hott_1Hott_1
Hott_1
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門
 
Agda 入門@ProofSummit 2011
Agda 入門@ProofSummit 2011Agda 入門@ProofSummit 2011
Agda 入門@ProofSummit 2011
 
Earth Day 2014
Earth Day 2014Earth Day 2014
Earth Day 2014
 
SIAMSEAS2015
SIAMSEAS2015SIAMSEAS2015
SIAMSEAS2015
 
ネット検索をしなくなる時代
ネット検索をしなくなる時代ネット検索をしなくなる時代
ネット検索をしなくなる時代
 
よくわかるCoqプログラミング
よくわかるCoqプログラミングよくわかるCoqプログラミング
よくわかるCoqプログラミング
 
Intoduction to Homotopy Type Therory
Intoduction to Homotopy Type TheroryIntoduction to Homotopy Type Therory
Intoduction to Homotopy Type Therory
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
 
エニグマ暗号とは何だったのか
エニグマ暗号とは何だったのかエニグマ暗号とは何だったのか
エニグマ暗号とは何だったのか
 

Similar to PPL2016-9-3

How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】Tomoharu ASAMI
 
静的型付け言語 Crystal
静的型付け言語 Crystal静的型付け言語 Crystal
静的型付け言語 Crystal5t111111
 
Python勉強会2-数値と文字列
Python勉強会2-数値と文字列Python勉強会2-数値と文字列
Python勉強会2-数値と文字列理 小林
 
Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710Kazuya Nishina
 
Mplusの使い方 中級編
Mplusの使い方 中級編Mplusの使い方 中級編
Mplusの使い方 中級編Hiroshi Shimizu
 
PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)
PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)
PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)Toshiyuki Shimono
 

Similar to PPL2016-9-3 (9)

How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
静的型付け言語 Crystal
静的型付け言語 Crystal静的型付け言語 Crystal
静的型付け言語 Crystal
 
Python勉強会2-数値と文字列
Python勉強会2-数値と文字列Python勉強会2-数値と文字列
Python勉強会2-数値と文字列
 
Model seminar shibata_100710
Model seminar shibata_100710Model seminar shibata_100710
Model seminar shibata_100710
 
EMNLP 2011 reading
EMNLP 2011 readingEMNLP 2011 reading
EMNLP 2011 reading
 
ma92008id394
ma92008id394ma92008id394
ma92008id394
 
Mplusの使い方 中級編
Mplusの使い方 中級編Mplusの使い方 中級編
Mplusの使い方 中級編
 
PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)
PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)
PRML 10.3, 10.4 (Pattern Recognition and Machine Learning)
 

PPL2016-9-3