はてなキーワード: 論理和とは
エレメンタリートポスの枠組みを用いることで、情報と存在の関係を数学的にモデル化できる。このモデルでは、存在をトポスの対象として、情報をその間の射や、内部論理における命題として表現する。
- 射の集合:任意の対象 A, B ∈ Ob(𝓔) に対し、射の集合 Hom𝓔(A, B)。
- 合成写像:∘ : Hom𝓔(B, C) × Hom𝓔(A, B) → Hom𝓔(A, C)。
- 恒等射:各対象 A に対し、idA ∈ Hom𝓔(A, A)。
- 合成の結合律:f ∘ (g ∘ h) = (f ∘ g) ∘ h。
- 恒等射の単位性:idB ∘ f = f、f ∘ idA = f。
1. 有限極限の存在:𝓔 は有限極限(特に、積と等化子)を持つ完備な圏である。
2. 指数対象の存在:任意の対象 A, B ∈ 𝓔 に対し、指数対象 BA が存在し、以下の自然同型が成り立つ。
Hom𝓔(C × A, B) ≅ Hom𝓔(C, BA)
3. 部分対象分類子の存在:特別な対象 Ω ∈ 𝓔 と単射 true: 1 → Ω が存在し、任意のモノ射(単射) m: U ↪ A に対し、一意的な射(特性射) χU: A → Ω が存在して以下の可換図式を満たす。
U ↪ A
↓ ↓
1 → Ω
1. 射としての情報:存在間の関係や変換を表す射 f: A → B は、存在 A から存在 B への情報の伝達や変換をモデル化する。
2. 部分対象としての情報:対象 A の部分対象 m: U ↪ A は、存在 A の特定の性質や部分構造(情報)を表す。これはモノ射として表現される。
3. 特性射と命題:部分対象 m: U ↪ A に対応する特性射 χU: A → Ω は、存在 A の要素が部分対象 U に属するかどうかを示す情報を提供する。
トポス 𝓔 の内部では、高階直観主義論理が展開される。ここで、以下の対応が成立する。
- 論理積(AND):P ∧ Q は積対象を用いて、χP∧Q = ⟨χP, χQ⟩ : A → Ω × Ω → Ω。
- 論理和(OR):P ∨ Q は余積(和)を用いて表現される。
- 含意(IMPLIES):P ⇒ Q は指数対象を用いて、χP⇒Q: A → ΩΩ。
- 否定(NOT):¬P は、χ¬P = χP⇒⊥ として表され、⊥ は偽を表す部分対象である。
1. 一致性:開被覆 { fi: Ui → U } に対し、各 F(Ui) の要素が F(Ui ×U Uj) 上で一致するなら、それらは F(U) の要素から誘導される。
2. 貼り合わせ可能性:F(U) の要素は、その制限が各 F(Ui) の要素に一致する。
以上の構造を組み合わせることで、情報と存在の関係を統一的にモデル化できる。
- 射 f: A → B は存在間の情報の伝達や変換を示す。
自分は大学中退のニートだったが、ある日一念発起して小さい会社に就職した。
社員は20人程度だったが、そこでは1.5流の情報系大学中退野郎で何かある前に先回りして自虐してごまかすような、プライドだけは中途半端に高くいクソ雑魚ニートもどきにも優しい会社だった。
小さい会社だからこそ、数学をかじったことがある人がほとんどおらず、論理和、論理積みたいなことをいうだけで驚かれるような会社だった。
そのおかげで運良く高い評価をもらって、またたく間に昇格していった。
また、少人数だからこそ、案件の中心ではなく、案件の周辺のゴミ拾いみたいな仕事が中心だったこともあり、隙間産業ソルジャーとしてのSIerスキルを着々と得ることができた。
最終的には自分の部下になった先輩と小競り合いをして、10年働いた会社を退職した。
自分はもっと上に行ける、と社員200人程度の会社に転職した。
新しい会社では前の会社の最終役職が管理職だったため、管理職ほどではないにせよ、サブリードの立場でオファーにをもらった。
以前の会社では案件をのがしたらそのまま餓死するようなプレッシャーがあったので、仕事を全力で取りに行きつつ人を確保していこう、というやり方が正義だと思っていたのだが、どうも社内政治のようなものに巻き込まれている事に気がついた。
現場の営業との仲は良好だと思っていたが、お互いの上司が自分たちを使って代理戦争をしているような雰囲気を感じるようになった。
仕事じゃない部分に精神をすり減らされる事が多く、辟易していた頃に、自分が所属する部の部長が、パワハラやセクハラを理由に、左遷された。
部長が左遷される頃には、自分もすっかり「この会社でずっとくだらない低次元な社内政治のコマにされるのか」みたいなよくわからない諦念を覚えて、その頃たまたまオファーをもらって転職した。
数年管理職を過ごしたらメーカに転職しよう、外資系に転職した。
それが間違いだった。
これまでの「案件をのがしたらそのまま餓死するようなプレッシャー」を持ったままこんな会社に入ったのは大きな間違いだった。
成長を求めてこの会社に入ったのに、常に極度のプレッシャーに苛まれ、何をしても結果が出たとは思えない日々が続いている。
5年しがみついてきたが、未だに管理職の一つ手前のランクで止まっている。入社から変わらないキャリアランク。
この5年の間に年収はほぼ倍になり、残業代を抜きにしても前職の1.5倍はもらえるようになった。
それでも、どんなに残業しても仕事は減らず、常に叱責され、呆れられ、結果が出せない日々が続く。
結局は、小さい会社では昇格するスキルはあったかもしれないが、大学を中退するようなクソニートには外資系は強すぎる。
つい三日前に、40歳になった。
当初描いていた「外資系の会社で管理職になってハクをつけてからメーカに転職しよう」というプランはすでに崩れている。
先週は産業医面談を進められ仕方なく面談したのだが、その面談で急に泣き出してしまった。40の誕生日を前に泣いている自分も情けないし、それで休職を進められても結局それを黙って、仕事を続けている自分がいる。
結果が出ないのに。
年収も、キャリアも、今がピークであり、ここからは「仕事ができない自分」を受け入れて、成果主義からはじき出されて、そうして生きていくのだと思う。
こうやって仕事ができない自分を受け入れようとすると、別に仕事で自己実現、なんて考えたこともなかったのに、ふと、自分の過去を振り返ると、結局仕事しかできていなかったのだと感じる。
そんな自分が、仕事ですら評価されなくなったら、何で評価されれば良いのだろう。何で結果を出せば良いのだろう。
だけど、もうこれ以上キャリアアップはできないし、ステップアップもできない。
プログラミングの基本的手法の1つに、論理演算というものがある。
これは真偽値(真=true、偽=false)同士の組み合わせを評価し、結果をtrue/falseで返すというものだ。
この演算のための演算子の代表的なものがANDとORで、それぞれ論理積と論理和という。
式aとbにtrue/falseのいずれかが定義されているとして、
a AND bだったらaとb両方がtrueのときのみ、演算結果がtrueになり、
a OR bだったらaとbいずれかがtrueであれば、演算結果がtrueになる。
ということは、
ANDの場合は左辺の式がfalseの時点で、右辺を評価するまでもなく演算結果はfalseとなり、
ORの場合は左辺の式がtrueの時点で、右辺を評価するまでもなく演算結果はtrueとなる。
これを短絡評価といい、今どきのプログラミング言語では必ずこの仕掛けが実装されていると。
これは排他的論理和といい、演算子の右辺と左辺の結果が違う組み合わせの場合のみtrueとなる。
つまりa=trueかつb=falseの場合か、a=falseかつb=trueの場合のみ、演算結果(a XOR b)がtrueとなる。
問題は、どういうわけかこのXORには短絡評価が存在しないのだ。
どのプログラミング言語を調べても短絡評価がないので、かなり驚いている。
一体どういうこと?
(追記)
だから、法律用語の「または」は論理和(少なくとも一方)として定義して、排他的論理和の場合は「どちらか一方」って定義すれば、元増田のような複雑な文章にしなくてもいいよね?ってこと。
「または」を論理和として使うのは、論理学では自然だし、法律でもそうやって定義することは可能だと思うのだが。定義なんだし。
言いたいことはわかるけど、論理和は論理和であってそれを「または」と読むのは解釈でしかないからなぁ。
「または」は「または」であって、それは論理和のことを指すかもしれないし、排他的論理和を指すかもしれないし、別の何かを指すかもしれない。
横だが、論理和で「含まない」ことはないだろ
1+1が2にも3にも4にもなるって脳筋の陽キャがよく言うけど、
ここで謎の演算子「+」を持つモノイドを考えてみたい。
まず、前提として、1,2,3,...はモノイドの元 α1,α2,α3,...の簡易記法とする。
モノイドの単位元はα0とする。
α_n+1 = SUCC(α_n)と表すことができることとする。
つまり
α2 = SUCC(α1) α3 = SUCC(α2) = SUCC(SUCC(α1)) ...
である。
α0 = α0 + α0 α1 = α1 + α0 α2 = α2 + α0 ...
である。
α1 + α1 = α2 = SUCC(α1) = α3 = SUCC(SUCC(α1)) = α4 = SUCC(SUCC(SUCC(α1))) ...
となる。
これを満たすことができる関数SUCCは幾つか考えられるが
その1:
defun SUCC(x) = α0
その2:
defun SUCC(x) = if (x equals to α0) then α0 else x
等とすることができる。
その1は 1bit の排他的論理和
α0 + α0 = α0 α0 + α1 = α1 α1 + α0 = α1 α1 + α1 = α2 = SUCC(α1) = α0
その2は 1bit の論理和
α0 + α0 = α0 α0 + α1 = α1 α1 + α0 = α1 α1 + α1 = α2 = SUCC(α1) = α1
である。
脳筋って頭いいんだね
まじな話をすると、N予備校のプログラミング入門コースやるのがオススメ。
一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。
月額1000円だけどしっかり勉強すれば一ヶ月の無料期間中に終わると思う。
もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラムで講師曰く去年はこれで二人エンジニア就職を決めたらしい。
内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職に必要な環境構築やセキュリティまでみっちりやる。
で講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。
↓みたいなことが学べる
----
Web ブラウザとは (Chrome, デベロッパーコンソール, alert)
はじめてのHTML (VSCode, HTML, Emmet)
さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)
HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)
はじめてのJavaScript (JS, ES6, エラー)
JavaScriptでの計算 (値, 算術演算子, 変数, 代入)
JavaScriptで論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)
JavaScriptのループ (ループ, for)
JavaScriptのコレクション (コレクション, 配列, 添字, undefined)
JavaScriptの関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)
JavaScriptのオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)
はじめてのCSS (CSS, セレクタ, background-color, border)
CSSを使ったプログラミング (transform, id, class)
Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)
診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)
診断機能の組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)
ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)
LinuxというOS (VirtualBox, Vagrant, Ubuntuのインストール, OS, CUIの大切さ)
コンピューターの構成要素 (ノイマン型コンピューター, プロセス, lshw, man, ps, dfの使い方)
ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)
標準出力 (標準入力、標準出力、標準エラー出力、パイプ、grep)
vi (vimtutor)
シェルプログラミング (シバン, echo, read, 変数, if)
通信とネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)
サーバーとクライアント (tmux, nc, telnet)
HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)
GitHubでウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)
イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)
GitとGitHubと連携 (git, ssh, clone, pull)
GitHubへのpush (init, add, status, インデックス, commit, push, tag)
Gitのブランチ (branch, checkout, merge, gh-pages)
Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)
集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)
アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)
ライブラリ (ライブラリ, パッケージマネージャー, npm)
Slackのボット開発 (slack, mention, bot)
HubotとSlackアダプタ (hubot, yo)
モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)
ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)
同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)
例外処理 (try, catch, finally, throw)
HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsのイベントループ, リスナー)
HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)
HTMLのフォーム (フォームの仕組み, form, input)
HerokuでWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)
認証で利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)
Cookie を使った秘密の匿名掲示板 (Cookie, Set-Cookie, expire)
UI、URI、モジュールの設計 (モジュール設計, フォームのメソッド制限, リダイレクト, 302)
フォームによる投稿機能の実装 (モジュール性, textarea, 303)
認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)
データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)
トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)
削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)
管理者機能の実装 (Web サービスの管理責任, 管理者機能の重要性)
デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)
脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)
XSS脆弱性の対策 (XSS, 適切なエスケープ処理, リグレッション)
パスワードの脆弱性の対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)
セッション固定化攻撃脆弱性の対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)
より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)
安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)
Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)
ExpressのAPI (app, Properties, Request, Response, Router)
GitHubを使った外部認証 (Passport, OAuth)
テスティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)
継続的インテグレーション (CircleCI)
クライアントのフレームワーク (Webpack, Chrome 以外のブラウザでもES6)
DOM操作のフレームワーク (jQuery, jQueryアニメーション, this)
AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)
WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)
RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)
テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)
インデックス (インデックス, 複合インデックス, Bツリー)
集計とソート (SUM, COUNT, ORDER BY, GROUP BY)
「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計、モジュール設計、MVC)
認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)
予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)
予定とユーザーの一覧の表示 (非同期処理, Promise, then)
出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)
プログラマ「いやぁ、論理演算のパターン多すぎてマジ混乱してきた・・・」
?????「困っているようだね」
プログラマ「そうなんです。論理和 , 論理和の否定, 排他的論理和...。いくつもあって頭が混乱してきたんです。」
?????「それならこれを使いなさい」
プログラマ「ぎゃー!!!あんなにイミフだったif文が視覚的に図式化されてスラスラ書けるぅぅうううう!!!!!あばばばばば!!!!」
?????「そうだろう。君がこの仕事を続ける限り、各集合をひとつの閉曲線(例えば円)の内部で表し、相関関係をその閉曲線の交わり方によって表す図を知っているということは一生役に立つぞ。」
プログラマ「え・・?」
?????「暗黒に染まったif文をキレイに書き直す度にパワーがはるかに増す・・その更新を無限にオレは残している・・その意味がわかるな?」
プログラマ「いきなり意味がわからないことを言いやがって!!こいつ、なんかやばいぞっ!!!!」
ゴゴゴゴゴ....
プログラマ「だめだ!暗黒の力が強烈過ぎて僕のスパゲッティコードの力では太刀打ち出来無い(´・_・`)...!!」
プログラマ「きさま!まさか!!(((((((( ;゚Д゚))))))))ガクガクブルブルガタガタブルブル」