Lambek/Scott の Higher order categorical logic の続き。
Polynominal 変数として使う射x : Hom A 1 a を追加した圏Aの拡張 A[x]
Functional Completeness x を使った推論の正規形 a ∧ b → b の unique な射ψ(x)
internal language 集合を含む直観主義論理を表す A 上の record
で、ψ(x) が { x∈a | ψ(x) } : Hom A 1 (P a) になるってことらしい。これで internal language で集合が扱えるようになります。
結果的に全部つながってめでたいのだが、いろいろ大変だった。
そもそも、x は A に入ってないはずだろ? しかし、x : Hom A 1 a と書いてある....
Hom A 1 a は複数あるが、それは変数名なので同じものを指すはず
Hom A 1 a があるとは限らないじゃん
x を使った推論は5種類しかない(証明なし)。これで場合わけする。これは data φ で表す。
本には「分解してgraphで再構成」とかご無体なことが書いてある。結論から言うと、
record Poly (a c b : Obj A ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
field
x : Hom A 1 a
f : Hom A b c
phi : φ x {b} {c} f
という record がψ(x)に相当する。そもそも x は局所変数なので大域的に持ってはいけないらしい。
Functional Completeness は
record Functional-completeness {a b c : Obj A} ( p : Poly a c b ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
x = Poly.x p
field
fun : Hom A (a ∧ b) c
fp : A [ fun ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p ]
uniq : ( f : Hom A (a ∧ b) c) → A [ f ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p ]
→ A [ f ≈ fun ]
で良いらしい。fun には x は関与してないし、使う時にはxは既に存在する射 Hom A 1 α に置き換えられる。
これの存在を示すのは fp まではφの場合わけで良いだが、uniq は
f ≈ g → k f (ψ(x)) ≈ k g (ψ'(x))
が必要になる。locally smallなら単なる cong だが、そうでないと自明には成立しそうにない。特に、
ψ(x)と ψ'(x)の x は型が合ってるだけで値が同じとは限らない。これは「分解してgraphから再構成」
からしかでない。そして、それはまだ書けてない。なので、仮定してしまうのが早いらしい。
locally small からは出るので矛盾にはならない。
internal language と接続はこんな感じ。まだ正しいとは限らないが。
select : {a : Obj A} → ( φ : Poly a Ω 1 ) → Hom A 1 (P a)
あとは、これを internal language で使うε形式に直せば良い。
-- f ≡ λ (x ∈ a) → φ x , ∃ (f : b <= a) → f ∙ x ≈ φ x
record Fc {a b : Obj A } ( φ : Poly a b 1 )
: Set ( suc c₁ ⊔ suc c₂ ⊔ suc ℓ ) where
field
sl : Hom A a b
g : Hom A 1 (b <= a)
g = (A [ sl o π' ] ) *
field
isSelect : A [ A [ ε o < g , Poly.x φ > ] ≈ Poly.f φ ]
isUnique : (f : Hom A 1 (b <= a) ) → A [ A [ ε o < f , Poly.x φ > ] ≈ Poly.f φ ]
→ A [ g ≈ f ]
とすれば良い。g は変わった記号を使うんだが、k14にないので作らないと...
これを示すには、そこそこ計算が必要。CCC の計算練習みたいなものだが。型を書いてみて分かったのだが、
εは型を持つ
なので、CCCで変換する時にεを生成する型を間違えると当然致命的。型変換 s・s ⁻¹ を挟んで途中で
切って合わせてやると良いらしい。
そこまで気がつけば、Fc の生成できました。長いけど時間がかかるだけ。これ全体がそんなものではある。
A[x]をある意味で構築できたので、coMand な関手S(a) : a ^ b → b の Kleisli 圏S(a)を考えれば普遍問題になる。
つまり、任意のA[x]がS(a)に iso になるというのが functional completeness で、それはS(a)が CCC関手である
ことを示せば良いらしい。ただ、record Poly は技巧的なので、それに使えるかどうかは謎です。
でも、とりあえず、これで、Polyniominal 圏、Functional Completeness、Internal language まではつながりました。
まだ、直観主義論理の公理はチェックしてないけど。CCCのは成立するので集合分、つなり、fuctional completeness
の確認作業になるはずです。
https://github.com/shinji-kono/category-exercise-in-agda/blob/master/src/Polynominal.agda
No comments:
Post a Comment