Satisfaction, internalized

The instance. For a formula of the meta-language and a set of L its environments range over, the satisfaction table is an element of L, defined there by an object-language formula.

funct is the two halves meeting. Existence hands the graph the objects the previous chapters built: the slot as the index set, the table over it, the carrier as the constant. Uniqueness takes an arbitrary table the graph accepts and pins its value against the one the meta-level recursion built. Neither half does anything here; both were finished before this chapter opened, and this is the page where they are applied.

{-# OPTIONS --cubical --safe --guardedness #-}

open import Base.Prelude
open import Base.Truth
open import Base.Classical using ( LEM )

module L.Coding.Satisfaction { : Level} (lem : LEM (ℓ-suc )) where

open import FOL.ZFStructure using ( module hPropStructure )
open import FOL.Syntax using ( Formula )
import FOL.Absoluteness
open import V.Hierarchy {} using ( 𝒮ᵥ )
open import V.Coding {} using ( pr )
open import L.Constructible {} using ( 𝒮ʟ; isL; isL-trans )
open import L.Coding.Model {} using ( prʟ-fst; domAt; domAt-intro; domAt-out )
open import L.Coding.Sat {} lem using ( Sat )
open import L.Coding.Table {} lem
  using ( keyʟ; slot; satTable; tree; ent; slot-ent; total; inSlot
        ; module Parts )
open import L.Coding.Slot {} lem using ( slotClosed )
open import L.Coding.Sound {} lem using ( soundness )
open import L.Coding.Unique {} lem using ( module Good )
open import L.Coding.Graph {} lem using ( satGraph; graph-in; graph-out )
open import L.Recursion {} lem using ( Recursion; mereFunct; module Of )

open import Cubical.Data.Sigma using ( Σ≡Prop )
import Cubical.HITs.PropositionalTruncation as PT
open PT using ( ∣_∣₁ )
open import Cubical.HITs.CumulativeHierarchy.Base using ( V; _∈_; setIsSet )

open TruthAlgebra (hPropAlgebra (ℓ-suc ))
open hPropStructure 𝒮ʟ

module AbsL = FOL.Absoluteness.Single 𝒮ᵥ isL isL-trans
open AbsL renaming ( _⊨ᵐ_ to _⊨_ )

The instance

The domain is the slot; the graph is the one the previous chapter wrote; and

funct is filled through mereFunct, because a merely existing unique solution is a contractible one and contractibility is a proposition. That was the first finding of this whole goal, made before any of it was built, and this is where it is spent.

module _ (B : S) {n : } (φ : Formula S n) where
  private
    C T : S
    C = slot B φ
    T = satTable B φ

    Ci Ti : Fin 5
    Ci = suc (suc zero)
    Ti = suc zero

    δ : (x y : S)  S ^ 5
    δ x y = B  T  C  y  x  []

    hdom : (x y : S)   δ x y  domAt Ti Ci 
    hdom x y = domAt-intro Ti Ci (δ x y)
       z   h  PT.rec (snd (fst z  fst C))
                 { (w , hw)  inSlot B φ (fst z) (fst w) hw }) h)
           ,  h  total B φ (fst z) h))

    entry :  {m} (ψ : Formula S m) (x : S)  fst x  fst (keyʟ ψ)
           ((z : V )   z  fst (tree B (ent B) ψ)    z  fst T )
            pr (fst x) (fst (Sat B ψ))  fst T 
    entry ψ x q incl =
      subst  w   pr w (fst (Sat B ψ))  fst T ) (sym q)
        (incl (pr (fst (keyʟ ψ)) (fst (Sat B ψ)))
          (subst  w   w  fst (tree B (ent B) ψ) )
            (prʟ-fst (keyʟ ψ) (Sat B ψ)) (Parts.self B (ent B) ψ)))

  satRec : Recursion
  Recursion.dom satRec = C
  Recursion.graph satRec = satGraph B
  Recursion.funct satRec x x∈ = mereFunct (satGraph B) x (PT.map
     { (m , ψ , (q , incl))  Sat B ψ
       , ( graph-in B x (Sat B ψ)
              C , (T , (B , (refl
             , ( slotClosed B φ (Sat B ψ  x  [])
             , ( hdom x (Sat B ψ)
             , ( entry ψ x q incl
             , soundness B φ (Sat B ψ  x  []) )))))) ∣₁
         ,  y' hy'  Σ≡Prop  v  snd (isL v))
             (PT.rec (setIsSet (fst y') (fst (Sat B ψ)))
                { (C' , (T' , (b , (eb , (hc , (hd , (ha , h12))))))) 
                 Good.pinned (b  T'  C'  y'  x  []) Ci Ti zero
                     hc hd h12 ψ x y' q
                     (domAt-out Ti Ci (b  T'  C'  y'  x  []) hd x y' ha) ha
                  cong  w  fst (Sat w ψ))
                     (Σ≡Prop  v  snd (isL v)) eb) })
               (graph-out B x y' hy'))) ) })
    (slot-ent B φ (fst x) x∈))

  module Table = Of satRec