SlideShare a Scribd company logo
1 of 150
Download to read offline
型! 型!
#comb_mu
@minamiyama1994
2014/08/10
皆さん
初めての人は初めまして
久しぶりな人は久しぶり
南山まさかずです
東京生まれの
広島育ち
19歳大学生(休学中)
C++
とか
Haskell
とか
Coq
とか
そういうのをやってます
仕事はRubyだけどな!
閑話休題
「型」
ご存じですか?
型
取りうる値の集合
データに対するメタ情報
……
?
例えば
0は整数型
”hoge”は文字列型
http://t.coはURL型
こんなものです
楽しい!
さて
型があると何が嬉しいの?
例えば
「URL」×「実数」
?????
「ファイル」−「文字列」
?????
「あり得ない計算」
これは型で防げる
エラーになるからな!
ところで
動的型付け
静的型付け
こういった概念がある
型でエラーが防げる
いつ防ぐの?
実行時に防ぐ
これが動的型付け
実行する前に防ぐ
これが静的型付け
Rubyとかは動的型付け
C++とかは静的型付け
戦略の違い
動的型付け
致命的なエラー検知が
実行時に行われる
脆弱性になりうる
「適当な状態で
動かしたい」
動かせる
そう、動的型付けならね
※エラーが確実に
弾けるとは言っていない
静的型付け
致命的なエラー検知が
実行前に行われる
安心!
「適当な状態で
動かしたい」
ムズカシー
何事も
良し悪しということで……
総括
型
プログラムの安全性を
担保するもの
動的型付け
実行時に型チェック
静的型付け
コンパイル時に型チェック
おしまいおしまい
ではないです
型に関する概念について
型に関して重要な
概念がいくつかあります
ダックタイピング
動的型付け言語で使われる
???「あのメソッド
ありゃええやん」
インターフェースが
合ってればいいや
割とアバウト
多相型/ジェネリクス
型を限定しない
「具体的な型じゃないけど
処理書いとくね!」
型に関するワイルドカード
個々の型について
いちいち書かなくてもいい
便利!
代数的データ型
代数的?????
例えば
直和型
集合論で言う直和
「型の足し算」
例えば
直積型
集合論でいう直積
「型の掛け算」
集合論での概念
この考え方を
型にも適用したのが
「代数的データ型」
依存型
「値に依存した型」
型の中に値が入り込む
値が違うと型も違う
線形型
「何回使われうるか」
これを型情報に含めたもの
etc,etc…...
型に関する概念は
他にもあります
TAPL読めば
大体なんとかなる説
では、おしまいおしまい
……
終わらせないぜ!
定理証明系の話をしよう
型で証明できる世界
……?
「日本語でおk」
型は命題に対応します
「Aを受け取り
Bを返す関数が実装可能」
「AがあればBを導き出す妥
当な処理がある」
「「A」が成り立てば
「B」が成り立つ」
命題!
「妥当な処理」が証明
「妥当な処理」
つまりプログラムですね
総括
型は命題に対応します
プログラムは
証明に対応します
ある型を持つ
関数が実装できる
ある命題を証明できる
これを利用して
「型で証明する」
のが目的の言語がある
Coq
とか
Agda
とか
Idris
とか
「定理証明系」と
呼ばれます
「型で定理を証明」
かっこ良くないですか?
型を活用すれば
こんなことも出来るよ
そんなお話でした
おしまいおしまい
今度こそね
ご清聴
ありがとうございました
※時間があれば質疑応答

More Related Content

More from 真一 北原

Database.persistentの話
Database.persistentの話Database.persistentの話
Database.persistentの話真一 北原
 
能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発真一 北原
 
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみるtemplateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる真一 北原
 
すごいMonad入門
すごいMonad入門すごいMonad入門
すごいMonad入門真一 北原
 
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみたLt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた真一 北原
 
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果真一 北原
 
型安全Printf作ってみた
型安全Printf作ってみた型安全Printf作ってみた
型安全Printf作ってみた真一 北原
 
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた真一 北原
 
第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料真一 北原
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料真一 北原
 

More from 真一 北原 (12)

Database.persistentの話
Database.persistentの話Database.persistentの話
Database.persistentの話
 
能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発能年玲奈ちゃん駆動開発
能年玲奈ちゃん駆動開発
 
型!
型!型!
型!
 
templateを依存型っぽく使ってみる
templateを依存型っぽく使ってみるtemplateを依存型っぽく使ってみる
templateを依存型っぽく使ってみる
 
すごいMonad入門
すごいMonad入門すごいMonad入門
すごいMonad入門
 
すごいCoq入門
すごいCoq入門すごいCoq入門
すごいCoq入門
 
Lt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみたLt駆動開発03 コンパイル時fizz buzzやってみた
Lt駆動開発03 コンパイル時fizz buzzやってみた
 
Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果Lt駆動開発03 サイト運営してみた結果
Lt駆動開発03 サイト運営してみた結果
 
型安全Printf作ってみた
型安全Printf作ってみた型安全Printf作ってみた
型安全Printf作ってみた
 
能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
 
第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料第2回 mix c++勉強会@tokyo 資料
第2回 mix c++勉強会@tokyo 資料
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

型! 型!