選択的適応関数(Selective Applicative Functors)

2025/12/31 13:07

選択的適応関数(Selective Applicative Functors)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

本論文は、2019年にMokhovらによって導入された選択的適用ファンクタ(selective applicative functors)を再検討し、それらが排他的な決定論的選択を符号化していることを示す。実際には単なるファンクタではなく、アロー(プロファンクタ)のように振る舞う。

主な観察点

  • 元の定義はモノイドテンソル(monoidal tensor)について言及しておらず、
    branch
    操作がきれいに合成できないままだった。
  • 分岐で存在型(existential types)を導入し、それをプロファンクタ操作(
    first
    second
    )や
    curry/lowerFn
    インタフェースと結びつけることで、正しい合成が回復された。
  • コンストラクタ
    TwoCases
    OneCase
    ZeroCases
    CaseTree f i r
    内)の結合性・単位元・対称性・冪等性の法則は、
    Either
    のモノイドテンソル特性と鏡像を成す。

コア構造

  • 型クラス
    Casing f
    とメソッド
    caseTreeOn :: f i -> CaseTree f i r -> f r
    は、
    select
    branch
    両方を一般化する。
  • 自由選択構造である
    ControlFlow f i r
    は、アクション、純粋関数、シーケンス、無意味ケース、および分岐(
    CaseBranch
    )を結合し、強力なプロファンクタ操作(
    first
    second
    )とテンソルに関連する
    curry/lowerFn
    インタフェースをサポートする。

静的解析の視点

  • データ型
    FlowInfo f
    は、純粋なASTライク構造を捉え、その操作はほぼセミリング(近似半環)を形成する:シーケンスが乗算、分岐が加算となる。

関係とスペクトル

  • 選択的ファンクタは、代替(非決定論的選択の
    <|>
    )とモナド/適用ファンクタ(シーケンス対並列)の間に位置する。基底効果が冪等である場合(例:副作用を持たないパーサ)、選択的は代替から
    mapMaybe
    とバックトラッキングを介して導出できる。

将来の方向性

  • 著者らは、構文、合成規則、および近似半環構造に基づく決定論的パースや静的解析といった実用的応用を探求する計画である。

この改訂要約は、主要項目リストからすべての重要点を忠実に反映しつつ、明確さを保ち、不必要な推論を避けています。

本文

選択的適用関数 – 簡潔な概要


1. 選択的適用関数とは何か?

選択的適用関数(Selective Applicatives)はモナドとアプリカティブの中間に位置します。
「有限で決定論的な選択」を可能にし、以前の結果が他方では静的に決まった制御フローのどちらを取るかを判断します。

このクラスは2019年に導入されました:

class Applicative f => Selective f where
    select :: f (Either a b) -> f (a -> b) -> f b

branch
select
から派生できます:

branch :: Selective f => f (Either a b)
       -> f (a -> c) -> f (b -> c) -> f c
branch x l r = fmap (fmap Left)  x <*? fmap (fmap Right) l <*? r

select
branch
の「クリーンなカテゴリカルな説明」を与えることが課題でした。


2. なぜアローなのか?

アプリカティブは「時間の矢印(arrow‑of‑time)」を持たず、効果を任意の順序で実行できます。
モナドはバインド演算子

(>>=)
により動的制御フローをエンコードします。

選択的適用関数は 排他的な決定論的選択 を必要とし、これは自然にアロー(合成可能なプロファンクタ)で表現できます。
アローを使えば:

  • 分岐構造 (
    Either
    )、
  • 効果的な継続処理、
  • それらのシーケンス

を捉えることができます。


3. コアデータ構造

CaseTree

data CaseTree f i r where
    TwoCases :: (i -> Either x y)   -- 入力を分岐させる関数
              -> CaseTree f x r     -- 左の枝
              -> CaseTree f y r     -- 右の枝
              -> CaseTree f i r

    OneCase  :: f (i -> r)          -- 単一の効果的ステップ
              -> CaseTree f i r

    ZeroCases:: (i -> Void)         -- 空の枝
              -> CaseTree f i r

CaseTree
は「有限ケース関数」
i → f r
の有限で存在量化された表現です。
制御フローの AST として見ることができます。

Casing

class Casing f where
    caseTreeOn :: forall i r. f i -> CaseTree f i r -> f r

Casing
のインスタンスは、与えられた
CaseTree
に従って
f
内の値を解釈します。

ControlFlow

フリーな選択的適用関数

data ControlFlow f i r where
    Action  :: f (i -> r)          -> ControlFlow f i r
    Pure    :: (i -> r)            -> ControlFlow f i r
    Sequencing :: ControlFlow f i j
               -> ControlFlow f j r
               -> ControlFlow f i r

    -- 分岐はそれ自身が `ControlFlow` である `CaseTree`
    CaseBranch :: (i -> Either x y)
                -> ControlFlow f x r
                -> ControlFlow f y r
                -> ControlFlow f i r

Sequencing
コンストラクタはモナド的合成を、
CaseBranch
コンストラクタは選択的選択を表します。


4. 法則

操作法則
乗法 (
Sequencing
)
結合律:
<s> = s1 > s2 > s3 ≈ (s1 > s2) > s3

単位元:
Pure id > f ≈ f ≈ f > Pure id
加法 (
CaseBranch
/
TwoCases
)
結合律:
Two a (Two b c d) ≈ Two (assoc) (Two a b c) d

単位元:
Two Left cx ZeroCases ≈ cx
Two Right ZeroCases cx ≈ cx
分配右分配律:
Sequencing (CaseBranch split cx cy) g ≈ CaseBranch split (Sequencing cx g) (Sequencing cy g)
オプション分岐の可換性:
Two a b c ≈ Two swap b c

冪等律:
CaseBranch id cx cx ≈ OneCase (lmap collapse <$> cx)
(効果が同一の場合)。

これらの法則は、定数関数でインスタンス化したときに「近似セミリング」を形成します。


5. 選択的から代替へ

Alternative
は非決定論的選択を提供します:

class Applicative f => Alternative f where
    (<|>) :: f a -> f a -> f a

Filterable
Plus
を併用すれば、選択的振る舞いを再現できます:

selectLeft  = mapMaybe (\case Left x  -> Just x; Right _ -> Nothing)
selectRight = mapMaybe (\case Left _  -> Nothing; Right y -> Just y)

branch d l r =
    liftA2 (&) (selectLeft  d) l
      <|>
    liftA2 (&) (selectRight d) r

したがって、決定論的な選択非決定論的代替 とフィルタリングでシミュレートできます。
しかし、

CaseTree
の静的構造は解析や曖昧さの防止に有用です。


6. 要約

  • 選択的適用関数は有限かつ決定論的な分岐をエンコードします。
  • コアは アロー
    CaseTree
    ,
    ControlFlow
    )で表現されます。
  • 法則は「近似セミリング」―乗法と加法の構造、右側の分配律を備えています。
  • 代替 (
    <|>
    ) とフィルタリングで選択的振る舞いを模倣できますが、本来の
    select
    の完全な力はアロー表現に集約されます。

この枠組みは、アプリカティブ・モナド・セレクティブ・オルターナティブの制御フロー推論を統一し、静的解析と合成プログラミングのための明確な代数的基盤を提供します。

同じ日のほかのニュース

一覧に戻る →

2026/01/06 6:05

ベネズエラで停電が起きた際に、BGP に異常が発生しました。

## Japanese Translation: --- ## Summary ロウオービットセキュリティのニュースレターは、ベネズエラが1月2日に停電した際に発生した疑わしいBGP異常を報告しています(Cloudflare Radar のタイムスタンプ 15:40 UTC)。Cloudflare Radar は CANTV (AS 8048) が自身の ASN を **10 回** 前置していることと、BGP 公開が急増し、その後広告される IP 空間が減少した異常なスパイクを示しています。200.74.224.0/20 ブロックから 8 つのプレフィックスが `…52320 8048 …` の経路で Sparkle(イタリア)と GlobeNet(コロンビア)を通じてリークされました。公開 BGP フィード(ris.ripe.net、bgpdump)は異常な AS‑path 構造を確認しており、Sparkle は RPKI フィルタリングが欠如しているため isbgpsafeyet.com で「unsafe」とリストされており、通常のトラフィックにとってルートが魅力的ではありません。 WHOIS データはリークされたプレフィックスがカラカスの Dayco Telecom に属していることを示しています。逆 DNS ルックアップは、これらの範囲が銀行、ISP、およびメールサーバーなどの重要インフラストラクチャをホストしていることを明らかにします。BGP アクティビティのタイミングは政治的不安と一致し(1月3日に爆発報告およびマドゥロが USS Iwo Jima に登場)、国家レベルでの悪用または意図的なルーティング操作を示唆しています。 ニュースレターは、通信事業者、ホスティングプロバイダー、およびセキュリティ企業に対し、ユーザーと重要インフラストラクチャをトラフィックの傍受や劣化から保護するために BGP 検証(例:RPKI)を強化するよう促しています。

2026/01/06 7:10

なぜAIは2025年に就業市場に参加しなかったのでしょう?

## Japanese Translation: この記事は、2025年までにAIエージェント革命が起こるという高い期待が過大であると主張しています。サム・オルトマン、ケビン・ワイル、マーク・ベニオフはすべて急速な採用と「デジタル労働」のブームを予測しましたが、実際のテスト(例:ChatGPTエージェントがドロップダウンメニューをナビゲートするのに14分かかったケース)では、大規模言語モデルは未だ鈍く不安定であることが示されています。ガリ・マーカスやアンドレイ・カルパチといったシリコンバレーの懐疑派もこれらの限界を認めており、カルパチはこの時期を「エージェントの十年」と呼びました。著者は、まだ信頼できるデジタル従業員を構築する方法がわからないことを指摘し、未来の仮想的な利益よりも現在の控えめな能力に焦点を移すべきだと訴えています。2026年には、実際の取り組みとして段階的な統合を推奨し、企業はまず小規模プロジェクトで試験運用するよう促し、政策立案者には仮説ではなく現在直面しているAIリスクに対処するよう呼びかけています。 ## Text to translate (incorporating missing details and avoiding inference):** The article argues that high‑profile predictions of an AI‑agent revolution by 2025 have been overblown. Sam Altman, Kevin Weil, and Mark Benioff all forecasted rapid adoption and a “digital labor” boom, but real‑world tests—such as ChatGPT Agent spending fourteen minutes navigating a drop‑down menu—show that large language models remain clumsy and unreliable. Silicon Valley skeptics like Gary Marcus and Andrej Karpathy acknowledge these limitations; Karpathy even referred to the period as the “Decade of the Agent.” The author notes that we still do not know how to build reliable digital employees, and urges a shift in focus from speculative future gains to the current modest capabilities. In 2026, the piece calls for realistic engagement: incremental integration rather than wholesale automation, encouraging companies to pilot small‑scale projects first and prompting policymakers to address present AI risks instead of hypothetical ones.

2026/01/06 1:47

**Show HN:** *Tailsnitch – Tailscale 用のセキュリティ監査ツール*

## Japanese Translation: **Tailsnitch** は、52項目を7つのカテゴリ(アクセス、認証、ネットワーク、SSH、ログ、デバイス、DNS)に分類した検査で、誤設定や過度に許容的なアクセス制御、ベストプラクティス違反を監査する軽量CLIツールです。 ユーザーは `tailsnitch` のようなシンプルなコマンドで実行し、結果を severity(`--severity`)、カテゴリ(`--category`)、特定のチェックID(`--checks`)または tailnet(`--tailnet`)でフィルタリングでき、SOC 2 証拠として JSON または CSV へエクスポートできます。 ツールは `tailsnitch --fix` による対話型修復をサポートし、dry‑run、auto‑select、および古いデバイス、保留中の承認、auth keys、タグなどの問題を自動的に修正するオプションがあります。 認証は OAuth(推奨)または API キーで行われます;監査モードでは `policy_file:read` と `devices:core:read` のスコープが必要で、修復モードではさらに `auth_keys` と `devices:core` が必要です。 インストールは簡単です:GitHub Releases から事前ビルドされたバイナリをダウンロードするか、`go install github.com/Adversis/tailsnitch@latest` を実行するか、ソースコード(`git clone https://github.com/Adversis/tailsnitch.git`)をビルドします。 既知のリスクは `.tailsnitch-ignore` ファイルで抑制できます(例:`ACL‑008` や `DEV‑006` のようなエントリー)。このファイルは現在とホームディレクトリに検索され、`--no-ignore` で無効化可能です。 Tailnet‑Lock チェック(`DEV‑010`、`DEV‑012`)にはローカルの Tailscale CLI が必要で、遠隔監査時にはマシンの状態を反映し、`--tailscale-path` を使用して上書きできます。 JSON エクスポートはポストプロセッシング(例:`jq` で失敗や severity の概要を一覧表示)用に設計されており、`--soc2 json` または `--soc2 csv` により SOC 2 証拠の生成もサポートします。 最後に、Tailsnitch は CI/CD パイプライン(GitHub Actions など)へ統合でき、重大または高 severity の発見があった場合にビルドを自動的に失敗させることで、チームが継続的にセキュリティポリシーを強制するのに役立ちます。

選択的適応関数(Selective Applicative Functors) | そっか~ニュース