この章を読むか、対話型目次と依存グラフで別のルートを選べます。
対話型目次 · 依存グラフ宇宙レベル ℓ を固定する。このレベルをパラメータとして保つことで、異なる宇宙を同一視せずに、必要な大きさで構成を具体化できる。
module L.Coding.Quantification {ℓ : Level} where
本章では、符号化された論理式が共有する有限スロットの道具を整備する。深く入れ子になったスロットに名前を付け、有限論理式族を連言と選言へ畳み込み、符号化された順序対の成分を取り出す有界論理式と、容器の証人を隠す読み補題を与える。
英語原文
Coded syntax repeatedly quantifies over the components of a pair. Building on the coding vocabulary and pair expressions, this chapter develops the shared slot arithmetic, bounded formulas and semantic readers for those quantifiers. The tower specification uses these readers first; code-domain, satisfaction-clause and coded-graph chapters then reuse the same readers. Each can state its mathematics in terms of components without repeating the container witnesses required by bounded syntax.
module E = CodingExpressions.PairExpression
open import Cubical.HITs.CumulativeHierarchy.Base using ( V; _∈_ )
open import Cubical.HITs.CumulativeHierarchy.Constructions
using ( ⁅_,_⁆; ⁅_⁆s; module InfinitySet )
open InfinitySet {ℓ} using ( sucV )
open hPropView 𝒮ʟ using ( S )
module AbsL = FOL.Absoluteness.Single 𝒮ᵥ isL isL-trans using ( _⊨ᵐ_ )
open AbsL using () renaming ( _⊨ᵐ_ to _⊨_ )
スロット添字と基本的な読み
シフト演算と名前の付いた内側のスロットが深く入れ子になった束縛子を整理し、順序対と後者の読み補題が対応する原子論理式を集合の等しさへ戻す。
英語原文
Slot arithmetic. sh k pushes an outer slot past k binders; the names i0 .. i19 are the innermost slots at any arity.
i0 : ∀ {j} → Fin (suc j)
i0 = zero
i1 : ∀ {j} → Fin (2 + j)
i1 = suc i0
i2 : ∀ {j} → Fin (3 + j)
i2 = suc i1
i3 : ∀ {j} → Fin (4 + j)
i3 = suc i2
pr-out : ∀ {m} (q u v : Fin m) (γ : Vec S m) → ⟨ γ ⊨ prAtL q u v ⟩
→ (lookup q γ) .fst ≡ pr ((lookup u γ) .fst) ((lookup v γ) .fst)
pr-out q u v γ h = subst ⟨_⟩ (prAtL-adequate q u v γ) h
pr-in : ∀ {m} (q u v : Fin m) (γ : Vec S m)
→ (lookup q γ) .fst ≡ pr ((lookup u γ) .fst) ((lookup v γ) .fst)
→ ⟨ γ ⊨ prAtL q u v ⟩
pr-in q u v γ e = subst ⟨_⟩ (sym (prAtL-adequate q u v γ)) e
down : (x : S) (y : V ℓ) → ⟨ y ∈ x .fst ⟩ → S
down x y h = y , isL-trans {x = x .fst} {y = y} h (x .snd)
英語原文
The components of a pair held as an element of L, as elements of L.
fstS sndS : (x : S) (u v : V ℓ) → x .fst ≡ pr u v → S
fstS x u v e = down (down x ⁅ u , v ⁆ (subst (λ z → ⟨ ⁅ u , v ⁆ ∈ z ⟩) (sym e) (∈pair-introR {u = ⁅ u ⁆s} {v = ⁅ u , v ⁆} refl))) u (∈pair-introL {u = u} {v = v} refl)
sndS x u v e = down (down x ⁅ u , v ⁆ (subst (λ z → ⟨ ⁅ u , v ⁆ ∈ z ⟩) (sym e) (∈pair-introR {u = ⁅ u ⁆s} {v = ⁅ u , v ⁆} refl))) v (∈pair-introR {u = u} {v = v} refl)
sh : ∀ {m} (k : ℕ) → Fin m → Fin (k + m)
sh 0 i = i
sh (suc k) i = suc (sh k i)
i4 : ∀ {j} → Fin (5 + j)
i4 = suc i3
i5 : ∀ {j} → Fin (6 + j)
i5 = suc i4
i6 : ∀ {j} → Fin (7 + j)
i6 = suc i5
i7 : ∀ {j} → Fin (8 + j)
i7 = suc i6
i8 : ∀ {j} → Fin (9 + j)
i8 = suc i7
i9 : ∀ {j} → Fin (10 + j)
i9 = suc i8
i10 : ∀ {j} → Fin (11 + j)
i10 = suc i9
i11 : ∀ {j} → Fin (12 + j)
i11 = suc i10
i12 : ∀ {j} → Fin (13 + j)
i12 = suc i11
i13 : ∀ {j} → Fin (14 + j)
i13 = suc i12
i14 : ∀ {j} → Fin (15 + j)
i14 = suc i13
i15 : ∀ {j} → Fin (16 + j)
i15 = suc i14
i16 : ∀ {j} → Fin (17 + j)
i16 = suc i15
i17 : ∀ {j} → Fin (18 + j)
i17 = suc i16
i18 : ∀ {j} → Fin (19 + j)
i18 = suc i17
i19 : ∀ {j} → Fin (20 + j)
i19 = suc i18
十個の名前付きスロットと有限結合子の畳み込み
パターン f0 から f9 は構成子族が使う十個の位置を名付け、bigOr と bigAnd は任意の空でない有限論理式族を畳み込む。読み補題は、特定の符号化に依存せず、一つの選言肢を選び、またはすべての連言肢を復元する。
pattern f0 = zero
pattern f1 = suc f0
pattern f2 = suc f1
pattern f3 = suc f2
pattern f4 = suc f3
pattern f5 = suc f4
pattern f6 = suc f5
pattern f7 = suc f6
pattern f8 = suc f7
pattern f9 = suc f8
bigOr bigAnd : ∀ {m} (n : ℕ) → (Fin (suc n) → Formula S m) → Formula S m
bigOr 0 φ = φ zero
bigOr (suc n) φ = φ zero ∨̇ bigOr n (λ k → φ (suc k))
bigAnd 0 φ = φ zero
bigAnd (suc n) φ = φ zero ∧̇ bigAnd n (λ k → φ (suc k))
module _ {m : ℕ} (γ : Vec S m) where
bigOr-in : (n : ℕ) (φ : Fin (suc n) → Formula S m) (k : Fin (suc n))
→ ⟨ γ ⊨ φ k ⟩ → ⟨ γ ⊨ bigOr n φ ⟩
bigOr-in 0 φ zero h = h
bigOr-in (suc n) φ zero h = ∣ inl h ∣₁
bigOr-in (suc n) φ (suc k) h = ∣ inr (bigOr-in n (λ j → φ (suc j)) k h) ∣₁
bigOr-out : (n : ℕ) (φ : Fin (suc n) → Formula S m) → ⟨ γ ⊨ bigOr n φ ⟩
→ ∥ Σ[ k ∶ Fin (suc n) ] ⟨ γ ⊨ φ k ⟩ ∥₁
bigOr-out 0 φ h = ∣ zero , h ∣₁
bigOr-out (suc n) φ = rec₁ squash₁
(λ { (inl h) → ∣ zero , h ∣₁
; (inr h) → map₁ (λ { (k , hk) → suc k , hk }) (bigOr-out n (λ j → φ (suc j)) h) })
bigAnd-in : (n : ℕ) (φ : Fin (suc n) → Formula S m)
→ ((k : Fin (suc n)) → ⟨ γ ⊨ φ k ⟩) → ⟨ γ ⊨ bigAnd n φ ⟩
bigAnd-in 0 φ h = h zero
bigAnd-in (suc n) φ h = h zero , bigAnd-in n (λ j → φ (suc j)) (λ k → h (suc k))
bigAnd-out : (n : ℕ) (φ : Fin (suc n) → Formula S m) → ⟨ γ ⊨ bigAnd n φ ⟩
→ (k : Fin (suc n)) → ⟨ γ ⊨ φ k ⟩
bigAnd-out 0 φ h zero = h
bigAnd-out (suc n) φ h zero = h .fst
bigAnd-out (suc n) φ h (suc k) = bigAnd-out n (λ j → φ (suc j)) (h .snd) k
有界な原子と後者の意味
順序対と後者の原子に Δ₀ の証人を与え、suc-out と suc-in が変数環境での二つの意味論的方向を与える。
英語原文
The atoms and their certificates.
Δ₀-prAtL : ∀ {m} (q u v : Fin m) → Δ₀ (prAtL q u v)
Δ₀-prAtL q u v = Δ₀-liftFo _ (Δ₀-prAt q u v)
Δ₀-sucAtL : ∀ {m} (i j : Fin m) → Δ₀ (sucAtL i j)
Δ₀-sucAtL i j = Δ₀-liftFo _ (Δ₀-sucAt i j)
英語原文
The successor reader, both ways, at a variable environment.
suc-out : ∀ {m} (i j : Fin m) (γ : Vec S m) → ⟨ γ ⊨ sucAtL i j ⟩
→ (lookup j γ) .fst ≡ sucV ((lookup i γ) .fst)
suc-out i j γ h = subst ⟨_⟩ (sucAtL-adequate i j γ) h
suc-in : ∀ {m} (i j : Fin m) (γ : Vec S m)
→ (lookup j γ) .fst ≡ sucV ((lookup i γ) .fst) → ⟨ γ ⊨ sucAtL i j ⟩
suc-in i j γ e = subst ⟨_⟩ (sym (sucAtL-adequate i j γ)) e
順序対の成分に対する有界量化
四つのマクロ sndEx、sndAll、bothEx、bothAll は内部の容器を通して順序対の成分を束縛し、Δ₀ のままの存在形と全称形を与える。
英語原文
The pair as a container. Both components of pr u v lie in the member ⁅ u , v ⁆ of it. This is what lets a Δ₀ formula bind the components of a pair it holds, with no ambient bound at all.
英語原文
The opaque pair container is supplied by L.Coding.Model and shared with its structural pair-expression reader.
英語原文
The destructors. Four macros bind the components of a pair held at a slot: the second component alone (the first is a slot already), or both, each under an existential or a universal. The body sits at v ∷ s ∷ γ, or at v ∷ u ∷ s ∷ γ, with s the container. Every reader is at a variable environment; the container is junk the reader supplies.
sndEx : ∀ {m} → Fin m → Fin m → Formula S (2 + m) → Formula S m
sndEx x u body =
∃̇∈ (var x) (∃̇∈ (var i0) (prAtL (sh 2 x) (sh 2 u) i0 ∧̇ body))
sndAll : ∀ {m} → Fin m → Fin m → Formula S (2 + m) → Formula S m
sndAll x u body =
∀̇∈ (var x) (∀̇∈ (var i0) (prAtL (sh 2 x) (sh 2 u) i0 ⇒̇ body))
bothEx : ∀ {m} → Fin m → Formula S (3 + m) → Formula S m
bothEx x body =
∃̇∈ (var x) (∃̇∈ (var i0) (∃̇∈ (var i1) (prAtL (sh 3 x) i1 i0 ∧̇ body)))
bothAll : ∀ {m} → Fin m → Formula S (3 + m) → Formula S m
bothAll x body =
∀̇∈ (var x) (∀̇∈ (var i0) (∀̇∈ (var i1) (prAtL (sh 3 x) i1 i0 ⇒̇ body)))
Δ₀-sndEx : ∀ {m} (x u : Fin m) (body : Formula S (2 + m)) → Δ₀ body → Δ₀ (sndEx x u body)
Δ₀-sndEx x u body d = δ-∃∈ (δ-∃∈ (δ-∧ (Δ₀-prAtL (sh 2 x) (sh 2 u) i0) d))
Δ₀-sndAll : ∀ {m} (x u : Fin m) (body : Formula S (2 + m)) → Δ₀ body → Δ₀ (sndAll x u body)
Δ₀-sndAll x u body d = δ-∀∈ (δ-∀∈ (δ-⇒ (Δ₀-prAtL (sh 2 x) (sh 2 u) i0) d))
Δ₀-bothAll : ∀ {m} (x : Fin m) (body : Formula S (3 + m)) → Δ₀ body → Δ₀ (bothAll x body)
Δ₀-bothAll x body d = δ-∀∈ (δ-∀∈ (δ-∀∈ (δ-⇒ (Δ₀-prAtL (sh 3 x) i1 i0) d)))
module _ {m : ℕ} (x u : Fin m) (body : Formula S (2 + m)) (γ : Vec S m) where
private
X = (lookup x γ) .fst
U = (lookup u γ) .fst
成分量化子を読む
存在形の out 補題は充足関係から成分データの命題的切り詰めを返し、適切な成分が単に存在することだけを記録する。全称形の読み補題は明示された成分を受け取る。対応する in 補題は明示されたデータから充足関係を再構成し、順序対の単射性で値を確定する。
英語原文
Out: the witness's second component is pinned by pair injectivity.
sndEx-out : ⟨ γ ⊨ sndEx x u body ⟩
→ ∥ Σ[ v ∶ S ] Σ[ s ∶ S ] ((X ≡ pr U (v .fst)) × ⟨ (v ∷ s ∷ γ) ⊨ body ⟩) ∥₁
sndEx-out = rec₁ squash₁ (λ { (s , (s∈ , h)) → map₁
(λ { (v , (v∈ , (e , hb))) → v , s , (pr-out (sh 2 x) (sh 2 u) i0 (v ∷ s ∷ γ) e , hb) })
h })
sndEx-in : (v s : S) → ⟨ s .fst ∈ X ⟩ → ⟨ v .fst ∈ s .fst ⟩ → X ≡ pr U (v .fst)
→ ⟨ (v ∷ s ∷ γ) ⊨ body ⟩ → ⟨ γ ⊨ sndEx x u body ⟩
sndEx-in v s s∈ v∈ e hb = ∣ s , (s∈ , ∣ v , (v∈ , (pr-in (sh 2 x) (sh 2 u) i0 (v ∷ s ∷ γ) e , hb)) ∣₁) ∣₁
sndAll-out : ⟨ γ ⊨ sndAll x u body ⟩
→ (v s : S) → ⟨ s .fst ∈ X ⟩ → ⟨ v .fst ∈ s .fst ⟩ → X ≡ pr U (v .fst)
→ ⟨ (v ∷ s ∷ γ) ⊨ body ⟩
sndAll-out h v s s∈ v∈ e = h s s∈ v v∈ (pr-in (sh 2 x) (sh 2 u) i0 (v ∷ s ∷ γ) e)
sndAll-in : ((v s : S) → ⟨ s .fst ∈ X ⟩ → ⟨ v .fst ∈ s .fst ⟩ → X ≡ pr U (v .fst)
→ ⟨ (v ∷ s ∷ γ) ⊨ body ⟩)
→ ⟨ γ ⊨ sndAll x u body ⟩
sndAll-in k s s∈ v v∈ e = k v s s∈ v∈ (pr-out (sh 2 x) (sh 2 u) i0 (v ∷ s ∷ γ) e)
module _ {m : ℕ} (x : Fin m) (body : Formula S (3 + m)) (γ : Vec S m) where
private
X = (lookup x γ) .fst
bothEx-out : ⟨ γ ⊨ bothEx x body ⟩
→ ∥ Σ[ u ∶ S ] Σ[ v ∶ S ] Σ[ s ∶ S ]
((X ≡ pr (u .fst) (v .fst)) × ⟨ (v ∷ u ∷ s ∷ γ) ⊨ body ⟩) ∥₁
bothEx-out = rec₁ squash₁ (λ { (s , (s∈ , h)) → rec₁ squash₁
(λ { (u , (u∈ , h')) → map₁
(λ { (v , (v∈ , (e , hb))) → u , v , s , (pr-out (sh 3 x) i1 i0 (v ∷ u ∷ s ∷ γ) e , hb) })
h' })
h })
bothEx-in : (u v s : S) → ⟨ s .fst ∈ X ⟩ → ⟨ u .fst ∈ s .fst ⟩ → ⟨ v .fst ∈ s .fst ⟩
→ X ≡ pr (u .fst) (v .fst) → ⟨ (v ∷ u ∷ s ∷ γ) ⊨ body ⟩ → ⟨ γ ⊨ bothEx x body ⟩
bothEx-in u v s s∈ u∈ v∈ e hb =
∣ s , (s∈ , ∣ u , (u∈ , ∣ v , (v∈ , (pr-in (sh 3 x) i1 i0 (v ∷ u ∷ s ∷ γ) e , hb)) ∣₁) ∣₁) ∣₁
bothAll-out : ⟨ γ ⊨ bothAll x body ⟩
→ (u v s : S) → ⟨ s .fst ∈ X ⟩ → ⟨ u .fst ∈ s .fst ⟩ → ⟨ v .fst ∈ s .fst ⟩
→ X ≡ pr (u .fst) (v .fst) → ⟨ (v ∷ u ∷ s ∷ γ) ⊨ body ⟩
bothAll-out h u v s s∈ u∈ v∈ e = h s s∈ u u∈ v v∈ (pr-in (sh 3 x) i1 i0 (v ∷ u ∷ s ∷ γ) e)
bothAll-in : ((u v s : S) → ⟨ s .fst ∈ X ⟩ → ⟨ u .fst ∈ s .fst ⟩ → ⟨ v .fst ∈ s .fst ⟩
→ X ≡ pr (u .fst) (v .fst) → ⟨ (v ∷ u ∷ s ∷ γ) ⊨ body ⟩)
→ ⟨ γ ⊨ bothAll x body ⟩
bothAll-in k s s∈ u u∈ v v∈ e = k u v s s∈ u∈ v∈ (pr-out (sh 3 x) i1 i0 (v ∷ u ∷ s ∷ γ) e)
容器の証人を与える
fillSnd、fillBoth、useSnd、useBoth は順序対の等式から内部容器を自動的に構成し、呼び出し側には成分についての推論だけを残す。
英語原文
Supplying the junk: a pair at a slot, with its components as elements, fills any of the four.
module _ {m : ℕ} (x : Fin m) (γ : Vec S m) (u v : S)
(e : (lookup x γ) .fst ≡ pr (u .fst) (v .fst)) where
private
c = container (lookup x γ) u v e
fillSnd : (body : Formula S (2 + m)) → ⟨ (v ∷ c .fst ∷ γ) ⊨ body ⟩
→ (ui : Fin m) → (lookup ui γ) .fst ≡ u .fst → ⟨ γ ⊨ sndEx x ui body ⟩
fillSnd body hb ui qu = sndEx-in x ui body γ v (c .fst) (c .snd .fst) (c .snd .snd .snd)
(e ∙ cong (λ w → pr w (v .fst)) (sym qu)) hb
fillBoth : (body : Formula S (3 + m)) → ⟨ (v ∷ u ∷ c .fst ∷ γ) ⊨ body ⟩
→ ⟨ γ ⊨ bothEx x body ⟩
fillBoth body hb = bothEx-in x body γ u v (c .fst) (c .snd .fst) (c .snd .snd .fst)
(c .snd .snd .snd) e hb
useSnd : (body : Formula S (2 + m)) (ui : Fin m) → (lookup ui γ) .fst ≡ u .fst
→ ⟨ γ ⊨ sndAll x ui body ⟩ → ⟨ (v ∷ c .fst ∷ γ) ⊨ body ⟩
useSnd body ui qu h = sndAll-out x ui body γ h v (c .fst) (c .snd .fst) (c .snd .snd .snd)
(e ∙ cong (λ w → pr w (v .fst)) (sym qu))
useBoth : (body : Formula S (3 + m)) → ⟨ γ ⊨ bothAll x body ⟩
→ ⟨ (v ∷ u ∷ c .fst ∷ γ) ⊨ body ⟩
useBoth body h = bothAll-out x body γ h u v (c .fst) (c .snd .fst) (c .snd .snd .fst)
(c .snd .snd .snd) e
まとめ
名前付きスロットと有限結合子の畳み込みが、繰り返し現れる論理式族を整理する。有界な対の論理式は符号化された順序対の一方または両方の成分を取り出し、その読み補題が成分の意味を復元する。充填補題は、これらの読みを大きな論理式で再利用するときに必要な容器の証人を隠す。
{-# OPTIONS --cubical --safe --guardedness #-}open import Base.Preludeopen import FOL.ZFStructure using ( module hPropView )open import FOL.Syntax using ( Formula; var; _∧̇_; _∨̇_; _⇒̇_; ∃̇∈; ∀̇∈ )open import FOL.LevyHierarchy using ( Δ₀; δ-∧; δ-⇒; δ-∀∈; δ-∃∈ )import FOL.Absolutenessopen import V.Hierarchy {ℓ} using ( 𝒮ᵥ )open import V.Coding {ℓ} using ( pr )open import L.Constructible {ℓ} using ( 𝒮ʟ; isL; isL-trans )open import L.Absoluteness {ℓ} using ( Δ₀-liftFo )open import L.Coding.PairFormulas {ℓ} using ( Δ₀-prAt; ∈pair-introL; ∈pair-introR )open import L.Coding.Environment {ℓ} using ( Δ₀-sucAt )open import L.Coding.Model {ℓ} using ( prAtL; prAtL-adequate ) open import L.Coding.Model {ℓ} using ( container )open import L.Coding.Expressions {ℓ} using ( sucAtL; sucAtL-adequate ) import L.Coding.Expressions {ℓ} as CodingExpressions