Kernel
On this page
Kernel-internal validate for the internalizable fragment of
mkType-buildable types. A code is a base carrier type (any U_0
type — a mu-encoded inductive or a primitive) paired with a finite
stack of predicates over that carrier; the decider is the conjunction
of the stack.
Surface (ktype)
KType : U_1— a base carrier type paired with a predicate stackbeta t : U_0— the base carrier of a code (constant along refinement)psi t : beta t -> Bool— the accumulated membership predicateEl t— the derived refinement subtypeSigma x:beta t. P (psi t x)P— theBool -> U_0membership decoder (P true ~> Unit,P false ~> Void)betaFn/decideFn/ElFn— the same functions as closed kernel termsandB,iota/refineconstructor helpers
Decision (decide)
decide t : beta t -> Bool— membership inEl t;decide = psi
decide
fx.tc.kernel.decide: the membership decision procedure decide = psi : (t:KType) -> beta t -> Bool.
failure
fx.tc.kernel.failure: the kernel transcription of the diagnostic Error ADT (DiagError — a mono-constructor record over Layer/Detail/msg/hint and an opaque Unit children slot) and the Failure of a rejected check as a dependent Sigma-chain (FailureTy = Sigma ktp:KType. Sigma x:(beta ktp). Sigma ctx. Sigma rsn. Sigma pth. DiagError; FailureTheory the base-only Sigma). Layer/Detail sub-shapes, the layerOf/detailOf/mkDiag/mkFailure constructors, the fst/snd-spine Failure projections, and the named DiagError field projections.
handlers
fx.tc.kernel.handlers: the six typecheck-policy handlers (strict/collecting/logging/firstN/summarize/pretty) as closed kernel step terms folding a stream of membership decisions into accumulated state. A decision is a host-known boolean passed plus an opaque host-rendered residue Rec; each step is ... -> Σ State payload whose reduction is the state transition. firstN carries an O(1) down-counter; summarize renders the reason enum to its production key token via reasonName and groups failures into a List (Σ String Nat) assoc list via insertOrIncrement (a listElim+strEq fold). Exports the step terms, their result shapes, and the Reason/assoc grouping vocabulary.
ktype
fx.tc.kernel.ktype: flat predicate-stack datum — KType : U_1 (a base carrier type paired with a predicate stack over it), beta (the carrier), the accumulator-fold decider psi/decide, derived El, the membership decoder P, andB, and the iota/refine constructors.
reflect
fx.tc.kernel.reflect: reflect a Nix-side carrier type into its KType code (reflect/reflectRefine), the checkable Boolean predicate vocabulary for refinement arms — Int over the primitive carrier via the host-backed intLe/intEq (positiveInt, nonNegativeInt, inRangeInt, eqInt) and String literal-set membership (oneOfStrTerm, via strEq) plus non-emptiness (strNonEmptyTerm, via strLen) — and the KernelPred witness layer (mkKernelPred, andKP, isKernelPred, sealed, kernelExpressible, ktypeOf, deriveGuard) with ready-made witnesses: Int (intPositive, intNonNegative, intInRange, intEq) and String (strOneOf, strNonEmpty), O(1)-bridged and guard-derived from their kernel terms.
validate
fx.tc.kernel.validate: the membership-decision arm of typechecking. validateClosed t v context reason path diagError decides membership with the kernel oracle (elaborate.decide) and either returns pure v or raises the host typeCheck effect with the caller-supplied diagnostics — the closed-input generalization of the auto-derived validateAt. validateK R t reason path carrier x is the kernel-internal report producer: it emits one kernel report op whose decision is the KType decider applied to the carrier (decide t x), returning freeFx (EffTypeCheck R) Resp Unit for the kernel handlers to fold. validateEl R t payload x is the kernel-internal certifier — the membership-witness dual of validateK: it produces the dependent witness El t when decide t x accepts, and otherwise aborts on EffError's strict (Void-response) raise carrying the opaque payload, so no witness is ever forged; returns freeFx (EffError R) Resp_strict (El t).