この章を読むか、対話型目次と依存グラフで別のルートを選べます。
対話型目次 · 依存グラフモジュールの境界で lem : LEM (ℓ-suc ℓ) を固定することで、この依存は一貫したものになる。したがって以下の構成はすべて、同じレベルつきの仮定を受け継ぎ、任意の大きさでの排中律を暗黙に用いることはない。
module L.Choice.OrderTable {ℓ : Level} (lem : LEM (ℓ-suc ℓ)) where
構成可能な順序数の段階添字 α では、先の構成によって Lset α の要素上のホスト側の狭義整列順序がすでに得られている。本章の目的は、その二項比較を L の内部の集合として表現し、モデルで解釈される論理式がその関係を量化できるようにすることである。結果は、一段階の再帰について妥当な対象言語の記述が与えられることを前提とし、α が順序数かつ構成可能である場合に適用される。ここで表現するのは既存の順序の基礎となる関係であり、この関係が整列順序であるという対象言語の主張はまだ与えない。
この章で用いる古典的仮定は、構成が置かれる宇宙レベルでの排中律だけである。先に得た段階順序がすでにこれを必要とし、後で用いる置換と分出もこれから得られる。切り詰め、輸送、外延的な一意性についての局所的な議論が、別の古典的仮定を加えることはない。
ここでは二つの議論の水準を区別する必要がある。表現される関係はホストの型理論で定義され、その再帰的な記述は L で解釈される一階論理式である。所属に沿う帰納が各段階を結ぶ。その動機は任意の依存型族に値を取れるので、後で表と関係を同時に運ぶ組が命題であることは、再帰の正当性の前提ではない。
最終的な関係は構成可能モデルの中にあるが、その端点はまずホスト集合 Lset α の要素として現れる。順序数性 oα を固定すると、Lset→isL によって各端点をモデル要素としてまとめられる。この変換が使うのは α の順序数性であり、α 自身が構成可能であるという別の証明ではない。α の構成可能性の証人は、後で異なる役割を果たす。段階の添字自身をモデル要素 A としてまとめ、置換公理の定義域と分出公理のパラメータにするためである。順序数の要素に関する法則が小さい添字の順序数性を与え、対の符号化の単射性と外延性が、それぞれ端点の復元と要素による集合の同一視を与える。
この構成では、二つの集合存在原理を異なる目的に用いる。命題的切り詰めのもとの存在と外延的な一意性によって各グラフの繊維を可縮にした後、置換がすべての小さい添字での関係の値を一つの表に集める。分出は一つの共通の包含集合から現在の関係を切り出す。したがって、上界より下の表と上界での関係は同時に作られるが、その存在を与える議論は別々である。
順序そのものは、Mem (Lset α) 上の狭義整列順序 orderAt α oα としてすでに得られている。本章ではその基礎となる比較、三分性、非反射性、推移性を用い、後には同じ順序を段階の小さな提示へ運ぶ。新しい比較規則や整礎性の証明をここで導入することはない。
後で現れる多くの等式は、第二成分が所属の証明である依存対を比較する。所属と順序数性は命題なので、底の集合の等しさからまとめられた要素の等しさが定まり、証明書を取り替えても別の数学的端点は生じない。そのため、対の成分の等式に沿って比較を輸送しても、証明を余分な選択に変えることはない。
命題的切り詰めは、証人を選ばず存在だけを必要とするすべての箇所を示す。小さな提示の役割は別である。大きいかもしれない所属の繊維を小さな添字型で提示し、その埋め込みから表される要素を返す。一方は選択を隠し、他方は大きさを制御するので、この二つを区別することが大切である。
open import Cubical.HITs.CumulativeHierarchy.Base using ( V; _∈_; setIsSet )
open import Cubical.HITs.CumulativeHierarchy.Properties
using ( ⟪_⟫; ⟪_⟫↪; ∈-asFiber )
ここから先、命題と量化は L の所属構造で読む。したがって、モデルの要素があるクラスを実現するという主張は、その要素の所属についての命題として表され、メタ理論の内包によって別の外部集合を作ることではない。
open hPropView 𝒮ʟ
後で用いる内部の集合記法は、候補の集合が、ある論理式を満たす対象をちょうど要素にもつことを述べる。これは集合の外延的な仕様であり、集合の存在そのものは、再帰の適切な箇所で置換または分出から得なければならない。
module ModelL = FOL.ZFModel 𝒮ʟ
open ModelL using ( SetOf )
論理式の充足は、絶対性を通してホスト側の述語と比較される。論理式そのものが orderAt を含むのではない。妥当性の等式が、その解釈された真理値を、符号化された比較対からなるホスト側のクラスと同一視する。
module AbsL = FOL.Absoluteness.Single 𝒮ᵥ isL isL-trans
open AbsL renaming ( _⊨ᵐ_ to _⊨_ )
以下の論理式は、既存の環境の外側に二つの新しい束縛を導入する。この非公開のずらしは、古い各変数の添字を二つの束縛の先へ移して意味を保つ。これにより、値、添字、表という数学的な役割が、拡張された環境でも変わらない。
private
sh2 : ∀ {n} → Fin n → Fin (suc (suc n))
sh2 i = suc (suc i)
比較を切り詰めから取り戻す
モデルのクラスは命題に値を取る必要があるが、relOf (orderAt α oα) a b の証人が一意であるとは証明されていない。そこで Ordering は、その証人の命題的切り詰めだけを保つ。これにより比較はクラスの所属に適した論理的な形になり、比較が証人をもつかどうかは保たれる。
Ordering : (α : V ℓ) → IsOrd α → Mem (Lset α) → Mem (Lset α) → hProp (ℓ-suc ℓ)
Ordering α oα a b = ∥ relOf (orderAt α oα) a b ∥₁ , squash₁
この特定の比較については、後で切り詰めを除去できる。その理由は、すでに構成された狭義順序の三分性である。a と b が順方向に関係する場合、等しい場合、逆方向に関係する場合に分けると、後の二つは切り詰められた順方向の比較と矛盾する。これは狭義全順序の比較に固有の性質であり、命題的切り詰め一般から証人を取り出す方法ではない。
strict : (α : V ℓ) (oα : IsOrd α) (a b : Mem (Lset α))
→ ⟨ Ordering α oα a b ⟩ → relOf (orderAt α oα) a b
strict α oα a b h = decide (SWO.tri∙ W a b)
where
W = orderAt α oα
順方向の分岐では、三分性が必要な切り詰められていない証人をすでに与えるので、切り詰められた仮定を開く必要はない。等しい分岐では、その証人を空の型へだけ除去する。a ≡ b に沿って輸送すれば a が自分自身に先行することになり、非反射性に反するからである。必要な結果は、この矛盾から得られる。
decide : Tri (relOf W a b) (a ≡ b) (relOf W b a) → relOf W a b
decide (lt k) = k
decide (eq q) = ⊥₀-rec (rec₁ isProp⊥
(λ k → SWO.irr∙ W a (subst (relOf W a) (sym q) k)) h)
decide (gt k) = ⊥₀-rec (rec₁ isProp⊥
逆方向の分岐では、仮に順方向の証人があれば、それを逆方向の比較と推移性で合成することで、やはり a が自分自身に先行してしまう。ここでも切り詰めを開くのは、この矛盾を示すためだけである。したがって strict は比較の証人を返すが、比較の証人の型が命題であることや、優先される証明を選ぶことは示さない。
(λ j → SWO.irr∙ W a (SWO.trans∙ W a b a j k)) h)
段階における関係
添字 α に対して Related α z は、命題的切り詰めのもとで、z が Lset α の二つの要素の Kuratowski 対であり、その二要素が段階順序で関係づけられていることを述べる。順序数性の証明書はクラスの内側で量化されるので、このクラスは α が順序数であるという選ばれた証明に依存しない。端点の分解と比較の証人は、それぞれの切り詰めの境界内にとどまる。
Related : V ℓ → V ℓ → hProp (ℓ-suc ℓ)
Related α z = ∃[ oα ∶ IsOrd α ] (∃[ a ∶ Mem (Lset α) ] (∃[ b ∶ Mem (Lset α) ]
((z ≡ pr (a .fst) (b .fst)) , setIsSet z (pr (a .fst) (b .fst))) ⊓ Ordering α oα a b))
モデルの集合 r がこのクラスを実現するとは、すべてのモデル要素 z について、r への所属と Related α が双方向に一致することである。外向きの含意は無関係な要素や形の違う要素を排除し、内向きの含意は関係するすべての対を含める。構成可能性は推移的であり、構成可能な集合の各要素もモデルの要素としてまとめられるので、ここではモデル要素だけを量化すれば十分である。
Realizes : V ℓ → S → hProp (ℓ-suc ℓ)
Realizes α r = ∀[ z ∶ S ] ((z .fst ∈ r .fst) ⇒ Related α (z .fst))
⊓ (Related α (z .fst) ⇒ (z .fst ∈ r .fst))
IsRel α r は、この正確な所属仕様の証拠の型である。これは r がホスト側で定義されたクラスを実現することを述べるだけで、r に狭義順序の構造を加えず、関係が対象言語の整列順序の論理式を満たすとも主張しない。
IsRel : V ℓ → S → Type (ℓ-suc ℓ)
IsRel α r = ⟨ Realizes α r ⟩
実現の証明に含まれる二つの含意は、「z が r に属する」という命題と「z が α で関係する」という命題の間のパスを定める。この点ごとのパスが、任意の実現集合への所属と意味論的なクラスを交換するときの書き換え原理になる。
rel-path : (α : V ℓ) (r : S) → IsRel α r
→ (z : S) → (z .fst ∈ r .fst) ≡ Related α (z .fst)
rel-path α r p z =
⇔toPath {P = z .fst ∈ r .fst} {Q = Related α (z .fst)} (p z .fst) (p z .snd)
r と r' がともにこのクラスを実現するなら、両者の所属命題は点ごとに一致し、L の外延性が二つの集合を同一視する。ここで示す一意性は実現集合の一意性である。Related の中で切り詰められた順序数性の証明書、端点の分解、比較の証人が一意に選ばれることを意味しない。
rel-unique : (α : V ℓ) (r r' : S) → IsRel α r → IsRel α r' → r ≡ r'
rel-unique α r r' p q = extensionalL
(λ z → rel-path α r p z ∙ sym (rel-path α r' q z))
順方向の読みは、指定された要素 a,b と実際の段階順序の比較から始まる。二つの底の集合が符号化された対を作り、順序数性の証明書、まとめられた二要素、切り詰められた比較が Related の証人を与える。証人は切り詰めの内側で構成されるので、切り詰められた情報から選択を取り出してはいない。
module _ (α : V ℓ) (oα : IsOrd α) (a b : Mem (Lset α)) where
related-in : relOf (orderAt α oα) a b → ⟨ Related α (pr (a .fst) (b .fst)) ⟩
related-in h = ∣ oα , ∣ a , ∣ b , (refl , ∣ h ∣₁) ∣₁ ∣₁ ∣₁
逆方向の読みは、意図的に狭い形をしている。入力の対象はすでに固定された端点 a,b の符号化された対として提示されている。この提示があるからこそ、存在的に表された対を二つの端点と比較し、その段階順序の比較を復元できる。任意の関係する対象を、選ばれた端点の対へ分解するものではない。
related-out : ⟨ Related α (pr (a .fst) (b .fst)) ⟩ → relOf (orderAt α oα) a b
related-out h = strict α oα a b (rec₁ squash₁ atOrd h)
where
atPair : (o : IsOrd α) (a' b' : Mem (Lset α))
→ (pr (a .fst) (b .fst) ≡ pr (a' .fst) (b' .fst))
切り詰められた記録が端点 a',b' と順序数性の証明 o を与えるとする。二つの符号化された対の等しさから a と a'、b と b' がそれぞれ同一視され、順序数性が命題であることから o と固定された証明 oα が同一視される。この三つの同一視に沿って記録された比較を輸送すると、固定された端点での切り詰められた比較が得られる。
→ ⟨ Ordering α o a' b' ⟩ → ⟨ Ordering α oα a b ⟩
atPair o a' b' q = map₁
(λ k → subst2 (relOf (orderAt α oα)) (sym ea) (sym eb)
(subst (λ o' → relOf (orderAt α o') a' b') (isPropIsOrd α o oα) k))
where
対の符号化の単射性は、まず底にある端点の集合の等しさを復元する。各端点は、集合とそれが Lset α に属する証明からなる依存対である。その証明は命題なので、第一成分の等しさは要素全体の等しさへ持ち上がる。これにより、比較を正しい依存型の中で輸送できる。
ea : a ≡ a'
ea = Σ≡Prop (λ x → (x ∈ Lset α) .snd) (pr-inj q .fst)
eb : b ≡ b'
eb = Σ≡Prop (λ x → (x ∈ Lset α) .snd) (pr-inj q .snd)
外側の順序数性の証明書は明示されているが、各端点は命題的切り詰めのもとでしか存在しない。そこで切り詰めを一層ずつ、命題 Ordering α oα a b へ除去する。この目標の中では一時的な代表を使えるが、どちらの端点も選ばれたデータとして外へ出ることはない。
atOrd : Σ[ o ∶ IsOrd α ] ⟨ ∃[ a' ∶ Mem (Lset α) ] (∃[ b' ∶ Mem (Lset α) ] ((pr (a .fst) (b .fst) ≡ pr (a' .fst) (b' .fst))
, setIsSet _ (pr (a' .fst) (b' .fst))) ⊓ Ordering α o a' b') ⟩
→ ⟨ Ordering α oα a b ⟩
atOrd (o , h₁) = rec₁ squash₁
(λ { (a' , h₂) → rec₁ squash₁
二つの一時的な端点を開いた後、対を整列する議論が a,b での切り詰められた比較を与え、strict がその特定の比較から必要な証人を復元する。この合成によって逆方向の読みが得られるが、三分性で正当化された比較の証人を除き、存在に関する切り詰めの境界はすべて保たれる。
(λ { (b' , (q , hr)) → atPair o a' b' q hr }) h₂ }) h₁
クラスを実現する任意の集合を二つの形で読む
有用な表現補題は、再帰が最後に構成する関係だけでなく、Related α を実現する任意の r について述べられる。これにより、小さい段階の表にすでに記録された関係の値を直ちに読める。順序数性の証明 oα を固定すると、Lset α の各要素は構成可能であり、モデルの要素としてまとめられる。
module _ (α : V ℓ) (oα : IsOrd α) (r : S) (hr : IsRel α r) where
private
memL : Mem (Lset α) → S
memL c = c .fst , Lset→isL α oα (c .fst) (c .snd)
まとめられた端点からモデル内部で作る順序対と、その底の集合からホスト側で作る Kuratowski 対は命題的に等しいが、定義的に同じものとは扱わない。この等しさに「r に属する」を作用させると、最初の輸送の橋が得られる。
atRel : (a b : Mem (Lset α))
→ ((prʟ (memL a) (memL b)) .fst ∈ r .fst)
≡ (pr (a .fst) (b .fst) ∈ r .fst)
atRel a b = cong (λ x → x ∈ r .fst) (prʟ-fst (memL a) (memL b))
同じ対の等しさに Related α を作用させると、意味論の側のもう一つの橋が得られる。二つの橋を合わせることで、内部の順序対に実現の証明を使い、その結果を底の集合の素の対について述べ直せる。逆向きにも同様である。
atRelated : (a b : Mem (Lset α))
→ ⟨ Related α ((prʟ (memL a) (memL b)) .fst) ⟩
≡ ⟨ Related α (pr (a .fst) (b .fst)) ⟩
atRelated a b = cong (λ x → ⟨ Related α x ⟩) (prʟ-fst (memL a) (memL b))
埋める向きは、二つの要素のホスト側の比較から始まる。Related の順方向の読みがそれを符号化された対の関係へ変え、実現の証明が関係を r への所属へ変え、対の橋が主張をホスト側の対へ戻す。したがって、orderAt で比較されるすべての対は、任意の実現集合に属する。
rel-fill : (a b : Mem (Lset α)) → relOf (orderAt α oα) a b
→ ⟨ pr (a .fst) (b .fst) ∈ r .fst ⟩
rel-fill a b h = subst ⟨_⟩ (atRel a b)
(hr (prʟ (memL a) (memL b)) .snd
(transport (sym (atRelated a b)) (related-in α oα a b h)))
読む向きは同じ経路を逆にたどる。ホスト側の対の所属を内部の対の所属へ輸送し、実現の証明を外向きに読んで Related の事実を得て、固定されたホスト側の対へ戻す。最後に related-out が、切り詰められていない段階順序の比較を返す。
rel-rep : (a b : Mem (Lset α))
→ ⟨ pr (a .fst) (b .fst) ∈ r .fst ⟩ → relOf (orderAt α oα) a b
rel-rep a b h = related-out α oα a b
(transport (atRelated a b)
(hr (prʟ (memL a) (memL b)) .fst (subst ⟨_⟩ (sym (atRel a b)) h)))
後の議論には、依存的な要素の対ではなく、小さな提示 ⟪ Lset α ⟫ を用いるものがある。その提示の添字は底の集合へ埋め込まれ、Mem (Lset α) の要素を作るために必要な所属の証明を備えている。
private
atIx : ⟪ Lset α ⟫ → Mem (Lset α)
atIx m = ⟪ Lset α ⟫↪ m , memOf (Lset α) m
この提示に沿って orderAt を運ぶと、小さな添字型上の狭義順序が得られる。これは埋め込みを通して見た同じ比較なので、対応する表現定理に新たな順序論の議論は必要ない。
open SWO (carry (Lset α) (orderAt α oα)) using () renaming ( _<∙_ to _≺ᶜ_ )
提示の添字 u,v について、運ばれた比較は、まず対応する段階要素の比較として読まれる。先の埋める定理が、埋め込まれた端点の Kuratowski 対を r に入れる。これが、比較から所属へ向かう小さい添字での形である。
ixRel-fill : (u v : ⟪ Lset α ⟫) → u ≺ᶜ v
→ ⟨ pr (⟪ Lset α ⟫↪ u) (⟪ Lset α ⟫↪ v) ∈ r .fst ⟩
ixRel-fill u v = rel-fill (atIx u) (atIx v)
逆に、埋め込まれた端点の対が r に属するなら、先の定理によって対応する段階要素の比較として読める。運ばれた順序の定義から、これは小さな提示における u と v の狭義比較そのものである。
ixRel-rep : (u v : ⟪ Lset α ⟫)
→ ⟨ pr (⟪ Lset α ⟫↪ u) (⟪ Lset α ⟫↪ v) ∈ r .fst ⟩ → u ≺ᶜ v
ixRel-rep u v = rel-rep (atIx u) (atIx v)
表が記録するもの
最初の表の条件は、記録された値の健全性である。添字 c が B より下にあり、符号化された項目 (c,r) が h に属するなら、r は Related c を実現しなければならない。この条件は第一成分が B の外にある項目について何も述べないので、それだけでは表の定義域を特徴づけられない。
Values : S → V ℓ → Type (ℓ-suc ℓ)
Values h B = (c r : S) → ⟨ c .fst ∈ B ⟩
→ ⟨ pr (c .fst) (r .fst) ∈ h .fst ⟩ → IsRel (c .fst) r
第二の条件は、上界より下で全域であることである。各 c ∈ B には記録された値 r が何か存在するが、その存在には命題的切り詰めが施されている。したがって Entries は命題的なステップの議論に必要な情報だけを与え、各添字で一つの値を選ぶ大域的な関数は与えない。
Entries : S → V ℓ → Type (ℓ-suc ℓ)
Entries h B = (c : S) → ⟨ c .fst ∈ B ⟩
→ ∥ (Σ[ r ∶ S ] ⟨ pr (c .fst) (r .fst) ∈ h .fst ⟩) ∥₁
第三の条件は上界の外の項目を排除する。h に属するすべての符号化された対の第一成分が B に属する。これを Entries と合わせると、完成した表から近似を組み立て直すために必要な正確な定義域が得られる。記録された値の健全性を順方向に示す証明には最初の二条件だけが必要なので、Domain は分けておく。
Domain : S → V ℓ → Type (ℓ-suc ℓ)
Domain h B = (c r : S) → ⟨ pr (c .fst) (r .fst) ∈ h .fst ⟩ → ⟨ c .fst ∈ B ⟩
ステップをパラメータとする
再帰的な構成はここで、同じ意味をもつ二つの論理式を仮定する。Cond b f は、近似の表がグラフの内部で束縛されるときに用いる変数スロットの形である。Cond₀ B F は、固定された順序数と完成した表を分出のパラメータにするときに用いる定数の形である。最初の妥当性の等式は、順序数性と Values、Entries を仮定し、調べる各対象について変数形式の充足を対応する Related と同一視する。
module Described
(Cond : ∀ {n} → Fin n → Fin n → Formula S (suc n))
(Cond₀ : S → S → Formula S 1)
(cond-spec : ∀ {n} (b f : Fin n) (γ : Vec S n) → IsOrd ((lookup b γ) .fst)
→ Values (lookup f γ) ((lookup b γ) .fst)
→ Entries (lookup f γ) ((lookup b γ) .fst)
→ (z : S)
→ ((z ∷ γ) ⊨ Cond b f) ≡ Related ((lookup b γ) .fst) (z .fst))
(cond₀-spec : (b f : S) → IsOrd (b .fst)
→ Values f (b .fst) → Entries f (b .fst)
→ (z : S) → ((z ∷ []) ⊨ Cond₀ b f) ≡ Related (b .fst) (z .fst))
where
変数形式の仮定は点ごとであり、実際に双方向である。論理式を満たす符号化対象を関係する対として読む向きと、関係することから充足を構成する向きの両方を含む。必要なのは、順序数より下の項目の正しさと、命題的切り詰めのもとの存在だけである。ここでは正確な定義域を仮定しないので、上界の外にありうる項目はこの意味論的な同一視に関与しない。
順序数と表が固定されたモデル要素になった後、定数形式の等式が同じ点ごとの同値を与える。分出で用いる定義論理式は、関係の要素の候補のために一つだけ自由スロットを残すので、この第二の提示が必要である。この等式は二つの文脈の意味を同一視するが、Cond と Cond₀ が構文的に等しいとは主張しない。
変数形式の条件を与えると、StepAt v b f は候補の値を外延的に指定する。ある対象がスロット v の値に属することと、Cond b f を満たすことがちょうど一致する。これは双方向の所属仕様であり、存在定理ではない。この仕様を実現する実際の集合は、後の再帰で置換と分出を用いて作られる。
StepAt : ∀ {n} → Fin n → Fin n → Fin n → Formula S n
StepAt v b f = extAt v (Cond b f)
候補の値、順序数の添字、小さい段階の表の三つのスロットを固定し、順序数性、値の健全性、命題的切り詰めのもとの項目の存在を満たす環境を与える。これらの仮定のもとで、妥当性の等式は条件に共通の点ごとの意味を与える。続く二つの読みはこれを逆向きに用いる。外延的なステップ仕様から候補の値についての IsRel の証明を得る向きと、すでにある IsRel の証明からその仕様を満たす向きである。後の章で具体的な実例が与えられるまでは、構成全体がこの仮定されたステップ記述に相対したままである。
module _ {n : ℕ} (v b f : Fin n) (γ : Vec S n)
(ob : IsOrd ((lookup b γ) .fst))
(vals : Values (lookup f γ) ((lookup b γ) .fst))
(ents : Entries (lookup f γ) ((lookup b γ) .fst)) where
private
順序数の上界、正しい表、各小さい引数での要素を固定すると、条件の変数形式には正確な数学的意味が与えられる。ある集合がこの条件を満たすことと、その段階の順序が関係づける順序対の一つであることは同値である。この同値が、対象言語の一段階とホスト側の関係を結ぶ意味論的な橋になる。
same : (z : S) → ((z ∷ γ) ⊨ Cond b f) ≡ Related ((lookup b γ) .fst) (z .fst)
same = cond-spec b f γ ob vals ents
候補の値が外延的な一段階を満たすとする。その値への所属から条件が従い、さらに関係づけられていることが従う。逆に、関係づけられていることから条件が従い、そこから所属が従う。この二つの含意を合わせると、候補が選んだ順序数での関係を実現することになる。
step-rel : ⟨ γ ⊨ StepAt v b f ⟩ → IsRel ((lookup b γ) .fst) (lookup v γ)
step-rel h z =
(λ hz → subst ⟨_⟩ (same z) (extAt-out v (Cond b f) γ h z hz))
, (λ hz → extAt-in v (Cond b f) γ h z (subst ⟨_⟩ (sym (same z)) hz))
同じ議論は逆向きにも使える。ある集合がすでに段階の関係を実現していれば、その二つの所属に関する含意を意味論的同値に沿って運び、外延的な一段階を証明できる。したがって、順序数と表についての仮定がそろえば、一段階の論理式と関係の実現は同じ情報を表す。
step-table : IsRel ((lookup b γ) .fst) (lookup v γ) → ⟨ γ ⊨ StepAt v b f ⟩
step-table sp = extAt-in-both v (Cond b f) γ
(λ z hz → subst ⟨_⟩ (sym (same z)) (sp z .fst hz))
(λ z h → sp z .snd (subst ⟨_⟩ (same z) h))
近似とグラフ
ここで一般の再帰の形をこの一段階に特殊化する。近似とは、指定された定義域をもち、記録した各要素で一段階の条件を満たす集合符号化された表である。グラフは、そのような近似が現在の引数での値を支えることを述べ、順序対を値とするグラフは引数とその値を一緒に記録する。導入規則と除去規則を使えば、命題的切り詰めの存在から証人を選ぶことなく、以後はこの意味に沿って議論できる。
module A = RecShape StepAt
open A using ( ApproxAt; GraphAt; ApproxAt-dom; ApproxAt-value; ApproxAt-step
; ApproxAt-in; GraphOf; Graph-in; Graph-out
; PairGraphAt; PairOf; PairGraph-in; PairGraph-out )
近似が記録するすべての値
近似が正しい値だけを記録することを示すため、その表と定義域を固定し、引数の候補 u を考える。帰納に用いる性質は、u が構成可能な順序数なら、記録された各対 (u,r) の値 r が u での関係を実現する、というものである。記録されたすべての値を対象にするため、単値性を仮定していない。
module _ {n : ℕ} (f a : Fin n) (γ : Vec S n) where
private
Value : V ℓ → Type (ℓ-suc ℓ)
Value u = ⟨ isL u ⟩ → IsOrd u → (r : S)
→ ⟨ pr u (r .fst) ∈ (lookup f γ) .fst ⟩ → IsRel u r
記録された引数 c の基礎の集合について、所属に沿う帰納を行う。この原理は命題だけでなく任意の依存型族に対する再帰原理なので、先ほどの Type 値の性質にも適用できる。近似の定義域には別に順序数性を仮定し、記録された一つの引数より下の要素が同じ定義域にとどまることを保証する。
approx-val : ⟨ γ ⊨ ApproxAt f a ⟩ → IsOrd ((lookup a γ) .fst)
→ (c : S) → IsOrd (c .fst) → (r : S)
→ ⟨ pr (c .fst) (r .fst) ∈ (lookup f γ) .fst ⟩ → IsRel (c .fst) r
approx-val h oa c = ∈-induction {P = Value} go (c .fst) (c .snd)
where
帰納の一段階で、r を u に記録された値とする。近似自身が、この要素は同じ表から計算される再帰の一段階を満たすと述べている。この一段階を u での関係の実現として読むには、u より下に制限した表の正しさと完全性が必要である。この二つを、帰納仮定と定義域の情報がそれぞれ与える。
go : (u : V ℓ) → ((t : V ℓ) → ⟨ t ∈ u ⟩ → Value t) → Value u
go u IH hu ou r p = step-rel zero (suc zero) (sh2 f) (r ∷ d ∷ γ) ou vals ents
(ApproxAt-step f a γ h d r p)
where
d : S
引数 u をその構成可能性の証明と組にすると、モデルの要素として扱える。(u,r) が記録されているので、近似の正確な定義域の節から、u が近似の順序数領域に属することが分かる。ここで、一つの表要素についての事実が、より小さい再帰呼出しすべてに必要な上界へ変わる。
d = u , hu
u∈a : ⟨ u ∈ (lookup a γ) .fst ⟩
u∈a = ApproxAt-dom f a γ h d r p
vals : Values (lookup f γ) u
vals e t e∈ q =
e∈u を満たす要素 (e,t) については、帰納仮定が t は e での関係を実現すると示す。また、順序数の要素であることから e も順序数である。完全性は別の仕方で得られる。近似の順序数領域の推移性により、e∈u と u が領域に属することから e も領域に属し、近似がそこで何らかの値の存在を命題的切り詰めのもとで与える。これで u での再帰の一段階に必要な前提がすべてそろう。同じ引数に二つの値が記録されていれば、どちらも同じクラスを実現するので後に外延的一意性から同一視できるが、ここでは別の名前をもつ一意性補題は導入しない。
IH (e .fst) e∈ (e .snd) (mem-ord {A = u} ou (e .fst) e∈) t q
ents : Entries (lookup f γ) u
ents e e∈ = ApproxAt-value f a γ h e (oa .fst {x = u} {y = e .fst} e∈ u∈a)
グラフが決定する値
グラフの主張が含む、それを支える近似の証人は命題的切り詰めの中にある。しかし、求める結論である「表示された値が順序数の引数での関係を実現する」は命題である。したがって、その結論へ切り詰めを除去できる。ここで得られるのはグラフの値の正しさであり、一意性にはさらに二つの実現集合を外延性で比較する必要がある。
module _ {n : ℕ} (w b : Fin n) (γ : Vec S n) where
graph-only : ⟨ γ ⊨ GraphAt w b ⟩ → IsOrd ((lookup b γ) .fst)
→ IsRel ((lookup b γ) .fst) (lookup w γ)
graph-only h ob = rec₁ ((Realizes ((lookup b γ) .fst) (lookup w γ)) .snd)
read (Graph-out w b γ h)
この命題の目標の中でグラフの証人を開くと、近似 f と上界での外側の一段階が得られる。f が上界より下の各引数で正しい値と要素をもつと分かれば、その一段階を関係の実現として読める。この二つの事実は新たに仮定するのではなく、近似から取り出す。
where
read : GraphOf w b γ → IsRel ((lookup b γ) .fst) (lookup w γ)
read (f , (ha , hs)) = step-rel (suc w) (suc b) zero (f ∷ γ) ob vals ents hs
where
vals : Values f ((lookup b γ) .fst)
f が記録する各値の正しさは、直前の所属に沿う帰納の結果を順序数の上界の各要素に適用して得る。その要素が順序数であることは mem-ord が保証する。上界より下での完全性は、近似の正確な定義域の仕様にある値の存在の向きである。したがって、外側の一段階から求める実現が得られる。
vals c r c∈ p = approx-val zero (suc b) (f ∷ γ) ha ob c
(mem-ord {A = (lookup b γ) .fst} ob (c .fst) c∈) r p
ents : Entries f ((lookup b γ) .fst)
ents = ApproxAt-value zero (suc b) (f ∷ γ) ha
逆向きには、順序数の上界上で正しく、その下の各点に要素をもち、第一成分が上界の外にある対を記録しない表 h から始める。候補となる現在の値が上界での関係を実現するなら、これらの資料で h をグラフが隠している近似として示し、グラフの外側の一段階も検証できる。
graph-table : (h : S) → IsOrd ((lookup b γ) .fst)
→ Values h ((lookup b γ) .fst) → Entries h ((lookup b γ) .fst)
→ Domain h ((lookup b γ) .fst)
→ IsRel ((lookup b γ) .fst) (lookup w γ) → ⟨ γ ⊨ GraphAt w b ⟩
graph-table h ob vals ents dom sp = Graph-in w b γ h approx
外側の一段階は、実現の仮定を逆向きの意味論的な橋に通せば直ちに得られる。残るのは近似である。その定義域は正確でなければならず、ある第一成分が表の何らかの要素に現れることと、その第一成分が上界より下にあることが同値である必要がある。二つの向きは異なる表の仮定を使うため、正しさ、完全性、有界性は混同されない。
(step-table (suc w) (suc b) zero (h ∷ γ) ob vals ents sp)
where
onDom : (c : S)
→ (⟨ ∃[ r ∶ S ] pr (c .fst) (r .fst) ∈ h .fst ⟩
→ ⟨ c .fst ∈ (lookup b γ) .fst ⟩)
何らかの値が c に記録されているとき、その値の証人は命題的切り詰めの中にある。結論である「c が上界に属する」は命題なので、そこへ切り詰めを除去し、有界性から結論を得られる。逆に、完全性は上界内の各 c に、単に存在する記録値を与える。二つの向きを合わせると、近似が必要とする正確な定義域になる。
× (⟨ c .fst ∈ (lookup b γ) .fst ⟩
→ ⟨ ∃[ r ∶ S ] pr (c .fst) (r .fst) ∈ h .fst ⟩)
onDom c = (λ hr → rec₁ ((c .fst ∈ (lookup b γ) .fst) .snd)
(λ { (r , p) → dom c r p }) hr)
, ents c
近似の第二の節は、記録された各対 (c,r) で再帰の一段階を検査する。同じ表 h を使うが、c より下に関係する情報だけを使う。したがって、既存の各要素を局所的に見て、c が順序数であること、その下の記録値がすべて正しいこと、さらに各小さい引数に要素があることを示す。
onStep : (c r : S) → ⟨ pr (c .fst) (r .fst) ∈ h .fst ⟩
→ ⟨ (r ∷ c ∷ h ∷ γ) ⊨ StepAt zero (suc zero) (suc (suc zero)) ⟩
onStep c r p = step-table zero (suc zero) (suc (suc zero)) (r ∷ c ∷ h ∷ γ)
oc vals' ents' (vals c r c∈ p)
where
まず有界性から、記録された対の第一成分 c が周囲の上界より下にあることが分かる。その上界は順序数なので、c も順序数である。これで正しさの仮定を c より下に制限できる。要素 (e,t) が実際に記録されていれば、有界性が e を周囲の上界に置くため、もとの正しさを適用できる。
c∈ : ⟨ c .fst ∈ (lookup b γ) .fst ⟩
c∈ = dom c r p
oc : IsOrd (c .fst)
oc = mem-ord {A = (lookup b γ) .fst} ob (c .fst) c∈
vals' : Values h (c .fst)
局所的な正しさと局所的な完全性の由来は対称ではない。正しさには要素が記録されているという事実だけで十分であり、有界性から周囲の領域への所属を回収できる。完全性は e∈c から始まり、周囲の順序数の推移性と c が上界より下にあることから e も上界より下にあると示し、もとの完全性から e での要素を得る。
vals' e t _ q = vals e t (dom e t q) q
ents' : Entries h (c .fst)
ents' e e∈ = ents e (ob .fst {x = c .fst} {y = e .fst} e∈ c∈)
正確な定義域の同値と各要素での局所的な一段階は、近似をなす二つの連言である。これらをまとめると、h はグラフに隠された近似の証人になる。すでに確かめた外側の一段階と合わせて、正しく完全で有界な表からグラフの主張への向きが完成する。
approx : ⟨ (h ∷ γ) ⊨ ApproxAt zero (suc b) ⟩
approx = ApproxAt-in zero (suc b) (h ∷ γ)
(domAt-intro zero (suc b) (h ∷ γ) onDom) onStep
順序対を値とするグラフ
置換公理は、完全な表の項目を値とするグラフに作用する。そこで PairGraphAt は、表示された値が現在の添字とある関係集合との Kuratowski 対であり、その関係集合がその添字で GraphAt を満たすことを述べる。二つの読みは、関係集合の証人を命題的切り詰めの内側に保つ。これが、関係集合を値とする再帰と、添字つきの項目からなる置換の像との橋になる。
表と上界における関係
クラス Recorded B は、B より下の表がもつべき要素を記述する。ある対象がこのクラスに属するとは、モデル要素 c と r が命題的切り詰めのもとで存在し、c が B に属し、r が c での関係を実現し、その対象が二つの基礎の集合の順序対に等しいことである。定義そのものは B が順序数であることを要求せず、このクラスを順序数の上界で使うときに順序数性が働く。
Recorded : V ℓ → V ℓ → hProp (ℓ-suc ℓ)
Recorded B z = ∃[ c ∶ S ] (c .fst ∈ B) ⊓ (∃[ r ∶ S ]
((z ≡ pr (c .fst) (r .fst)) , setIsSet z (pr (c .fst) (r .fst)))
⊓ Realizes (c .fst) r)
モデルの集合が B の表であるとは、その集合への所属が各点で Recorded B への所属と同値であることである。二つの向きがともに必要である。一方は無関係な対象や領域外の対象を排除し、他方は c∈B かつ r が c での関係を実現する各対 (c,r) を含める。したがって IsTable は、正しい要素についての閉性だけでなく正確な表現を述べる。
IsTable : V ℓ → S → Type (ℓ-suc (ℓ-suc ℓ))
IsTable B h = (z : S) → (z .fst ∈ h .fst) ≡ Recorded B (z .fst)
α での再帰データは、モデル内の二つの集合を含む。一つは α より下の正しい要素すべてを正確に表す表であり、もう一つは α 自身での関係を実現する集合である。より大きい引数を扱うとき、第一成分は近似を検査するための既存の表を与え、第二成分は後の表に記録する関係の値を与える。この束は所属に沿う再帰が返すデータである。その型が命題であるという証明はなく、また必要でもない。所属に沿う帰納は任意の Type 値の族を受け取るからである。
Bundle : V ℓ → Type (ℓ-suc (ℓ-suc ℓ))
Bundle α = Σ[ h ∶ S ] Σ[ r ∶ S ] (IsTable α h × IsRel α r)
上界 B に対する正確な表 h を固定する。その仕様を具体的な要素に使うには、モデル要素の内部の順序対と、それらの基礎の集合からなるホスト側の Kuratowski 対をそろえる必要がある。内部対の射影則に沿って表の所属同値を運ぶと、基礎の順序対 (c,r) で使える形になる。
module _ (B : V ℓ) (oB : IsOrd B) (h : S) (sp : IsTable B h) where
private
atPair : (c r : S)
→ (pr (c .fst) (r .fst) ∈ h .fst) ≡ Recorded B (pr (c .fst) (r .fst))
atPair c r = subst (λ x → (x ∈ h .fst) ≡ Recorded B x) (prʟ-fst c r)
正確な表の仕様を内部の順序対に適用し、その同値を先ほどの射影則を通して読む。周囲の読みでは B を順序数として固定しているが、この同定そのものが使うのは表の仕様と順序対の表現だけであり、追加の順序数論的議論はない。
(sp (prʟ c r))
これで実際の表要素 (c,r) を二つの面から同時に読める。正確性から記録された形への分解が得られ、そこから定義域の事実 c∈B と、値の正しさである「r が c での関係を実現する」を回収する。この読みを各要素に適用すると、Domain h B と Values h B が得られる。
table-out : Domain h B × Values h B
table-out = (λ c r p → read c r p .fst) , (λ c r _ p → read c r p .snd)
where
read : (c r : S) → ⟨ pr (c .fst) (r .fst) ∈ h .fst ⟩
→ ⟨ c .fst ∈ B ⟩ × IsRel (c .fst) r
Recorded が与える分解は命題的切り詰めの中にあるため、その除去先は命題でなければならない。ここでの目標は、B への所属と関係の実現との積である。所属も実現も命題であり、その積も命題である。除去を正当化するのはこの局所的な目標であって、束全体についての性質ではない。
read c r p = rec₁ isPropBoth outer (subst ⟨_⟩ (atPair c r) p)
where
isPropBoth : isProp (⟨ c .fst ∈ B ⟩ × IsRel (c .fst) r)
isPropBoth = isProp× ((c .fst ∈ B) .snd) ((Realizes (c .fst) r) .snd)
命題への除去の内側で、記録された分解が別の対 (d,t) を使うとする。Kuratowski 対 (c,r) と (d,t) の等しさから、第一の基礎成分どうしと第二の基礎成分どうしがそれぞれ等しいと分かる。第一の等しさは定義域への所属を運び、第二の等しさは読みたい値と分解に現れた実現値をそろえる。
inner : (d t : S) → ⟨ d .fst ∈ B ⟩
→ (pr (c .fst) (r .fst) ≡ pr (d .fst) (t .fst)) → IsRel (d .fst) t
→ ⟨ c .fst ∈ B ⟩ × IsRel (c .fst) r
inner d t d∈ q hr =
subst (λ x → ⟨ x ∈ B ⟩) (sym (pr-inj q .fst)) d∈
第一成分の等しさに沿って d∈B を c∈B へ運べる。第二の基礎の集合の等しさはモデル要素 r と t の等しさへ持ち上がる。構成可能性の証明は命題であり、追加の選択を含まないからである。添字の等しさと値の等しさに同時に沿って実現を運べば、ちょうど (c,r) での実現が得られる。
, subst2 IsRel (sym (pr-inj q .fst)) (sym rt) hr
where
rt : r ≡ t
rt = Σ≡Prop (λ x → (isL x) .snd) (pr-inj q .snd)
記録された外側の証人は、まず B に属する添字 d と、その実現値についてのさらに切り詰められた証人を与える。最終的に求める二つの事実は命題なので、二層の命題的切り詰めを順に除去できる。先ほどの端点の等しさに関する議論が、最も内側の分解を処理する。
outer : Σ[ d ∶ S ] ( ⟨ d .fst ∈ B ⟩
× ⟨ ∃[ t ∶ S ] ((pr (c .fst) (r .fst) ≡ pr (d .fst) (t .fst))
, setIsSet _ (pr (d .fst) (t .fst))) ⊓ Realizes (d .fst) t ⟩ )
→ ⟨ c .fst ∈ B ⟩ × IsRel (c .fst) r
outer (d , (d∈ , hs)) = rec₁ isPropBoth
実現値の候補 t ごとに、順序対の等しさから証人を c と r について求める事実へ変換できる。結果には t が残らないため、この切り詰めの使用は表から値を選んでいない。与えられた要素が必要な定義域と実現の性質をもつ、という命題だけを証明している。
(λ { (t , (q , hr)) → inner d t d∈ q hr }) hs
表を読む逆向きは直接的である。c∈B と、c での関係を実現するモデル要素 r が与えられれば、対 (c,r) は Recorded が要求する命題的切り詰められた証人をもつ。表の正確性により、そのクラスへの所属を h への所属へ変え、内部対の射影則が二つの表現をそろえる。
table-in : (c r : S) → ⟨ c .fst ∈ B ⟩ → IsRel (c .fst) r
→ ⟨ pr (c .fst) (r .fst) ∈ h .fst ⟩
table-in c r c∈ hr = subst ⟨_⟩ (sym (atPair c r))
∣ c , (c∈ , ∣ r , (refl , hr) ∣₁) ∣₁
順序数 α での関係を分出によって得る前に、関係しうるすべての順序対を含む一つの L の集合が必要である。求める上界は、Related α の各対象を含むモデル集合 D を返す。これは共通の容器にすぎず、無関係な要素を含んでもよいため、この時点では正確性を主張しない。
bound : (α : V ℓ) (oα : IsOrd α)
→ Σ[ D ∶ S ] ((z : S) → ⟨ Related α (z .fst) ⟩ → ⟨ z .fst ∈ D .fst ⟩)
bound α oα = d .fst , confine
where
ixL : ⟪ Lset α ⟫ → S
Lset α の小さい提示は、その全要素に添字を与える。各添字が提示する基礎の集合を、構成可能な段階への所属から得た構成可能性の証明と組にして、モデル要素にする。これにより、提示された各端点について内部の順序対を作れる。
ixL m = ⟪ Lset α ⟫↪ m , Lset→isL α oα (⟪ Lset α ⟫↪ m) (memOf (Lset α) m)
提示の添字の対は小さい添字型をなす。それらに対応する内部順序対の族へ共通領域の原理を適用すると、その族の各要素を含むモデル集合 D が得られる。この原理が与えるのは包含だけであり、正確な像を計算せず、段階の順序に従って対を選別することもない。
d : Σ[ D ∶ S ] ((p : ⟪ Lset α ⟫ × ⟪ Lset α ⟫)
→ ⟨ prʟ (ixL (p .fst)) (ixL (p .snd)) ∈ˢ D ⟩)
d = smallDom (⟪ Lset α ⟫ × ⟪ Lset α ⟫) (λ p → prʟ (ixL (p .fst)) (ixL (p .snd)))
共通の上界は提示の添字だけでなく、Lset α の通常の要素 a,b にも使えなければならない。各要素をそのファイバー添字で表し、対応する内部順序対について上界を使い、提示された対とホスト側の対 pr(a,fst .fst b) との等しさに沿って所属を運ぶ。したがって、段階の任意の二要素からなる順序対は D に属する。
onPair : (a b : Mem (Lset α)) → ⟨ pr (a .fst) (b .fst) ∈ (d .fst) .fst ⟩
onPair a b = subst (λ x → ⟨ x ∈ (d .fst) .fst ⟩)
(prʟ-fst (ixL (fa .fst)) (ixL (fb .fst))
∙ cong₂ pr (fa .snd) (fb .snd))
(d .snd (fa .fst , fb .fst))
a と b の所属証明は、それぞれを小さい提示の要素と同定する。得られるファイバーの等しさが二つの端点をそろえ、順序対を作る操作の合同性がホスト側の二つの対を同定する。内部対の射影則と合わせると、直前の所属の輸送に必要な等しさになる。
where
fa = ∈-asFiber {a = a .fst} {b = Lset α} (a .snd)
fb = ∈-asFiber {a = b .fst} {b = Lset α} (b .snd)
Related α の任意の対象を取る。その定義は、命題的に切り詰められた三重の存在量化を通して、順序数性の証明、Lset α の二要素 a,b、および対象をその順序対と同定する等しさを与える。段階順序の比較そのものも、さらに命題的切り詰めの内側にある。目標である D への所属は命題なので、三つの存在量化の切り詰めを順に除去できる。この粗い上界に必要なのは二つの端点と対の等しさだけであり、切り詰められた比較の事実さえ使わない。
confine : (z : S) → ⟨ Related α (z .fst) ⟩ → ⟨ z .fst ∈ (d .fst) .fst ⟩
confine z = rec₁ ((z .fst ∈ (d .fst) .fst) .snd)
(λ { (_ , h₁) → rec₁ ((z .fst ∈ (d .fst) .fst) .snd)
(λ { (a , h₂) → rec₁ ((z .fst ∈ (d .fst) .fst) .snd)
(λ { (b , (q , _)) →
回収した二つの端点からなる順序対は、先の結果によりすでに D に属する。回収した対の等しさの逆向きにこの所属を運ぶと、もとの対象が D に属すると分かる。証人は命題の証明の内部にとどまるため、この上界は各対象の端点を選んでいない。
subst (λ x → ⟨ x ∈ (d .fst) .fst ⟩) (sym q) (onPair a b) }) h₂ }) h₁ })
表と現在の関係を、所属に沿う再帰で同時に構成する。実際の入力範囲は構成可能な順序数であり、α には L に属することの証明と順序数性の証明の両方が伴う。再帰の値は先ほどの束であり、後ではその仕様を通して使うよう定義を閉じている。この再帰は Type 値の族に適用でき、Bundle α が命題であることには依存しない。
opaque
tableAt : (α : V ℓ) → ⟨ isL α ⟩ → IsOrd α → Bundle α
tableAt = ∈-induction {P = λ α → ⟨ isL α ⟩ → IsOrd α → Bundle α}
(build (PairGraphAt zero (suc zero)) refl)
where
α での帰納の一段階では、α の各要素 δ について、その構成可能性と順序数性が与えられれば対応する束がある、と再帰的に仮定する。ここでの課題は、α より下の表と α での関係を作ることである。順序対を値とするグラフの論理式を、意図した論理式との等しさとともに明示的な引数として保つ。これは数学的仮定を増やさず、置換の議論がまさにそのグラフを使うことを保証する。
build : (φ : Formula S 2) → φ ≡ PairGraphAt zero (suc zero)
→ (α : V ℓ)
→ ((δ : V ℓ) → ⟨ δ ∈ α ⟩ → ⟨ isL δ ⟩ → IsOrd δ → Bundle δ)
→ ⟨ isL α ⟩ → IsOrd α → Bundle α
build φ qφ α IH hα oα = rep .fst .fst , (sep .fst .fst , (spec , rspec))
順序数 α とその構成可能性の証明を組にして、モデル要素 A を作る。これは順序対を値とするグラフを考える内部の定義域である。その要素は、順序数性を示せば所属に沿う再帰仮定を適用できる、より小さい集合にちょうど当たる。
where
A : S
A = α , hα
順序数 α の各要素 c はそれ自身も順序数である。この継承された順序数性は不可欠である。再帰的構成の定義域は任意の構成可能な要素ではなく、構成可能な順序数だからである。この順序数性の証明を得る際に命題的切り詰めは使わない。
ordOf : (c : S) → ⟨ c .fst ∈ α ⟩ → IsOrd (c .fst)
ordOf c c∈ = mem-ord {A = α} oα (c .fst) c∈
c∈α のとき、モデル要素 c はすでに構成可能性の証明をもち、順序数の要素であることから順序数性も得られる。これは帰納仮定を適用するために必要な入力そのものである。結果として、c より下の正確な表と c での関係の実現集合をともに含む、c での完全な束が得られる。
bun : (c : S) → ⟨ c .fst ∈ α ⟩ → Bundle (c .fst)
bun c c∈ = IH (c .fst) c∈ (c .snd) (ordOf c c∈)
c での再帰的な束から、現在の関係の成分を取り出し、c での値とする。これは具体的なモデル要素であり、表の命題的切り詰められた Entries から取り出した証人ではない。定義域内の各構成可能な順序数での関係をその下の表と一緒に再帰が運ぶのは、この具体的な値を利用するためである。
value : (c : S) → ⟨ c .fst ∈ α ⟩ → S
value c c∈ = bun c c∈ .snd .fst
その成分とともに保存された仕様は、選んだ値が Related c を実現すると述べる。これは帰納仮定が与える意味論的な正しさそのものである。この事実だけでは、その値が順序対を値とするグラフを満たすことも、c との対が完成した表に属することも主張できない。
relOK : (c : S) (c∈ : ⟨ c .fst ∈ α ⟩) → IsRel (c .fst) (value c c∈)
relOK c c∈ = bun c c∈ .snd .snd .snd
底の順序数が α に属する各 c について、帰納法の仮定はすでに c における関係集合を与えている。置換公理では、どの添字がその関係を生んだかを残す必要があるため、候補となる値は関係集合だけではなく、c とその関係集合との内部順序対である。
entry : (c : S) → ⟨ c .fst ∈ α ⟩ → S
entry c c∈ = prʟ c (value c c∈)
次に、この候補が置換公理で用いるグラフ上にあることを示す。順序対を作る前に、選んだ関係集合が c における再帰グラフを満たさなければならない。c における束は、その下の表とそこで実現された関係をともに与える。また、順序数 α に c が属することから c 自身も順序数なので、表からグラフを得る一般の議論を適用できる。
below : (c : S) (c∈ : ⟨ c .fst ∈ α ⟩) (k : S)
→ ⟨ (value c c∈ ∷ k ∷ c ∷ []) ⊨ GraphAt zero (suc (suc zero)) ⟩
below c c∈ k = graph-table zero (suc (suc zero))
(value c c∈ ∷ k ∷ c ∷ []) (bun c c∈ .fst) (ordOf c c∈)
(reads .snd) ents (reads .fst) (relOK c c∈)
下方の表の正確な仕様から、この議論に必要な三つの事実のうち二つが得られる。c より下で記録された各値は対応する関係を実現し、添字が c の外にある順序対は記録されない。残るのは完全性、すなわち c の各要素に何らかの記録値があることである。
where
reads : Domain (bun c c∈ .fst) (c .fst) × Values (bun c c∈ .fst) (c .fst)
reads = table-out (c .fst) (ordOf c c∈) (bun c c∈ .fst)
(bun c c∈ .snd .snd .fst)
ents : Entries (bun c c∈ .fst) (c .fst)
e が c の要素なら、周囲の順序数の推移性により e ∈ c ∈ α から e ∈ α が従う。したがって帰納法の仮定は e における実現関係を与え、c における表の正確な仕様は、e とその関係との順序対を下方の表へ入れる。この証人は、表の完全性が要求するとおり、命題的切り詰めの中で返される。
ents e e∈ = ∣ value e e∈' , table-in (c .fst) (ordOf c c∈) (bun c c∈ .fst)
(bun c c∈ .snd .snd .fst) e (value e e∈') e∈ (relOK e e∈') ∣₁
where
e∈' : ⟨ e .fst ∈ α ⟩
e∈' = oα .fst {x = c .fst} {y = e .fst} e∈ c∈
これで、関係値についての再帰グラフの証明と、内部順序対の標準的な同一視とを組み合わせられる。その結果、候補の項目は c において順序対グラフの論理式を満たし、α より下の各添字について関数性の存在側が得られる。
holds : (c : S) (c∈ : ⟨ c .fst ∈ α ⟩) → ⟨ (entry c c∈ ∷ c ∷ []) ⊨ φ ⟩
holds c c∈ = PairGraph-in zero (suc zero) (entry c c∈ ∷ c ∷ []) φ qφ
(value c c∈) (prʟ-fst c (value c c∈)) (below c c∈ (entry c c∈))
関数性には、順序対全体としての値の一意性も必要である。別の k が c において順序対グラフを満たすなら、その論理式を読むことで、命題的切り詰めの中に、関係集合 r、k の底の集合と順序対 (c,r) との同一視、そして r のグラフの証明が得られる。構成可能な台における等しさは命題なので、この切り詰められた情報を求める等しさへ消去できる。
only : (c : S) (c∈ : ⟨ c .fst ∈ α ⟩) (k : S)
→ ⟨ (k ∷ c ∷ []) ⊨ φ ⟩ → k ≡ entry c c∈
only c c∈ k h = rec₁ (isSetS k (entry c c∈)) read
(PairGraph-out zero (suc zero) (k ∷ c ∷ []) φ qφ h)
where
グラフの証明は、r が c における関係クラスを実現することを述べる。一方、帰納法の仮定は、c で選ばれた値も同じクラスを実現することを述べる。したがって、実現関係集合の外延的な一意性により、r は選ばれた値と同一視される。一意性を用いるのはグラフの正しさを確立した後であり、下方の表に単値性を仮定しているのではない。
read : PairOf zero (suc zero) (k ∷ c ∷ []) φ qφ → k ≡ entry c c∈
read (r , (q , hg)) = Σ≡Prop (λ x → (isL x) .snd)
( q
∙ cong (pr (c .fst)) (cong (λ p → p .fst) (rel-unique (c .fst) r (value c c∈)
(graph-only zero (suc (suc zero)) (r ∷ k ∷ c ∷ []) hg (ordOf c c∈))
与えられた k と (c,r) との同一視、二つの関係集合の等しさ、そして構成可能な順序対の標準的な射影パスを順に合成すると、k と候補項目の底の集合が同一視される。構成可能性は命題なので、この底での等しさは台における等しさへ持ち上がり、一意性の証明が完了する。
(relOK c c∈)))
∙ sym (prʟ-fst c (value c c∈)) )
各 c ∈ α について、ここまでの存在性と一意性は、グラフの値とその充足証明からなるファイバーの一点を一意に定める。この一意存在の証人は命題的に切り詰められているが、可縮性そのものは命題である。したがって mereFunct は新たな選択を行わずに、この証人を置換公理が要求する可縮なファイバーへ変換する。
fc : (c : S) → ⟨ c ∈ˢ A ⟩
→ isContr (Σ[ k ∶ S ] ⟨ (k ∷ c ∷ []) ⊨ φ ⟩)
fc c c∈ = mereFunct φ c ∣ entry c c∈ , (holds c c∈ , only c c∈) ∣₁
したがって置換公理は、内部の定義域 α 上で順序対グラフの値を集められる。その結論は、構成可能な集合と、その像についての正確な所属仕様とからなる可縮型である。つまり一意に指定された像集合が得られるのであって、その集合の要素が可縮型をなすという主張ではない。
rep : isContr (SetOf (λ z → ∃[ c ∶ S ] (c ∈ˢ A) ⊓ ((z ∷ c ∷ []) ⊨ φ)))
rep = hasReplacementL A φ fc
表 H は、この可縮な置換結果の中心が与える構成可能な集合である。それに伴う所属仕様も引き続き利用でき、H が意図した添字と関係との順序対だけを正確に記録することを次に証明する。
H : S
H = rep .fst .fst
必要な表の仕様は二つの命題の等しさである。一方は H への所属であり、他方は、α より下の添字と、そこでの関係を実現する集合との順序対であることである。この等しさは二つの含意から得る。順方向では置換による所属を読み、逆方向ではそのような記録順序対を置換グラフの値へ戻す。
spec : IsTable α H
spec z = ⇔toPath toRec fromRec
where
toRec : ⟨ z .fst ∈ H .fst ⟩ → ⟨ Recorded α (z .fst) ⟩
toRec hz = rec₁ squash₁
順方向では、置換による所属から、α より下の添字 c と、z がそこで順序対グラフを満たすという証明が、命題的切り詰めの中で得られる。先ほどの一意性により z は c における標準的な項目と同一視され、その関係成分はすでに c でのクラスを実現すると分かっている。これらから必要な記録順序対の証人が得られ、命題的切り詰めの境界も保たれる。
(λ { (c , (c∈ , hp)) → ∣ c , (c∈ , ∣ value c c∈
, ( cong (λ p → p .fst) (only c c∈ z hp) ∙ prʟ-fst c (value c c∈)
, relOK c c∈ ) ∣₁) ∣₁ })
(subst ⟨_⟩ (rep .fst .snd z) hz)
逆向きの含意では、記録順序対の証人に含まれる関係集合 r は、c における関係クラスを実現する任意の集合でよく、先に再帰的に選んだ値とは限らない。標準的な項目についてすでに得た順序対グラフの証明を再利用するため、まず切り詰められた証人を命題である充足の目標へ消去し、次に二つの項目の等しさに沿ってその証明を移す。
fromRec : ⟨ Recorded α (z .fst) ⟩ → ⟨ z .fst ∈ H .fst ⟩
fromRec hz = subst ⟨_⟩ (sym (rep .fst .snd z)) (map₁
(λ { (c , (c∈ , hr)) → c , (c∈ , rec₁ (((z ∷ c ∷ []) ⊨ φ) .snd)
(λ { (r , (q , hs)) → subst (λ t → ⟨ (t ∷ c ∷ []) ⊨ φ ⟩)
(sym (Σ≡Prop (λ x → (isL x) .snd)
この移送パスは、記録された証人に伴う z の等しさから始まり、外延的な一意性によって r を標準的な関係値に置き換え、内部順序対の標準的な射影パスで終わる。構成可能性の証明は命題なので、底の集合の等しさから台における等しさが定まる。このパスに沿って移されたグラフの証明により z は置換の像に入り、逆向きの含意が完了する。
(q ∙ cong (pr (c .fst)) (cong (λ p → p .fst)
(rel-unique (c .fst) r (value c c∈) hs (relOK c c∈)))
∙ sym (prʟ-fst c (value c c∈)))))
(holds c c∈) }) hr) }) hz)
ここで表の正確な仕様から、H が α より下で記録するすべての値の正しさが得られる。c ∈ α で順序対 (c,r) が H に属するなら、その仕様を読むことで r が c における関係クラスを実現すると分かる。この段階では新たな帰納法や一意性の議論は不要である。
tvals : Values H α
tvals = table-out α oα H spec .snd
完全性は各点ごとに得られる。各 c ∈ α について、c における再帰値が必要なクラスを実現すると分かっているので、表の仕様は c とその値との順序対を H に入れる。得られる存在命題は命題的に切り詰められており、各添字に項目があることを保証するが、特定の項目を完全性の主張に含めるものではない。
tents : Entries H α
tents c c∈ = ∣ value c c∈
, table-in α oα H spec c (value c c∈) c∈ (relOK c c∈) ∣₁
この表から、α におけるステップ条件の定数形を読むために必要な、値の正しさと完全性が得られた。分出公理は、先に構成した共通の上界の中でその条件を適用する。その結果、上界に属して条件を満たす要素だけを正確にもつ、仕様によって一意な構成可能部分集合が得られる。α における関係の候補は共通の上界そのものではなく、この部分集合である。
sep : isContr (SetOf (λ x → (x ∈ˢ bound α oα .fst)
⊓ ((x ∷ []) ⊨ Cond₀ A H)))
sep = hasSeparationL (bound α oα .fst) (Cond₀ A H)
分出された集合が意図したクラスを実現することを示すため、まずその要素を一つ取る。分出の仕様から、共通の上界への所属と定数条件の充足がともに得られるが、この向きで必要なのは後者だけである。条件の妥当性により、その充足は Related α へ変換され、所属から関係クラスへの含意が得られる。
rspec : IsRel α (sep .fst .fst)
rspec z =
(λ hz → subst ⟨_⟩ (cond₀-spec A H oα tvals tents z)
(subst ⟨_⟩ (sep .fst .snd z) hz .snd))
, (λ hz → subst ⟨_⟩ (sym (sep .fst .snd z))
逆に、Related α を満たす要素は、共通の上界がもつ閉じ込めの性質により、その上界に属する。また、妥当性の逆方向は同じ関係の事実を定数条件の充足へ変換する。この二成分が分出の仕様を満たすので、その要素は分出された集合に入り、両方向の正確な実現が完成する。
( bound α oα .snd z hz
, subst ⟨_⟩ (sym (cond₀-spec A H oα tvals tents z)) hz ))
構成可能性と順序数性の証明をともに備えた段階添字 α について、再帰的な束は下方の表と、いま分出によって得た関係集合とを含む。関係 relL は後者を選ぶ。したがって、その適用範囲は L で用いる構成可能な順序数段階の添字であり、構成可能性の証人を伴わない任意の順序数ではない。
relL : (α : V ℓ) → ⟨ isL α ⟩ → IsOrd α → S
relL α hα oα = tableAt α hα oα .snd .fst
それに伴う仕様も同じ束から得られる。この仕様は、relL への所属がクラス Related α と正確に一致すること、すなわち各要素が関係づけられた順序対を表し、関係づけられた各順序対がそこに属することを述べる。したがって後の議論では、置換と分出の構成を開き直さず、この同値を直接用いられる。
relL-spec : (α : V ℓ) (hα : ⟨ isL α ⟩) (oα : IsOrd α) → IsRel α (relL α hα oα)
relL-spec α hα oα = tableAt α hα oα .snd .snd .snd
要素は順序が関係づける順序対である
Lset α の二要素 a と b について、埋める向きは一般の実現補題を relL に特殊化する。したがって、すでに構成されている狭義整列順序 orderAt α によるホスト側の比較から、二つの底の集合を符号化した順序対が relL に属することが従う。
module _ (α : V ℓ) (hα : ⟨ isL α ⟩) (oα : IsOrd α) where
relL-fill : (a b : Mem (Lset α)) → relOf (orderAt α oα) a b
→ ⟨ pr (a .fst) (b .fst) ∈ (relL α hα oα) .fst ⟩
relL-fill = rel-fill α oα (relL α hα oα) (relL-spec α hα oα)
読む向きは、同じ二つの段階要素について逆を与える。二要素の符号化順序対が relL に属することから、orderAt α におけるホスト側の比較が復元される。二方向を合わせると、後の最小性の議論で用いる関係グラフが各要素対ごとに表現される。ここでは新たな名前の比較を構成せず、このグラフが整列順序であるという対象言語の主張も行わない。
relL-rep : (a b : Mem (Lset α))
→ ⟨ pr (a .fst) (b .fst) ∈ (relL α hα oα) .fst ⟩
→ relOf (orderAt α oα) a b
relL-rep = rel-rep α oα (relL α hα oα) (relL-spec α hα oα)
まとめ
構成可能な順序数の段階の添字 α では、ホスト型理論がすでに Lset α の要素上の狭義整列順序 orderAt α oα を与えている。Ordering はその比較に命題的切り詰めを施して命題値の述語にし、Related は関係する端点の順序対をホスト側で定義されたクラスとしてまとめる。三分性によって strict が比較を復元できるのは、端点が指定されている場合だけである。その後、IsRel、relL-fill、relL-rep が、この比較と実現集合への所属との正確な点ごとの対応を与える。
実現集合は間接的に得られる。近似はその定義域より下の値が単に存在することだけを記録し、所属に沿う帰納は単値性を仮定せず、記録された各値が自身の引数でのクラスを実現することを示す。順序対グラフの繊維を比較するときに初めて、実現集合の外延的な一意性が競合する値を同一視する。mereFunct は得られた命題的切り詰めのもとの一意存在を可縮性へ変え、置換公理が α より下の添字つき項目を集め、分出公理が共通の包含集合から α での関係を切り出す。再帰的な束は完成した下方の表と現在の関係をともに運ぶが、再帰はこの束が命題であることを要求しない。
構成全体は、Described に与えられる二つの妥当な対象言語のステップ形式に相対したままである。後の章が具体的な記述を与え、このパラメータを解消する。ここで relL を利用できるのは、α に isL と IsOrd の証拠がともに備わる場合だけである。これは既存の順序の関係グラフを表現するものであり、新たな名前の比較を完成させることも、そのグラフが整列順序であると対象言語で証明することもない。