Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プラレールで作る論理回路

 プラレールで作る論理回路

プログラマのための数学LT会 2! での発表です.
ライセンスは CC BY-SA 2.0とします.

関連記事: https://cybozushiki.cybozu.co.jp/articles/m001205.html

03a3fc5381358c8b29b0a89f49b1e317?s=128

Akama Hitoshi

July 19, 2017
Tweet

Transcript

  1. プラレールで作る 論理回路 プログラマのための数学LT会 2! 東京工業大学 情報理工学院 数理・計算科学系 赤間 仁志 @lin_calc

  2. 自己紹介スライド • 赤間 仁志 ◦ 東京工業大学 情報理工学院 数理・計算科学系 • セキュリティ・キャンプ全国大会

    2014 卒業生 ◦ セキュアなシステムを作ろうクラス OSECPU-VMゼミ • 明日親知らずを抜きます
  3. 概要 プラレールで 論理計算

  4. fig. 某社オフィスに構築された半加算器 (1bitの加算回路)

  5. 背景

  6. プラレール • タカラトミーが販売する鉄道模型のおもちゃ • 対象年齢は3歳以上 • いろいろなレールがある ◦ …...ので,意図せずに計算が可能となった

  7. 先行研究 • むにむに教授 ,プラレールとレゴで論理演算。 (2014) ◦ https://www.youtube.com/watch?v=SqwVAE_RMTk

  8. 問題提起 • 先行研究では,レゴの助力を得てプラレールで計算をする • 純粋なプラレールでどこまで計算ができるか? 結論:任意の論理関数を表現できる(予想)

  9. プラレール論理計算の原理

  10. • 分岐レールにはポイントがある ◦ ポイントの向きで分岐 • 向きでゼロとイチを表現できる • 入出力,および変数として使用 ◦ 読み書き可能

    真偽値の表現 (ターンアウトレール)
  11. 真偽値の読み出し = 分岐

  12. 真偽値の書き込み = ポイントを蹴る

  13. 計算の流れ 1. 論理関数を表現するレイアウトを組む 2. 入力に相当するポイントを人間が切り替える 3. スタート位置から電車を走らせる 4. 電車の動きで,出力に相当するポイントが切り替わる

  14. 例:ORゲート X = A or B input output

  15. 例:ANDゲート X = A and B

  16. 例:XOR

  17. なぜXORだけ複雑になるのか? • そもそもXORってどんな演算だろうか • XORの ”気持ち” を解析しよう ということで, • 論理関数を別の形で表して考える

    • Binary decision diagramを導入
  18. Binary decision diagram (BDD) • 論理関数 ( {0, 1}^n →

    {0, 1} ) を表すデータ構造 • 応用範囲がとても広い ◦ 論理回路合成 ◦ 充足可能性問題 (SAT) ◦ シンボリックモデル検査 など • 偶然にもプラレールに応用できた • 変数の順序を定めると構造は一意 0 1 z x y
  19. 0 1 z x y 1. いちばん上からスタート 2. その変数が0なら破線を, 1なら実線をたどってゆく

    3. 終端が関数の値 BDDの意味 f(x, y, z) = x and (y or z)
  20. • x = 1, y = 0, z = 1

    を代入 1. x = 1なので実線をたどる 2. y = 0なので破線をたどる 3. z = 1なので実線をたどる 4. 終端ノード1にたどり着く 計算の例 0 1 z x y f(x, y, z) = x and (y or z)
  21. Binary Decision Diagram (BDD) の特徴 • 2つのBDD (A, B) 同士の論理演算(and,

    orなど)が効率的 ◦ ノードの数を各々 |A|, |B|とすると O(|A| |B|) 時間 • ある論理関数に対して,もっともノード数の少ないBDDが一意に存在 ◦ ただし変数の順序は固定されているとする ◦ BDDをもっともノードが小さくなるよう簡約する操作は O(|A| log |A|) ◦ 2つのBDDが同じ論理関数を表すか比較することも簡単 • 他にもたくさんいいところがある
  22. BDDとプラレールの対応 x x 0 1 0 1 ≒

  23. 0 1 z x y 0 1 ≒ _人人人人人人人_ > 完全に一致 <

     ̄Y^Y^Y^Y^Y^Y ̄ x y z
  24. AND OR XOR 0 1 A B 0 1 A

    B 0 1 A B B Bが2つある!
  25. プラレール回路でXORが素朴に作れない理由 • 入力Bの分岐レールはレイアウト上にひとつしか存在しない • ので,入力Bから異なる分岐先に接続することはできない → 0 → 1 →

    1 → 0
  26. プラレールで素朴に記述できるための条件 • 論理関数 Φ : {0, 1}^n → {0, 1}

    がプラレールで素朴に記述できる if and only if • Φに対応する(既約な)BDDが同じ変数のノードを2つ以上持たない プラレールの性質を,数学的なデータ構造の特徴で表すことができた
  27. 過去の展示

  28. 半加算器 ver. 1.0.0 • OSC 2016/Tokyo Fall ◦ 2016年11月 •

    3.5m * 2.5mほど • 計算は約2分かかる
  29. 半加算器 ver. 2.1.1 • OSC 2017/Tokyo Spring ◦ 2017年3月 •

    -31%の小型化 • 2.5m四方に入る • 計算時間は変わらず
  30. 2進数カウンタ • 自動ターンアウトレールのトグル動作を利用し,2進数カウンタを制作 • Developer Summit 2017にて展示

  31. 参考文献 ・むにむに教授 ,プラレールとレゴで論理演算。 https://www.youtube.com/watch?v=SqwVAE_RMTk ・プラレールで半加算器を設計した話 https://cybozushiki.cybozu.co.jp/articles/m001205.html ・Huth, Michael, and Mark

    Ryan. Logic in Computer Science: Modelling and reasoning about systems. Cambridge university press, 2004. ・画像:いらすとや
  32. まとめと告知 • プラレールは論理計算ができる • Binary decision diagramをプラレールのレイアウトと対応させた ◦ 面白いデータ構造なので興味を持ってもらえると嬉しいです •

    結局,プラレールでXORはどうやって作ったのか? ◦ 続きはWebで! 「プラレール 半加算器」で検索 • 9/9, 10のOSC 2017 Tokyo/Fallで新作を展示します! Follow us on Twitter! @lin_calc