ササジマさんの天国地獄問題

小学生の頃(たぶん)、ササジマさんに教わった天国地獄問題を思い出した。

  • 鬼は、命題 P に対して ¬P の真偽値を返す装置とみなす。
  • ⟦ ¬P ⟧ = true というメタ命題に対しても、鬼は機能する。
  • ⟦ ¬(⟦ ¬P ⟧ = true) ⟧ の値が鬼が返す真偽値
  • ⟦ ¬(⟦ ¬P ⟧ = true) ⟧ = ⟦ (⟦ ¬P ⟧ ≠ true) ⟧ = ⟦ (⟦ ¬P ⟧ = false) ⟧ = ⟦ ⟦ P ⟧ = true ⟧ = ⟦ P ⟧

他に:

  • 私はウソつきです。
  • 私はウソをつきません。

などの分析も面白い。本編記事だと:

解釈法 = 構文テンプレートと意味規則

例題:

  1. 集合圏
  2. 関係圏
  3. モノイド圏
  4. デカルト圏

もうひとつ

  1. 形状ドクトリン
  2. 形状集合
  3. 形状圏
  4. 図式の形状

まずテンプレートとテンプレートの変形ルール。意味規則は変形ルールにより定義される。

  • 変形ルール1: "(_1: 名詞)(_2: 名詞)" →(変形)→ "(_1)達からなる(_2)"

変形ルール1の適用

  1. (集合)(圏) →→ (集合)達からなる(圏)
  2. (関係)(圏) →→ (関係)達からなる(圏)
  3. (モノイド)(圏) →→ (モノイド)達からなる(圏) 失敗
  4. (デカルト)(圏) →→ (デカルト)達からなる(圏) 失敗

別な変形ルール

  • 変形ルール2: "(_1: 名詞)(_2: 名詞)" →(変形)→ "(_1)的な構造を持つ(_2)"
  1. (モノイド)(圏) →→ (モノイド)的な構造を持つ(圏)
  2. (デカルト)(圏) →→ (デカルト)的な構造を持つ(圏)

変形ルールの精密化

  • 変形ルール3: "(_1: 名詞)圏)" →(変形)→ "(_1)達を対象とする圏"

適用

  • (集合)圏 →→ (集合)達を対象とする圏
  • (関係)圏 →→ (関係)達を対象とする圏 失敗

「順序圏」はどうなるだろうか? 「順序集合を対象とする圏」「順序構造を持つ圏」あるいは「ホムセットが順序構造を持つ圏」。

別な変形ルール

  • 変形ルール4: "(_1: 名詞)(_2: 名詞)" →(変形)→ "(_1)という役割りを担う(_2)"
  1. (形状)(ドクトリン) →→ (形状)という役割りを担う(ドクトリン) 失敗
  2. (形状)(集合) →→ (形状)という役割りを担う(集合)
  3. 形状圏 →→ (形状)という役割りを担う(圏)
  4. 図式の形状 適用できない

別な変形ルール

  • 変形ルール4: "(_1: 名詞)の(_2: 役割り名)" →(変形)→ "(_1)達の集合上で定義された関数である(_2)"

適用

  • (図式)の(形状) →→ (図式)達の集合上で定義された関数である(形状)


別な変形ルール

  • 変形ルール5: "(_1: 名詞)の(_2: 役割り名)" →(変形)→ "関数(_2)を、(_1)に適用した値"

適用

  • (図式)の(形状) →→ 関数(形状)を、(図式)に適用した値

コロンの用法: ラベル区切り、宣言、命題

あらゆるリストはラベル付きリストだと考える。ラベルを一緒にした項目をラベル付き項目と呼ぶ。ラベル付き項目は、ラベルとデータのペア(「値」は使わないで、「データ」とする)。

型宣言を $`\in:`$ 、所属関係を $`\in`$ 、ラベルとデータの区切りをコロンとする。

  • 型宣言リストでは、$`x: (x\in: T)`$ が単に $`x: T`$ と書かれている。
  • 型宣言に $`x\in T`$ を使ってもいいが、これは $`x: (x\in: T)`$ のこと。
  • $`x\in T`$ は集合論の命題である。宣言は命題ではない。

コロンがラベル区切りと型宣言として、同時に使われている。所属記号が宣言の記号に流用されている。

要素、項目、インスタンス、値

値の多義性

  1. 関数の値
  2. 集合の要素
  3. 型のインスタンス
  4. 名前-値ペアの値

違いと類似性は:

  1. 要素は、親から切り離すと親を特定できない。
  2. インスタンスは、親を常に知っている。
  3. 名前-値ペアの値は関数値
  4. 関数値は「引数-関数値ペア」と同一視できる。
  5. 項目も、親から切り離す親を特定できない。
  6. 位置付き項目、ラベル付き項目は、親を特定できないが、広義の位置〈ポジション〉を特定できる。
  7. ラベルは番号でもよい。
  8. 関係付きペア〈related pair〉の関数版が割り当てペア。

関数値も像の要素を指しているのか、割り当てペアを指しているのかが曖昧。多くの場合、割り当てペア。一般と個別特定の区別も難しい。個別特定から一般への汎化作用がある。

形式語彙エントリ 例題

  • ユークリッド空間の凸集合
  • 一変数の凸関数
  • 一点で微分可能な連続関数
  • 微分可能な一変数関数
  • データベース用語
  • アフィン空間
  • 半群の単位元(と台集合)
  • オートマトン
  • ミート半束から順序構造
  • スタック
  • 複体(代数的、幾何的)
  • 複体のホモトピー
  • 主バンドル
  • ベクトル
  • スカラー
  • 一次形式(微分形式、線形形式)
  • インスタンス(型理論)
  • 集合バンドルと写像(アロー圏の射)
  • 連続体
  • リスト vs 配列 (代数的解釈)

用語の流用・転用現象のメカニズム

流用も転用もオーバーロードが起きるもとになる現象。

  • 同一語が、一般名詞と役割り名の両方に使われる

P が生きている人の集合、'親子' が親子関係、'親'と'子'が関係における役割り名(ペアのポジションに付けた名前、成分射影に付けた名前)。'親'と'子'は関係に対応する述語 P✕P → Bool の名前付き引数の名前、引数変数名。

R := 親子関係 と置いて、R は外延だとする。

役割り名(引数変数名、引数ラベル)であった'親'は射影関数の名前に流用(あるいは転用)される。

  get_親 : R → P in Set

関係付きペア〈related pair〉(R の要素)の第二成分を取る関数。

ニ項関係から二種類の非決定性関数が得られる。そのうちのひとつは:

  親_of_ : P → P in NDet

get_親 の像集合と 親_of_ の像集合は一致する。

  The_親_s := Img(get_親) = Img(親_of)
  The_親_s ⊆ P

'親'は、関係における単なる関係ラベル(タブルを関数とみての引数)。get_親 はラベル '親' のゲルファント変換。親_of はワイヤーストレッチング。The_親_s は像集合。one_親 ∈ The_親_s は要素。

まとめると:

  • 親子関係の役割り名 '親'
  • 射影関数 get_親
  • 非決定性関数 親_of
  • 集合 The_親_s
  • 要素 one_親 ∈ The_親_s

集合の所属関係と、そこでの役割り名 '要素', '集合' に同じ議論を適用すると:

  • 所属関係の役割り名 '集合'
  • 射影関数 get_集合
  • 非決定性関数 集合_of
  • 集合 The_集合_s
  • 要素 one_集合 ∈ The_集合_s

The_集合_s に空集合が入らなくなる。これは、空集合が定義上アトムだから。

形容詞の運用

依存型理論の「インスタンス」に次の形容詞を付ける。

  1. パラメトリック
  2. アドホック
  3. 同時
  4. 個別
  5. 個体
  6. 部分
  7. 全域
  8. 多段
  • パラメトリックとアドホックは排他的ではなく程度問題(傾向性の比較)。インスタンスのセクションとしての域の大きさの程度を問題にしている。
  • 同時は冗長。チョイスとして、複数のパラメータに対して同時チョイスする。
  • 個別と個体は同義。パラメータ域=インデキシング集合=域 が単元集合
  • 部分と全域は排他的ではない。全域インスタンスは特別な部分インスタンス。
  • 多段は概念を広げる拡張的形容詞

各形容詞に、さらに修飾できる形容詞

  1. パラメトリック → 部分, 全域, 多段
  2. アドホック → 部分, 全域, 多段
  3. 同時 → 部分, 全域, 多段
  4. 個別 → 多段
  5. 個体 → 多段
  6. 部分 → 多段
  7. 全域 → 多段
  8. 多段 → (なし)

形容詞を Is_形容詞 で述語化したとき、他の形容詞が付けられるかは、コンテキスト拡張の問題になる。

形容詞と否定辞


否定辞は non-, un-, 非、不 など。形容詞に否定辞を付けられる。

一般名詞に形容詞をつける、否定辞付き形容詞をつける場合に、意味がどう変わるか?

  1. 制限的: もとの名詞または形容詞+名詞の外延の部分集合を作る
  2. 拡張的: もとの名詞または形容詞+名詞の外延のスーパーセットを作る
  3. 排他的: もとの名詞または形容詞+名詞の外延と無交差な別の集合を作る
  4. 冗長: もとの名詞または形容詞+名詞の外延はそのまま

例:

  • 過去の パンダ → ジャイアントパンダ のジャイアントは排他的
  • 現在の パンダ → レッサーパンダ のレッサーは排他的
  • 現在の パンダ → ジャイアントパンダ のジャイアントは冗長
  • (別ケース)現在の パンダ → ジャイアントパンダ のジャイアントは制限的
  • 環 → 可換論 の可換は制限的(環に可換性を要求してない場合)
  • 環 → 非可換環 の可換は拡張的(環に可換性を要求している場合)
  • (別ケース)環 → 非可換環 の非可換は排他的(環に可換性を要求している場合)
  • 環 → 非可換環 の非可換は冗長(環に可換性を要求してない場合)
  • (別ケース)環 → 非可換環 の非可換は制限的(環に可換性を要求してない場合)
  • 可換環 → 非可換環 の非は拡張的
  • (別ケース)可換環 → 非可換環 の非は排他的

誤認・誤解の原因 もっと

根本的誤解 補遺: 誤認・誤解の原因 - 檜山正幸のキマイラ飼育記 (はてなBlog) で、

  • 過剰な限定
  • 過剰な単純化

を述べたが、

  • 過剰な唯名論

もある。「名前が同じだから同じモノだ」「名前が違うから違うモノだ」という信念、それに伴う誤認・誤解。

文脈を忘れてしまう症状は、文脈健忘症

集合に関数が付随した構造

$`f:X \to Y`$ があるとき、$`(X, f)`$ を何と呼ぶか?

  1. ranked set
  2. labeled set
  3. graded set
  4. sorted set
  5. typed set
  6. colored set
  7. tagged set
  8. roled set

rank, label, grade, sort, type, color, tag, role などを属性名とする attributed set で統一的に記述できる。いずれも single-attributed set になる。

attributed set は:

$`\quad f : X \to \sum_{a\in A}Y_a`$

single-attributed set でも multi-attributed set = attributed set でも、バンドル-ファミリー対応でファミリーとみなすことができる。

「基本」「基底」の類義語

  • 基本〈basic〉
  • 初等〈elementary〉 行列の基本変形の「基本」は elementary
  • 原子〈atomic〉 原子論理式
  • 原始〈primitive〉 カタカナ「プリミティブ」が多い
  • 組み込み〈builtin〉

基底

  • ベース〈base〉
  • 基底〈basis〉
  • 基礎〈foundation〉
  • 基礎〈ground〉
  • 台〈underlying〉
  • underpinning

派生

  • 派生〈derived〉
  • derived → 導出
  • derived → 導来 導来圏
  • derived → 導 導関数
  • 誘導〈induced〉

省略の弊害

暗黙化、略記、記号の乱用、デフォルトルール、曖昧多義語の使用などは、広い意味で省略と言える。本来なら言うべきことを言わないこと。

省略が発生する要因は:

  1. めんどくさいから省略する(横着)。
  2. よくわからないから省略する(誤魔化し)。

どっちにしてもよくないが、誤魔化しは最低。

実引数を渡すこと

関数だけでなく関手やテンプレートも考えると、次が同義語:

  1. 関手/テンプレートへの実引数渡し
  2. なんらかの対象への関手/テンプレートの適用
  3. 評価、または実行
  4. 型パラメータなどのインスタンス化〈instantiation〉
  5. 型パラメータなどの具体化〈concretization〉
  6. 束縛、ラムダ束縛
  7. 充填〈fill | filling〉
  8. 注入〈injection〉(依存性注入の)

実引数渡しに関連して次も同義語:

  1. 変数、引数変数
  2. 仮引数、仮パラメータ
  3. プレースホルダー
  4. テンプレート変数
  5. 穴〈hole〉
  6. スリット
  7. スロット

やばい形容詞「部分」

  • 部分〈sub | partial〉

なぜやばいのか:

  1. sub と partial を日本語で区別できない。
  2. 例外的に partial differential は偏微分(部分微分とは言わない)。だが、「偏」を partial の訳語にはしにくい。
  3. partial algebra は演算が partial map の代数構造だが、日本語では subalgebra と区別できない。
  4. partial application は部分適用。偏微分と揃えるなら偏適用だが、そうは言わない。
  5. subset, subcategory, subalgebra, subgroup, submodule, subspace などは「部分」が定着している。が、superset, supercategory, superalgebra, supergroup, supermodule, superspace などの定着した訳語がない。
  6. super を「超」と訳すとなんか違う。
  7. 英語でも、super は sub の逆とは限らない。superalgebra, superspace などは独自の意味がある。
  8. super-sub を「優-劣」で表現することもある。劣確率測度〈subprobability measer〉、優調和関数〈superharmonic Function〉など。例は少ない。
  9. 劣集合・優集合、劣圏・優圏、劣代数・優代数などは使わない。
  10. 「部分」が使いにくいので、部分関数〈部分写像〉を最近は「半決定性写像」にしている。
  11. subfunctor と partial functor がある。subfunctor は集合圏への関手のあいだの関係。partial functor は部分的に定義された関手。

Lean と AI

去年の11月、12月あたりの知見だが:

Lean と AI に関してわかったこと:

  • 1. VSCode まわりのAIツールは役に立たない。
    • 1.1. Leanの言語仕様が複雑過ぎる。
    • 1.2. Mathlib が巨大過ぎる。
    • 1.3. 命題や証明のセマンティクスを理解できない。
    • 1.4. 余計なことをしてコードを壊すだけ。
  • 2. 汎用チャットボットはよく知っているし賢い。
    • 2.1. Lean も論理も型理論も学習している。
    • 2.2. 割とまともなコードを生成できる。
    • 2.3. よーく説明すれば、ある程度セマンティクスを理解できる。
  • 3. だがしかし
    • 3.1 難しいことになるとハルシネーションが多くなる。
    • 3.2 Lean 3 と Lean 4 の知識がゴッチャになっている。Lean 4 で動かない古くさいコードを吐いたりする。
    • 3.3 やっぱり「オマエ、ほんとは分かってねーだろ」という場面もある。

AIは、十分に物知りで優秀だが、虚言癖があって“知ったか”するヤツと思って付き合えばよい。