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

存在論的プログラミング: 時間と存在を記述する

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

存在論的プログラミング: 時間と存在を記述する

Avatar for Akihito Koriyama

Akihito Koriyama

March 22, 2026
Tweet

More Decks by Akihito Koriyama

Other Decks in Programming

Transcript

  1. プログラミングパラダイム史 50s アセンブラ:マシンの言葉で考える LDA #$01 ; Aレジスタに1をロード(6502) CLC ; キャリーフラグをクリア

    ADC #$02 ; 2を加算 STA $00 ; メモリに保存(1+2=3) 60s 手続き型:手順で考えられるようになった for ($i = 0; $i < count($data); $i++) { process($data[$i]); } 70s- オブジェクト指向:モノとして考えられるようになった $user->validate(); $user->save(); 3
  2. 世界認知の拡張 50s アセンブラ:マシンの認知 60s 手続き型:世界を手順で認知 70s- オブジェクト指向:世界をモノとして認知 LDA #$01 ;

    Aレジスタに1をロード(6502) CLC ; キャリーフラグをクリア ADC #$02 ; 2を加算 STA $00 ; メモリに保存(1+2=3) for ($i = 0; $i < count($data); $i++) { process($data[$i]); } $user->validate(); $user->save(); 4
  3. 第1層:亀裂 User クラスのメソッド interface User { public function register();   

    // すべてが、常に利用できる public function verifyEmail(); public function login(); public function logout(); public function updateProfile(); public function changePassword(); public function addAddress(); public function removeAddress(); public function addPaymentMethod(); public function removePaymentMethod(); public function addToCart(); public function removeFromCart(); public function addToWishlist(); public function removeFromWishlist(); public function checkout(); public function trackOrder(); public function cancelOrder(); public function requestRefund(); public function writeReview(); 6
  4. 第3層:見え始めるもの 意味変数 存在するものは必然的に存在し、存在しないものは必然的に存在しない——スピノザ(1677) /** @link https://schema.org/email */ final class Email

    { #[Validate] public function validate(string $email): void { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new InvalidEmailException(); } } } // どのコンストラクタでも自動検証 public function __construct(string $email) {} 10
  5. 第3層:見え始めるもの 名前に制約が宿る 言霊——言葉に宿る霊力。名前が現実を規定する——日本 public function __construct( public string $email, //

    フォーマット制約 public float $bodyTemperature, // 値の範囲制約 public string $inStockItemId, // ビジネスルール制約 ) {} 13
  6. 第3層:見え始めるもの $been ——存在の自己証明 あなたは私ではない。どうして私が魚の気持ちを知らないと分かるのか?——荘子(紀元前4世紀) final readonly class EmergencyCase { public

    BeenProcessed $been; public function __construct( #[Input] float $bodyTemperature, #[Input] int $heartRate, #[Input] Emergency $being ) { $this->been = new BeenProcessed( actor: 'triage-system', evidence: ['temp' => $bodyTemperature, 'hr' => $heartRate] ); } } 16
  7. 第3層:見え始めるもの 運命は分岐する // 一本道 #[Be(ValidUser::class)] final readonly class UserInput {

    ... } // 分岐——$being が型で決定する #[Be([EmergencyCase::class, ObservationCase::class])] final readonly class TriageAssessment { public Emergency|Observation $being; } 19
  8. 第4層:回収 例:トリアージ // 意味変数検証 final class BodyTemperature { #[Validate] public

    function validate(float $bodyTemperature): void { if ($bodyTemperature < 30.0 || $bodyTemperature > 45.0) { throw new LethalVitalException(); // 存在できない } } } // 意味例外 #[Message([ 'en' => 'Vital signs indicate non-survivable conditions.', 'ja' => 'バイタルサインが生存不可能な状態を示しています。' ])] final class LethalVitalException extends DomainException {} 20
  9. 存在の分岐 トリアージプロトコルが運命を決める // 存在クラス($being で分岐) #[Be([EmergencyCase::class, ObservationCase::class])] final readonly class

    TriageAssessment { public Emergency|Observation $being; public function __construct( #[Input] float $bodyTemperature, // 内在 #[Input] int $heartRate, // 内在 #[Inject] JTASProtocol $protocol // 超越 ) { $urgency = $protocol->assess($bodyTemperature, $heartRate); $this->being = ($urgency === 'emergency') ? new Emergency() : new Observation(); } } 22
  10. 存在が能力を決める final readonly class EmergencyCase { public string $priority; //

    "IMMEDIATE" public string $color; // "RED" public function __construct( #[Input] float $bodyTemperature, #[Input] int $heartRate, #[Input] Emergency $being ) { $this->priority = 'IMMEDIATE'; $this->color = 'RED'; } public function assignER(): string { ... } // この能力はここだけ } final readonly class ObservationCase { public function __construct( #[Input] float $bodyTemperature, #[Input] int $heartRate, #[Input] Observation $being ) {} public function assignWaitingArea(): string { ... } // この能力はここだけ } 23
  11. 複雑な世界も同じ構造 道は常に無為にして、而も為さざることなし——老子(紀元前6世紀) OrderInput ($items, $customer, $payment) | ValidationOrder $being |

    +--- InvalidOrder $been | +--- ValidOrder --- InventoryOrder $being | +--- OutOfStockOrder --- PendingOrder $being | | | +--- BackOrder $been | +--- CancelledOrder $been | +--- InStockOrder --- PaymentOrder $being | +--- FailedPaymentOrder $been | +--- PaidOrder --- FraudCheckOrder $being | +--- SuspiciousOrder $been | +--- ClearedOrder --- ShippingOrder $being | +--- DeliveredOrder $been +--- ReturnedOrder $been 25
  12. DX から AX へ DX: Developer Experience — 人間にとって書きやすいコード AX:

    AI Experience — 人間とAIの双方が理解できる構造 👤 何が存在すべきか WHETHER を定義する 🤖 どう実現するか HOW を解く 27
  13. Doing から Being へ Doing Being 中心 動詞(どう動かすか) 名詞(何であるか) 変化

    他者が変化させる 自己が変容する 時間 手順の連続 状態の変容 正しさ テストによる検証 存在していること自体が証明 開発者 実装する人 存在の条件を定義する人 31
  14. 異なる言葉、同じ問い 思想 概念 Being ヘラクレイトス 万物流転 Input → Being →

    Final アリストテレス 可能態 Success|Failure $being 老子 無為 #[Be] 宣言 スピノザ 必然的存在 意味変数 フッサール 内在における超越 #[Input] + #[Inject] 荘子 自己証明 $been ハイデガー 言葉は存在の家 クラス名=世界構築 仏教 刹那滅 不可逆な変容 32
  15. "The world is a system of ever-changing relationships and structures."

    テッド・ネルソン——5歳の時、湖でボートから手を水に入れた体験から 33
  16. #[Be(NewParadigm::class)] final class You { public readonly Vision $vision; public

    function __construct( #[Input] Understanding $before, // 内在 #[Inject] Insight $today, // 超越(この後いなくなる) ) { $this->vision = new Vision($before, $today); } } 34