Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実務に役立つかもしれない数理論理学 / introduction to Mathematica...
Search
empitsu
May 13, 2021
Science
0
5.8k
実務に役立つかもしれない数理論理学 / introduction to Mathematical logic
Webエンジニアの部門の社内勉強会で発表した数理論理学入門の資料です。
empitsu
May 13, 2021
Tweet
Share
More Decks by empitsu
See All by empitsu
Devin&Cursor、それぞれの「本質」から導く最適ユースケース戦略
empitsu
9
4.4k
同時多発的に価値創出していく Ubie Discoveryのフロントエンド開発 / 20211127 JSConf JP Ubie Discovery
empitsu
2
5.3k
Other Decks in Science
See All in Science
MCMCのR-hatは分散分析である
moricup
0
430
ランサムウェア対策にも考慮したVMware、Hyper-V、Azure、AWS間のリアルタイムレプリケーション「Zerto」を徹底解説
climbteam
0
100
動的トリートメント・レジームを推定するDynTxRegimeパッケージ
saltcooky12
0
180
データマイニング - グラフ構造の諸指標
trycycle
PRO
0
160
ウェブ・ソーシャルメディア論文読み会 第25回: Differences in misinformation sharing can lead to politically asymmetric sanctions (Nature, 2024)
hkefka385
0
130
傾向スコアによる効果検証 / Propensity Score Analysis and Causal Effect Estimation
ikuma_w
0
120
機械学習 - ニューラルネットワーク入門
trycycle
PRO
0
840
データマイニング - ウェブとグラフ
trycycle
PRO
0
160
KH Coderチュートリアル(スライド版)
koichih
1
45k
局所保存性・相似変換対称性を満たす機械学習モデルによる数値流体力学
yellowshippo
1
310
データベース14: B+木 & ハッシュ索引
trycycle
PRO
0
430
地質研究者が苦労しながら運用する情報公開システムの実例
naito2000
0
250
Featured
See All Featured
Site-Speed That Sticks
csswizardry
10
800
How to Ace a Technical Interview
jacobian
279
23k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Thoughts on Productivity
jonyablonski
69
4.8k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Become a Pro
speakerdeck
PRO
29
5.5k
Building an army of robots
kneath
306
46k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
A Tale of Four Properties
chriscoyier
160
23k
Transcript
実務に役立つかもしれない数理論理学
自己紹介 Webフロントエンドチームのempitsuです。 React/TypeScript書いたりしています。 2020年1月からアメリカの通信制大学に入ってコンピューターサイエンスを学び直し中で す。
今日のテーマ 今日のテーマはWebフロントエンドには1ミリも関係なく、数学の話です。 めちゃくちゃ数学には苦手意識があったので最近数学を学び直し中です。 (高校数学/離散数学/線形代数あたり) ちゃんとComputer Scienceや数学を学んでる方も多いと思うのでボコボコにされにきました 超基礎的な内容ばかりですが、間違いや正確さに書ける表現は優しくフィードバックいただ けたら嬉しいです。
数理論理学 - Mathematical logic とは いつも我々が使っている Boolean というデータ型。 これは論理推論を代数で展開する「ブール代数」を考案したジョージ・ブール(1815- 1864)に由来する
(Wikipedia, 2021a)。
数理論理学は離散数学の一分野だが、数学の基礎知識。(伊藤, 2019, p41) 科学的思考の基礎となる重要な概念。(伊藤, 2019, p.41) 高校数学では数学Ⅰ「集合と命題」というトピックで触れる。
離散数学とは 「離散」とは「連続」の反対。「とびとび」になっているものを対象とした数学。 対照的なのが微積分などの解析学で、それらは連続な対象を扱う。(伊藤, 2019, p1) 計算機は0と1の2つの信号を扱うことから、離散数学の守備範囲。離散数学なしに計算 機は動かない。(伊藤, 2019, p.1) 普段プログラミングしている私達は論理で飯を食っていると言っても過言ではない(過言)
Vocabulary
真理値 - truth value, logical value 真 - trueまたは1 偽
- falseまたは0
論理変数 - Logical variable 真理値を取る変数。 PとかQとかRが使われることが多いが、なんでもよい。
ステートメント - Statement 真または偽を表す平叙文 Declarative sentence (Levin, 2019, chapter 0.2)。
平叙文とは、疑問文・感嘆文・命令文とは違って普通に終わる文。 ステートメントは命題論理式 Propositional logical expression とか単に命題 Proposition とも言う場合もある (Levin, 2019, chapter 3.1; 伊藤,2019, p.43 )。
Atomic statement Statementのうち、これ以上分割できない文を Atomic statement という (Levin, 2019, chapter 0.2)。
地球は四角い。(偽) 3 + 7 = 10 (真) 5 > 6(偽)
Molecular statement Atomic statementに分割できるものは Molecular statement (Levin, 2019, chapter 0.2)。
背中をトントンすれば、娘は寝る(真) P:「背中をトントンする」(真) Q:「娘は寝る」(真) 論理演算子を使って P→Q と書ける [JavaScript] 4 > 3 && false (偽) P: 4 > 3 (真) Q: false 論理演算子を使って P ∧ Q と書ける
論理演算子 - Logical operator, Logical connectives 論理演算子を使用してMolecular statementを作成することができる。 ¬ not
否定 - Negation JavaScriptだと !
∧ and 論理積 - conjunction JavaScriptだと && ∨ or 論理和
- disjunction JavaScriptだと ||
⇒ または → if ... then ... 包含 - implication,
conditional ⇔ if and only if ... 双条件 - biconditional (Levin, 2019, chapter 0.2; Wikipedia, 2021b) 徐々にプログラミングとのつながりが見えてきましたね
論理演算子の優先順 優先度が高い順に ¬ ∧ ∨ ⇒ ⇔ (Stanford University, n.d.)
JavaScriptも同じですね。 以下の順で演算子が適用されます。 否定 ! 論理積 && 論理和 || (Mozilla and
individual contributors, 2021)
なので、 x > 5 || y === 3 を先に評価させるつもりで以下のような条件式を書いたら意図 と違った結果になってしまいます。
if(x > 5 || y === 3 && isChecked) より優先度の高い演算子 () を使って上書きしましょう。 if((x > 5 || y === 3) && isChecked)
真理値表 - Truth tableとは P Q P∨ Q P∧ Q
¬P P⇒Q ¬P∧ Q P⇔Q 0 0 0 0 1 1 0 1 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1
こういう表を真理値表といいます。 基本情報技術者試験でも出てきたような気がします。 複雑な条件式を読んだり書いたりするときに、真理値表を書くと整理しやすいかもしれませ ん。 まあconsoleで実際にコードを書いて出力してみるのが一番早いんですけど… ちなみに世の中にはTruth table generatorという便利なツールがあります。 https://web.stanford.edu/class/cs103/tools/truth-table-tool/
論理学のちょっとおもしろい話 P→Q がPが真、Qが偽のときだけ結果が偽になり、あとはすべて真になるのにお気づきでしょ うか。 Pが偽でも常に結果が真になります。 P Q P⇒Q 0 0
1 0 1 1 1 0 0 1 1 1
さきほどのこちら。 背中をトントンすれば、娘は寝る(真) P:「背中をトントンする」(真) Q:「娘は寝る」(真) 論理演算子を使って P→Q と書ける
Pを 「背中をトントンしない」(偽) としてみたらどうでしょう。 この場合でも、「背中をトントンしないが娘は寝る」というステートメントは 「真」 になり ます。 なぜなら、さきほどの「背中をトントンすれば、娘は寝る」はPが真(背中をトントンする) の場合のことしか決めていないためです。 Pが偽の(背中をトントンしない)場合どうなるかは何も決めていないので、結果はどうあれ
ステートメントには反してないのです (伊藤, 2019, p. 44)。
つまり、以下の奇妙なステートメントは 論理学的には真になります 。 前半のifの部分(P)が偽になるのでQに何が書いてあるかは関係がありません。 以下のP→Q の真理値は真です。 地球は平坦なので、海は凍らない(真) P: 地球は平坦である(偽) Q:
海は凍らない(偽) P → Q (真) 8が素数ならば、円周率の7624番目は8になる(真) P: 8が素数(偽) Q: 円周率の7624番目は8(??調べるのが面倒) P → Q (真) 「円周率の7624番目は8」が真であろうと偽であろうとP→Qは真
論理式はベン図でも表現できます Pがtrue (Wikipedia, 2021b)
Qがtrue (Wikipedia, 2021b)
¬Q (Wikipedia, 2021b)
¬P (Wikipedia, 2021b)
P ∧ Q (conjunction) (Wikipedia, 2021b)
P∨ Q (disjunction) (Wikipedia, 2021b)
P→Q (implication) (Wikipedia, 2021b)
P⇔Q (biconditional) (Wikipedia, 2021b) わけがわからなくなったらベン図を書けば、シンプルな条件文に書き換えられるかもしれな いですね。
ドモルガンの法則 ¬(P∨Q)=(¬P)∧(¬Q) ¬(P∧Q)=(¬P)∨(¬Q) (伊藤, 2019, p. 45) これも基本情報技術者試験や高校の数学1で出てきた気がしますね。 真理値表やベン図を書けば、両辺が一致することは簡単にわかります。
¬(P ∨ Q) = (¬P) ∧ (¬Q) if(x !== 5
&& !y ) ↓ if(!(x === 5 || y))
¬(P∧Q) = (¬P) ∧ (¬Q) if(x !== 5 || !y
) ↓ if(!(x === 5 && y)) これを覚えておけば、複雑で分かりづらい条件式も少しリファクタできるかもしれません。
命題論理式における様々な性質 他にも様々な性質があります
排中律(excluded-middle law) P V ¬P = 1 P ∧ ¬P
= 0 冪等律 (idempotence law) P ∨ P = P P ∧ P = P
交換律(commutative law) P ∨ Q = Q ∨ P P
∧ Q = Q ∧ P P ∨ Q = Q ∨ P P ∧ Q = Q ∧ P 結合律(associative law) P ∨ (Q ∨ R) = (P ∨ Q) ∨ R P ∧ (Q ∧ R) = (P ∧ Q) ∧ R P ∨ (Q ∨ R) = (P ∨ Q) ∨ R P ∧ (Q ∧ R) = (P ∧ Q) ∧ R (伊藤, 2019, p. 45) ここらへんまでは「そりゃそうですね」って感じですね
分配律(distributive law) P ∨ (Q ∧ R) = (P ∨
Q)∧ (P ∨ R) P ∧ (Q ∨ R) = (P ∧ Q)∨ (P ∧ R) P ∨ (Q ∧ R) = (P ∨ Q)∧(P ∨ R) P ∧ (Q ∨ R) = (P ∧ Q)∨(P ∧ R) 吸収律(absorption law) P ∨ (P ∧ Q) = P P ∧ (P ∨ Q) = P P ∨ (P ∧ Q) = P P ∧ (P ∨ Q) = P (伊藤, 2019, p. 45) この分配律と吸収律は覚えておくと役立つかもしれません。
まとめ 0と1を扱う論理学は離散数学の基礎 論理は科学的思考の基礎となる重要な概念。 計算機も0と1の2つの信号を扱うことから、離散数学の守備範囲。 ステートメントは真または偽を表わす文。 論理演算子を使用してmolecular ステートメントを作成できる。 真理値表やベン図で論理演算の結果を整理できる ド・モルガンの定理など論理式の様々な性質を知っていたら業務でも役立つかもしれな い
参考文献 Levin, O. (2019). Discrete mathematics: An open introduction (3
edition). CreateSpace Independent Publishing Platform. http://discrete.openmathbooks.org/dmoi3.html Mozilla and individual contributors. (2021). 式と演算子. MDN Web Docs. https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Expressions_and_Operat ors Stanford University. (n.d.). Stanford Introduction to Logic. http://intrologic.stanford.edu/glossary/operator_precedence.html 伊藤大雄 (2019) イラストで学ぶ離散数学 講談社 ジョージ・ブール (2021a, May 24) In Wikipedia. https://ja.wikipedia.org/wiki/ジョー ジ・ブール 論理演算 (2021b, Mar 18) In Wikipedia. https://ja.wikipedia.org/wiki/論理演算