Prerequisites. Direct starred prerequisites: none. No later core chapter depends on this route.
Encode a record as a function on labels. In the record {𝖳:U0,𝗀𝖾𝗍:𝖳→ℤ,𝗌𝖾𝗍:𝖳→ℤ→𝖳}, the range at label 𝗀𝖾𝗍 mentions the value returned at the earlier label 𝖳. An ordinary dependent function may let its codomain depend on the label, but not on values returned by the function at other labels. A function type for this record must therefore let its range inspect a restricted part of the function being classified.
The cycle that must be excluded
The notation {𝑓∣𝑥:𝐴→𝐵[𝑓,𝑥]} suggests that the range may inspect 𝑓. Unrestricted use is circular. In {𝑓∣𝑛:𝖭→(𝑓(𝑛)→𝑓(𝑛))}, the type of 𝑓(𝑛) depends on 𝑓(𝑛) itself. No smaller semantic object is available from which to decide the range PER.
By contrast, a finite record has an order on labels: the type field precedes the methods that mention it. At a label 𝑎, the range may inspect only 𝑓↾𝐴<𝑎, where 𝐴<𝑎:={𝑧:𝐴∣𝑧<𝑎}. Well-founded induction on < then constructs the range PERs.
The chapter’s very-dependent function is Hickey’s extensional Nuprl/MetaPRL type {𝑓∣𝑥:𝐴→𝐵[𝑓,𝑥]} with a membership witness consisting of a strict well-founded relation < on 𝐴. The relation is not printed inside the type expression, but every formation and membership derivation records it. Types are interpreted by PERs on untyped programs. Type inference is undecidable; the source does not supply a general algorithm for choosing < and does not derive the desired binary-method rule.
Let 𝑅𝐴 be the PER interpreting 𝐴, and assume < respects its equivalence classes. For 𝑎∈dom(𝑅𝐴), write 𝑃𝑎 for the PER assigned to the predecessor-function type {𝑔∣𝑧:𝐴<𝑎→𝐵[𝑔,𝑧]}. The definition of 𝑃𝑎 uses only 𝑃𝑧 with 𝑧<𝑎. Once 𝑃𝑎 is fixed, each 𝑔∈dom(𝑃𝑎) determines a range PER 𝑅𝑔,𝑎𝐵 interpreting 𝐵[𝑔,𝑎/𝑓,𝑥].
For a well-founded witness (𝐴,<), define 𝑅𝗏𝖽𝖿(𝑓,𝑓′)⟺∀𝑎,𝑎′.𝑅𝐴(𝑎,𝑎′)⇒𝑅𝑓↾𝐴<𝑎,𝑎𝐵(𝑓(𝑎),𝑓′(𝑎′)). The family 𝑅𝐵 is functional in related choices of 𝑎,𝑎′ and predecessor functions. Membership is 𝑅𝗏𝖽𝖿(𝑓,𝑓) together with the displayed well-founded witness.
At a minimal element 𝑎0, the predecessor domain is empty. A range expression may not evaluate 𝑔(𝑧) because no 𝑧:𝐴<𝑎0 exists. Thus the first PER is determined without recursion. If PERs have been constructed for all 𝑧<𝑎, the predecessor-function PER 𝑃𝑎 and then 𝑅𝑔,𝑎𝐵 are determined. This is well-founded recursion on 𝑎.
If the cycle above were admitted, the construction at 𝑛 would ask for the PER of 𝑓(𝑛) while defining that very PER. The predecessor restriction does not contain 𝑛, so the expression 𝑓(𝑛) is out of scope and the range fails formation before any fixed point is attempted.
★★☆ Let 𝐴={0,1,2} with the usual strict order. Suppose 𝐵[𝑓,0]=𝖭, 𝐵[𝑓,1]=𝖥𝗂𝗇(𝑓(0)+1), and 𝐵[𝑓,2]=𝖥𝗂𝗇(𝑓(0)+𝑓(1)+1). Construct the three range PERs in order. State the predecessor restriction available at each stage and explain why the definition is well founded.
The predicate 𝖤𝗑𝗍𝐴,𝐵(𝑏) requires equal arguments and equal predecessor functions to produce equal results in the corresponding equal range PER. It is the annotation-level form of the source’s lambda equality premise.
The constructor derivation begins at minimal inputs. Let 𝐴={0,1} and take 0<1. Define 𝑓(0)=3,𝑓(1)=𝗍𝗋𝗎𝖾,𝐵[𝑓,0]=𝖭,𝐵[𝑓,1]=𝗂𝖿𝑓(0)>0𝗍𝗁𝖾𝗇𝖡𝗈𝗈𝗅𝖾𝗅𝗌𝖾𝟎. At 0, the predecessor function has empty domain and 3:𝖭. At 1, the restriction contains 𝑓(0)=3, so the range computes to 𝖡𝗈𝗈𝗅 and 𝗍𝗋𝗎𝖾 inhabits it. Rule VDF-I therefore classifies 𝑓. Application at 1 gives 𝑓(1):𝐵[𝑓,1]𝑑𝑒𝑓𝑖𝑛𝑖𝑡𝑖𝑜𝑛≡𝖡𝗈𝗈𝗅. Application to a neutral 𝑎:𝐴 remains stuck: the range 𝐵[𝑓,𝑎] is known to be a type, but neither the branch nor the value 𝑓(𝑎) computes.
★★☆ Reverse the order on {0,1} in the preceding example. Show that the range at 1 is then ill formed because it reads 𝑓(0) at a nonpredecessor. Give a different range family whose dependency is accepted by the reversed order.
The well-founded witness is proof data, although it is absent from the printed type. Substitution must therefore transform the witness and every predecessor restriction.
Let 𝜃:Δ→Γ be a context substitution. If < is a strict well-founded relation on 𝐴 in Γ, then <[𝜃] is a strict well-founded relation on 𝐴[𝜃], and (𝑓↾𝐴<𝑎)[𝜃]=𝑓[𝜃]↾𝐴[𝜃]<[𝜃]𝑎[𝜃].
Proof of Lemma 95.4 — Restriction commutes with substitution
Proof. The substituted relation has the same relation tree with every label and term acted on by 𝜃. An infinite descending chain after substitution would map to a descending chain in the original derivation, contradicting its well-foundedness witness. Both restrictions have domain predicate 𝑧:𝐴[𝜃] with 𝑧<[𝜃]𝑎[𝜃], and both apply 𝑓[𝜃] to that 𝑧, so function extensionality in the PER model gives the equation. ◻
Proof of Theorem 95.5 — Substitution for very-dependent functions
Proof. Induct on the derivation. In VDF-F, substitute into 𝐴, <, and 𝐵. Lemma 95.4 supplies the predecessor type used by the fourth premise, and the induction hypothesis gives formation of the substituted range. In VDF-I, the same lemma transports the body typing and 𝖤𝗑𝗍𝐴,𝐵 pointwise. In VDF-E, substitute into the membership witness and argument; the result type is 𝐵[𝜃][𝑓[𝜃],𝑎[𝜃]/𝑓,𝑥] by capture avoidance. The extensional case applies the equality induction hypothesis at each substituted argument. ◻
Assume the predicative PER hierarchy used by convention 95.1. The rules in definition 95.3 preserve typehood and PER membership. The semantic construction is well founded at exactly the displayed witness (𝐴,<).
Proof of Theorem 95.6 — Soundness of the extracted rules
Proof. Use well-founded induction on 𝑎:𝐴. The induction hypothesis supplies the PERs for every strict predecessor, hence the PER 𝑃𝑎 of predecessor functions. The fourth premise of VDF-F then supplies a functional range PER 𝑅𝑔,𝑎𝐵. Equation (95.1) is symmetric because the domain, predecessor-function, and range PERs are symmetric. For transitivity, use functionality to replace the middle predecessor representative before applying transitivity of the range PER. The premise of VDF-I places each result in its range PER. Rule VDF-E selects that membership fact. The beta equation is ordinary function computation with the predecessor restriction substituted for 𝑔, and VDF-Ext is the definition of 𝑅𝗏𝖽𝖿. ◻
Removing well-foundedness leaves the rule statement syntactically meaningful but invalidates the induction that constructs 𝑃𝑎. Removing functionality of 𝑅𝐵 makes transitivity depend on the chosen representative. These are the two substantive hypotheses of the theorem.
Dependent records as ordered functions
Fix a finite list of labels 𝑙0<⋯<𝑙𝑛. A dependent record type {𝑙0:𝑀0;𝑙1:𝑀1(𝑙0);…;𝑙𝑛:𝑀𝑛(𝑙0,…,𝑙𝑛−1)} is translated to {𝑓∣𝑙:𝖫𝖺𝖻𝖾𝗅→𝖼𝖺𝗌𝖾𝑙𝗈𝖿𝑙𝑖⇒𝑀𝑖(𝑓(𝑙0),…,𝑓(𝑙𝑖−1))∣_⇒⊤}. The label order is well founded, and the 𝑖th range reads only strict predecessors. Record selection is function application.
For a point object, take 𝖯𝗈𝗂𝗇𝗍𝖬𝖾𝗍𝗁𝗈𝖽𝗌(𝑅):={𝗀𝖾𝗍:𝑅→ℤ;𝗌𝖾𝗍:𝑅→ℤ→𝑅;𝗅𝖺𝗐:∀𝑟:𝑅.∀𝑖:ℤ.𝗀𝖾𝗍(𝗌𝖾𝗍(𝑟,𝑖))=𝑖}. The range for 𝗅𝖺𝗐 may read the earlier values at 𝗀𝖾𝗍 and 𝗌𝖾𝗍. It may not read the value at 𝗅𝖺𝗐 itself. With representation 𝑅=ℤ, define 𝗀𝖾𝗍(𝑟)=𝑟 and 𝗌𝖾𝗍(𝑟,𝑖)=𝑖; reflexivity proves the law.
The corresponding abstract object type is 𝖮𝖻𝗃𝖾𝖼𝗍(𝑀):=∑𝑅:U𝑖∑𝑠:𝑅𝑀(𝑅). An object implementation chooses 𝑅, a state, and a dependent method record. Conversely, opening this Sigma supplies exactly those three pieces. This gives the source’s ADT/object correspondence: implementations of a signature are proofs of the existential specification, while method wrappers hide 𝑅 again.
Let 𝑅′ extend the ordered record 𝑅 by labels placed after every label of 𝑅, and suppose the shared range types agree extensionally. Then every member of 𝑅′ is a member of 𝑅 by restriction to the labels of 𝑅.
Proof. Let 𝑓:𝑅′. For each label 𝑙 of 𝑅, the predecessor restriction required by 𝑅 is the restriction of the one already validated for 𝑅′. The shared range type is equal by hypothesis, so VDF-E gives 𝑓(𝑙):𝐵𝑅[𝑓,𝑙]. Equation (95.1) then proves membership of the restricted function in 𝑅. No premise mentions a new label, so deleting all new branches preserves every old range judgment. ◻
Insertion of a field before an old label requires a new proof: an old range may inspect all predecessors and may therefore change. Updating one field can likewise invalidate later fields. The Point law, for example, is not preserved by changing 𝗌𝖾𝗍 without changing its proof field.
What the constructor does not provide
An ordinary Π-type permits 𝐵(𝑥) but not 𝐵(𝑓,𝑥). Dependent intersection adds a view of one existing subject but performs no recursion over a domain. System S substitutes a term into its own assigned type but does not define a function range by predecessor recursion. Very-dependent formation uses the fourth premise of VDF-F; none of the other formers has that premise.
The source leaves general type checking undecidable: the well-founded relation may be implicit and type equality is extensional. It also withholds the desired binary-method rule. A method whose argument has the hidden representation type of a different object cannot be typed merely from the receiver’s existential package. Well-founded label dependency does not reveal that other representation.
★★☆ Give a binary method type 𝑅→𝑅→𝖡𝗈𝗈𝗅 inside 𝖮𝖻𝗃𝖾𝖼𝗍(𝑀). Open two independently packed objects and show that their representation types are 𝑅1 and 𝑅2. Identify the ill-typed application that would require 𝑅1≡𝑅2.
★★☆ Translate the Point record into a VDF type. List the predecessor labels used by each range. Then swap the order of 𝗌𝖾𝗍 and 𝗅𝖺𝗐 and locate the failed range formation judgment.
★★★ Extend Point with a color field and color-changing method. Prove width subtyping by proposition 95.7, and calculate a wrapper that updates the position while preserving the color fields. Give a counterexample to the same calculation when a new field is inserted before an old dependent law.
★★★Practical project.very-dependent-order-checker Implement in Kappa a checker for finite VDF record declarations. Represent each field by its label and the list of fields read by its range. Maintain the invariant that every dependency is a strict predecessor in the numeric order. The checker must accept the Point declaration and the three-stage numeric example, reject a self-dependent field, reject a two-field cycle, and check the predecessor set visible at a named field. Changing the strict comparison to a non-strict one must make the test fail.
Sources. Hickey introduces the record obstruction on page 4 and the exact very-dependent meaning explanation on pages 5–6 of the FOOL paper. The record translation and Point object occupy pages 7–9; the binary-method boundary is stated on page 10. The 2001 thesis’s dedicated development gives the longer MetaPRL development. The public 2026 MetaPRL checkout preserves a later itt_dfun theory, not the exact 1996 proof state. The Kappa artifact therefore checks finite dependency orders; it neither decides extensional Nuprl typehood nor proves the PER theorem [Hic96].