Source/Packages

Compiler.DependentCore

packages/compiler/src/Compiler/DependentCore.alpha

12,943 lines498 declarations489.0 KiBSHA-256 ef207b0de796

Complete file · line 341

DependentCore.alpha

Definition view

Large source region · 12,943 lines

module Compiler.DependentCore

import Compiler.NormalizationBudget
import Model.Config
import Model.Word32
import Compiler.NaturalOperation
import Compiler.NaturalMagnitude
import Compiler.NaturalMagnitudeArithmetic

family CoreArithmeticInspection : Type 0
constructor CoreArithmeticValue
field unrestricted coreArithmeticDigits : Bytes
constructor CoreArithmeticNeutral
constructor CoreArithmeticRejected
field unrestricted coreArithmeticFailure : (family NaturalMagnitudeFailure)

end-family

family CoreMultiplicity : Type 0
constructor CoreErased
constructor CoreLinear
constructor CoreAffine
constructor CoreUnrestricted

end-family

family CorePrimitive : Type 0
constructor CoreByteEqual
constructor CoreByteLess
constructor CoreNaturalLess
constructor CoreNaturalToByte
constructor CoreByteToNatural
constructor CoreBytesAppend
constructor CoreBytesCons
constructor CoreBytesLength
constructor CoreNaturalEliminate
constructor CoreBytesEliminate
constructor CoreBytesEqual
constructor CoreFileEffect
constructor CoreEffects
constructor CoreComputation
constructor CoreReturn
constructor CoreBind
constructor CoreReadFile
constructor CoreWriteFile
constructor CoreLinuxOpenNode
constructor CoreLinuxCloseNode
constructor CoreLinuxIoctl
constructor CoreLinuxMmap
constructor CoreLinuxMunmap
constructor CoreBytesSetIndex
constructor CoreBytesIndexNonzero
constructor CoreBytesSetFreeIndex
constructor CoreBytesBuilderType
constructor CoreBytesBuilderEmpty
constructor CoreBytesBuilderChunk
constructor CoreBytesBuilderAppend
constructor CoreBytesBuilderBuild
constructor CoreRuntimeImageV4Build
constructor CoreBytesHead
constructor CoreBytesTail
constructor CoreBytesChecksum

end-family

family NamedCoreTerm : Type 0
constructor NamedCoreUniverse
field unrestricted namedUniverseLevel : Nat
constructor NamedCoreNatural
constructor NamedCoreNaturalLiteral
field unrestricted namedNaturalValue : Bytes
constructor NamedCoreVariable
field unrestricted namedVariableIdentifier : Bytes
constructor NamedCorePi
field unrestricted namedPiMultiplicity : (family CoreMultiplicity)
field unrestricted namedPiBinder : Bytes
recursive unrestricted namedPiDomain
recursive unrestricted namedPiCodomain
constructor NamedCoreLambda
field unrestricted namedLambdaMultiplicity : (family CoreMultiplicity)
field unrestricted namedLambdaBinder : Bytes
recursive unrestricted namedLambdaDomain
recursive unrestricted namedLambdaBody
constructor NamedCoreLet
field unrestricted namedLetMultiplicity : (family CoreMultiplicity)
field unrestricted namedLetBinder : Bytes
recursive unrestricted namedLetAnnotation
recursive unrestricted namedLetValue
recursive unrestricted namedLetBody
constructor NamedCoreApplication
recursive unrestricted namedApplicationFunction
recursive unrestricted namedApplicationArgument
constructor NamedCoreNaturalArithmetic
field unrestricted namedcoreArithmeticOperation : (family CoreNaturalOperation)
recursive unrestricted namedcoreArithmeticLeft
recursive unrestricted namedcoreArithmeticRight
constructor NamedCoreNaturalSuccessor
recursive unrestricted namedNaturalPredecessor
constructor NamedCoreByte
constructor NamedCoreByteLiteral
field unrestricted namedByteValue : Byte
constructor NamedCoreBytes
constructor NamedCoreBytesLiteral
field unrestricted namedBytesValue : Bytes
constructor NamedCoreTermSequenceEnd
constructor NamedCoreTermSequenceNext
recursive unrestricted namedCoreTermSequenceHead
recursive unrestricted namedCoreTermSequenceTail
constructor NamedCoreFamilyApplication
field unrestricted namedCoreFamilyName : Bytes
recursive unrestricted namedCoreFamilyArguments
constructor NamedCoreConstructorApplication
field unrestricted namedCoreConstructorFamilyName : Bytes
field unrestricted namedCoreConstructorName : Bytes
recursive unrestricted namedCoreConstructorArguments
constructor NamedCoreEliminatorBranch
field unrestricted namedCoreBranchConstructorName : Bytes
recursive unrestricted namedCoreBranchBinderNames
recursive unrestricted namedCoreBranchBody
constructor NamedCoreEliminator
field unrestricted namedCoreEliminatedFamilyName : Bytes
recursive unrestricted namedCoreEliminatorMotive
recursive unrestricted namedCoreEliminatorScrutinee
recursive unrestricted namedCoreEliminatorBranches

end-family

family CoreTerm : Type 0
constructor CoreUniverse
field unrestricted coreUniverseLevel : Nat
constructor CoreNatural
constructor CoreNaturalLiteral
field unrestricted coreNaturalValue : Bytes
constructor CoreBound
field unrestricted coreBoundIndex : Nat
constructor CorePi
field unrestricted corePiMultiplicity : (family CoreMultiplicity)
recursive unrestricted corePiDomain
recursive unrestricted corePiCodomain
constructor CoreLambda
field unrestricted coreLambdaMultiplicity : (family CoreMultiplicity)
recursive unrestricted coreLambdaDomain
recursive unrestricted coreLambdaBody
constructor CoreLet
field unrestricted coreLetMultiplicity : (family CoreMultiplicity)
recursive unrestricted coreLetAnnotation
recursive unrestricted coreLetValue
recursive unrestricted coreLetBody
constructor CoreApplication
recursive unrestricted coreApplicationFunction
recursive unrestricted coreApplicationArgument
constructor CoreNaturalArithmetic
field unrestricted coreArithmeticOperation : (family CoreNaturalOperation)
recursive unrestricted coreArithmeticLeft
recursive unrestricted coreArithmeticRight
constructor CoreNaturalSuccessor
recursive unrestricted coreNaturalPredecessor
constructor CoreByte
constructor CoreByteLiteral
field unrestricted coreByteValue : Byte
constructor CoreBytes
constructor CoreBytesLiteral
field unrestricted coreBytesValue : Bytes
constructor CorePrimitiveTerm
field unrestricted corePrimitive : (family CorePrimitive)
constructor CoreTermSequenceEnd
constructor CoreTermSequenceNext
recursive unrestricted coreTermSequenceHead
recursive unrestricted coreTermSequenceTail
constructor CoreFamilyApplication
field unrestricted coreFamilyName : Bytes
recursive unrestricted coreFamilyArguments
constructor CoreConstructorApplication
field unrestricted coreConstructorFamilyName : Bytes
field unrestricted coreConstructorName : Bytes
recursive unrestricted coreConstructorArguments
constructor CoreEliminatorBranch
field unrestricted coreBranchConstructorName : Bytes
field unrestricted coreBranchBinderCount : Nat
recursive unrestricted coreBranchBody
constructor CoreEliminator
field unrestricted coreEliminatedFamilyName : Bytes
recursive unrestricted coreEliminatorMotive
recursive unrestricted coreEliminatorScrutinee
recursive unrestricted coreEliminatorBranches

end-family

family NameScope : Type 0
constructor EmptyNameScope
constructor NameScopeBinding
field unrestricted scopeBindingIdentifier : Bytes
recursive unrestricted outerNameScope

end-family

family NameLookupResult : Type 0
constructor NameFound
field unrestricted foundNameIndex : Nat
constructor NameNotFound
field unrestricted missingNameIdentifier : Bytes

end-family

family CoreResolutionResult : Type 0
constructor CoreResolved
field unrestricted resolvedCoreTerm : (family CoreTerm)
constructor CoreResolutionFailed
field unrestricted unresolvedNameIdentifier : Bytes

end-family

family NamedCoreVariableInspection : Type 0
constructor NamedCoreVariableFound
field unrestricted inspectedNamedCoreVariable : Bytes
constructor NamedCoreTermIsNotVariable

end-family

family EliminatorBranchScopeResolution : Type 0
constructor EliminatorBranchScopeResolved
field unrestricted resolvedEliminatorBranchScope : (family NameScope)
field unrestricted resolvedEliminatorBranchBinderCount : Nat
constructor EliminatorBranchScopeRejected

end-family

family CoreEliminatorBranchSelection : Type 0
constructor CoreEliminatorBranchSelected
field unrestricted selectedCoreEliminatorBinderCount : Nat
field unrestricted selectedCoreEliminatorBranchBody : (family CoreTerm)
constructor CoreEliminatorBranchMissing

end-family

family TypeContext : Type 0
constructor EmptyTypeContext
constructor TypeContextBinding
field unrestricted contextBindingType : (family CoreTerm)
recursive unrestricted outerTypeContext

end-family

family TypeLookupResult : Type 0
constructor TypeFound
field unrestricted foundVariableType : (family CoreTerm)
constructor TypeNotFound
field unrestricted missingVariableIndex : Nat

end-family

family UniverseInspection : Type 0
constructor IsUniverse
field unrestricted inspectedUniverseLevel : Nat
constructor NotUniverse

end-family

family PiInspection : Type 0
constructor IsPi
field unrestricted inspectedPiMultiplicity : (family CoreMultiplicity)
field unrestricted inspectedPiDomain : (family CoreTerm)
field unrestricted inspectedPiCodomain : (family CoreTerm)
constructor NotPi

end-family

family CoreInferenceResult : Type 0
constructor CoreInferred
field unrestricted inferredCoreType : (family CoreTerm)
constructor CoreInferenceFailed
field unrestricted coreInferenceFailureCode : Nat

end-family

family CorePrimitiveLookupResult : Type 0
constructor CorePrimitiveFound
field unrestricted foundCorePrimitive : (family CorePrimitive)
constructor CorePrimitiveNotFound
field unrestricted missingCorePrimitiveName : Bytes

end-family

family CoreLiteralInspection : Type 0
constructor CoreNaturalInspected
field unrestricted inspectedNaturalValue : Bytes
constructor CoreByteInspected
field unrestricted inspectedByteValue : Byte
constructor CoreBytesInspected
field unrestricted inspectedBytesValue : Bytes
constructor CoreNotLiteral

end-family

family CoreFunctionInspection : Type 0
constructor CoreFunctionLambda
field unrestricted inspectedLambdaBody : (family CoreTerm)
constructor CoreFunctionPrimitive
field unrestricted inspectedFunctionPrimitive : (family CorePrimitive)
constructor CoreFunctionAppliedPrimitive
field unrestricted inspectedAppliedPrimitive : (family CorePrimitive)
field unrestricted inspectedPrimitiveArgument : (family CoreTerm)
constructor CoreFunctionAppliedPrimitive2
field unrestricted inspectedAppliedPrimitive2 : (family CorePrimitive)
field unrestricted inspectedPrimitiveArgument1 : (family CoreTerm)
field unrestricted inspectedPrimitiveArgument2 : (family CoreTerm)
constructor CoreFunctionAppliedPrimitive3
field unrestricted inspectedAppliedPrimitive3 : (family CorePrimitive)
field unrestricted inspectedPrimitiveArgumentFirst : (family CoreTerm)
field unrestricted inspectedPrimitiveArgumentSecond : (family CoreTerm)
field unrestricted inspectedPrimitiveArgumentThird : (family CoreTerm)
constructor CoreFunctionOther

end-family

-- A completed result has reached a fixed point; exhaustion retains only a
-- resumable residual and never claims it is a normal form. Counts are rounds,
-- not node visits or wall-clock work.
family CoreReductionResult : Type 0
constructor CoreReductionCompleted
field unrestricted coreReductionFixedPoint : (family CoreTerm)
field unrestricted coreReductionCompletedRounds : Nat
constructor CoreReductionExhausted
field unrestricted coreReductionResidual : (family CoreTerm)
field unrestricted coreReductionExhaustedRounds : Nat

end-family

-- Exhaustion has no term projection. A parent can consume only a successful
-- child, and receives exactly that child's remaining work budget.
family CoreWorkResult : Type 0
constructor CoreWorkCompleted
field unrestricted coreWorkTerm : (family CoreTerm)
field unrestricted coreWorkBudget : (family NormalizationBudget)
constructor CoreWorkExhausted
field unrestricted coreWorkExhaustedBudget : (family NormalizationBudget)

end-family

family CoreNaturalWorkState : Type 0
constructor CoreNaturalWorkActive
field unrestricted coreNaturalWorkPredecessor : Bytes
field unrestricted coreNaturalWorkTerm : (family CoreTerm)
field unrestricted coreNaturalWorkBudget : (family NormalizationBudget)
constructor CoreNaturalWorkStopped
field unrestricted coreNaturalWorkStoppedBudget : (family NormalizationBudget)

end-family

def coreNaturalOperationCode =
  Compiler.NaturalOperation/naturalOperationCode

def evaluateCoreNaturalOperation =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (eliminate
      CoreNaturalOperation
      (lambda unrestricted current : (family CoreNaturalOperation) .
        (pi unrestricted left : Bytes .
          (pi unrestricted right : Bytes . (family NaturalMagnitudeResult))))
      operation
      (branch CoreNaturalAdd . Compiler.NaturalMagnitude/magnitudeAddChecked)
      (branch CoreNaturalSubtract . Compiler.NaturalMagnitude/magnitudeSubtractChecked)
      (branch CoreNaturalMultiply . Compiler.NaturalMagnitude/magnitudeMultiplyChecked)
      (branch CoreNaturalDivide . Compiler.NaturalMagnitude/magnitudeDivideChecked)
      (branch CoreNaturalModulo . Compiler.NaturalMagnitude/magnitudeModuloChecked)))

def coreUnrestricted : (family CoreMultiplicity) =
  (constructor CoreMultiplicity CoreUnrestricted)

def coreUnaryType :
  (pi unrestricted domain : (family CoreTerm) .
    (pi unrestricted codomain : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted domain : (family CoreTerm) .
    (lambda unrestricted codomain : (family CoreTerm) .
      (constructor CoreTerm CorePi coreUnrestricted domain codomain)))

def coreBinaryType :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) .
      (pi unrestricted result : (family CoreTerm) . (family CoreTerm)))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (lambda unrestricted result : (family CoreTerm) .
        (constructor
          CoreTerm
          CorePi
          coreUnrestricted
          left
          (constructor CoreTerm CorePi coreUnrestricted right result)))))

def coreTernaryType :
  (pi unrestricted first : (family CoreTerm) .
    (pi unrestricted second : (family CoreTerm) .
      (pi unrestricted third : (family CoreTerm) .
        (pi unrestricted result : (family CoreTerm) . (family CoreTerm))))) =
  (lambda unrestricted first : (family CoreTerm) .
    (lambda unrestricted second : (family CoreTerm) .
      (lambda unrestricted third : (family CoreTerm) .
        (lambda unrestricted result : (family CoreTerm) .
          (constructor
            CoreTerm
            CorePi
            coreUnrestricted
            first
            (constructor
              CoreTerm
              CorePi
              coreUnrestricted
              second
              (constructor CoreTerm CorePi coreUnrestricted third result)))))))

def coreQuaternaryType :
  (pi unrestricted first : (family CoreTerm) .
    (pi unrestricted second : (family CoreTerm) .
      (pi unrestricted third : (family CoreTerm) .
        (pi unrestricted fourth : (family CoreTerm) .
          (pi unrestricted result : (family CoreTerm) . (family CoreTerm)))))) =
  (lambda unrestricted first : (family CoreTerm) .
    (lambda unrestricted second : (family CoreTerm) .
      (lambda unrestricted third : (family CoreTerm) .
        (lambda unrestricted fourth : (family CoreTerm) .
          (lambda unrestricted result : (family CoreTerm) .
            (constructor
              CoreTerm
              CorePi
              coreUnrestricted
              first
              (constructor
                CoreTerm
                CorePi
                coreUnrestricted
                second
                (constructor
                  CoreTerm
                  CorePi
                  coreUnrestricted
                  third
                  (constructor CoreTerm CorePi coreUnrestricted fourth result)))))))))

def coreNaturalEliminateType : (family CoreTerm) =
  (constructor
    CoreTerm
    CorePi
    coreUnrestricted
    (constructor
      CoreTerm
      CorePi
      coreUnrestricted
      (constructor CoreTerm CoreNatural)
      (constructor CoreTerm CoreUniverse zero))
    (constructor
      CoreTerm
      CorePi
      coreUnrestricted
      (constructor
        CoreTerm
        CoreApplication
        (constructor CoreTerm CoreBound zero)
        (constructor CoreTerm CoreNaturalLiteral b""))
      (constructor
        CoreTerm
        CorePi
        coreUnrestricted
        (constructor
          CoreTerm
          CorePi
          coreUnrestricted
          (constructor CoreTerm CoreNatural)
          (constructor
            CoreTerm
            CorePi
            coreUnrestricted
            (constructor
              CoreTerm
              CoreApplication
              (constructor CoreTerm CoreBound (succ (succ zero)))
              (constructor CoreTerm CoreBound zero))
            (constructor
              CoreTerm
              CoreApplication
              (constructor CoreTerm CoreBound (succ (succ (succ zero))))
              (constructor
                CoreTerm
                CoreNaturalSuccessor
                (constructor CoreTerm CoreBound (succ zero))))))
        (constructor
          CoreTerm
          CorePi
          coreUnrestricted
          (constructor CoreTerm CoreNatural)
          (constructor
            CoreTerm
            CoreApplication
            (constructor CoreTerm CoreBound (succ (succ (succ zero))))
            (constructor CoreTerm CoreBound zero))))))

def coreBytesEliminateType : (family CoreTerm) =
  (constructor
    CoreTerm
    CorePi
    coreUnrestricted
    (constructor
      CoreTerm
      CorePi
      coreUnrestricted
      (constructor CoreTerm CoreBytes)
      (constructor CoreTerm CoreUniverse zero))
    (constructor
      CoreTerm
      CorePi
      coreUnrestricted
      (constructor
        CoreTerm
        CoreApplication
        (constructor CoreTerm CoreBound zero)
        (constructor CoreTerm CoreBytesLiteral b""))
      (constructor
        CoreTerm
        CorePi
        coreUnrestricted
        (constructor
          CoreTerm
          CorePi
          coreUnrestricted
          (constructor CoreTerm CoreByte)
          (constructor
            CoreTerm
            CorePi
            coreUnrestricted
            (constructor CoreTerm CoreBytes)
            (constructor
              CoreTerm
              CorePi
              coreUnrestricted
              (constructor
                CoreTerm
                CoreApplication
                (constructor CoreTerm CoreBound (succ (succ (succ zero))))
                (constructor CoreTerm CoreBound zero))
              (constructor
                CoreTerm
                CoreApplication
                (constructor CoreTerm CoreBound (succ (succ (succ (succ zero)))))
                (constructor
                  CoreTerm
                  CoreApplication
                  (constructor
                    CoreTerm
                    CoreApplication
                    (constructor
                      CoreTerm
                      CorePrimitiveTerm
                      (constructor CorePrimitive CoreBytesCons))
                    (constructor CoreTerm CoreBound (succ (succ zero))))
                  (constructor CoreTerm CoreBound (succ zero)))))))
        (constructor
          CoreTerm
          CorePi
          coreUnrestricted
          (constructor CoreTerm CoreBytes)
          (constructor
            CoreTerm
            CoreApplication
            (constructor CoreTerm CoreBound (succ (succ (succ zero))))
            (constructor CoreTerm CoreBound zero))))))

def coreFileEffectTerm : (family CoreTerm) =
  (constructor CoreTerm CorePrimitiveTerm (constructor CorePrimitive CoreFileEffect))

def coreBytesBuilderTerm : (family CoreTerm) =
  (constructor CoreTerm CorePrimitiveTerm (constructor CorePrimitive CoreBytesBuilderType))

def coreFileEffectRow : (family CoreTerm) =
  (constructor
    CoreTerm
    CoreApplication
    (constructor CoreTerm CorePrimitiveTerm (constructor CorePrimitive CoreEffects))
    coreFileEffectTerm)

def coreComputationType =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted resultType : (family CoreTerm) .
      (constructor
        CoreTerm
        CoreApplication
        (constructor
          CoreTerm
          CoreApplication
          (constructor CoreTerm CorePrimitiveTerm (constructor CorePrimitive CoreComputation))
          effects)
        resultType)))

def corePrimitiveType : (pi unrestricted primitive : (family CorePrimitive) . (family CoreTerm)) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (eliminate
      CorePrimitive
      (lambda unrestricted value : (family CorePrimitive) . (family CoreTerm))
      primitive
      (branch
        CoreByteEqual
        .
        (coreBinaryType
          (constructor CoreTerm CoreByte)
          (constructor CoreTerm CoreByte)
          (constructor CoreTerm CoreNatural)))
      (branch
        CoreByteLess
        .
        (coreBinaryType
          (constructor CoreTerm CoreByte)
          (constructor CoreTerm CoreByte)
          (constructor CoreTerm CoreNatural)))
      (branch
        CoreNaturalLess
        .
        (coreBinaryType
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreNatural)))
      (branch
        CoreNaturalToByte
        .
        (coreUnaryType (constructor CoreTerm CoreNatural) (constructor CoreTerm CoreByte)))
      (branch
        CoreByteToNatural
        .
        (coreUnaryType (constructor CoreTerm CoreByte) (constructor CoreTerm CoreNatural)))
      (branch
        CoreBytesAppend
        .
        (coreBinaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)))
      (branch
        CoreBytesCons
        .
        (coreBinaryType
          (constructor CoreTerm CoreByte)
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)))
      (branch
        CoreBytesLength
        .
        (coreUnaryType (constructor CoreTerm CoreBytes) (constructor CoreTerm CoreNatural)))
      (branch CoreNaturalEliminate . coreNaturalEliminateType)
      (branch CoreBytesEliminate . coreBytesEliminateType)
      (branch
        CoreBytesEqual
        .
        (coreBinaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreNatural)))
      (branch CoreFileEffect . (constructor CoreTerm CoreUniverse zero))
      (branch
        CoreEffects
        .
        (coreUnaryType
          (constructor CoreTerm CoreUniverse zero)
          (constructor CoreTerm CoreUniverse zero)))
      (branch
        CoreComputation
        .
        (coreBinaryType
          (constructor CoreTerm CoreUniverse zero)
          (constructor CoreTerm CoreUniverse zero)
          (constructor CoreTerm CoreUniverse zero)))
      (branch CoreReturn . (constructor CoreTerm CoreUniverse zero))
      (branch CoreBind . (constructor CoreTerm CoreUniverse zero))
      (branch
        CoreReadFile
        .
        (coreUnaryType
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreBytes))))
      (branch
        CoreWriteFile
        .
        (coreBinaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreNatural))))
      (branch
        CoreLinuxOpenNode
        .
        (coreUnaryType
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreBytes))))
      (branch
        CoreLinuxCloseNode
        .
        (coreUnaryType
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreNatural))))
      (branch
        CoreLinuxIoctl
        .
        (coreTernaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreBytes))))
      (branch
        CoreLinuxMmap
        .
        (coreUnaryType
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreBytes))))
      (branch
        CoreLinuxMunmap
        .
        (coreBinaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreBytes)
          (coreComputationType coreFileEffectRow (constructor CoreTerm CoreNatural))))
      (branch
        CoreBytesSetIndex
        .
        (coreBinaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreBytes)))
      (branch
        CoreBytesIndexNonzero
        .
        (coreBinaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreNatural)))
      (branch
        CoreBytesSetFreeIndex
        .
        (coreQuaternaryType
          (constructor CoreTerm CoreBytes)
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreNatural)
          (constructor CoreTerm CoreBytes)))
      (branch CoreBytesBuilderType . (constructor CoreTerm CoreUniverse zero))
      (branch CoreBytesBuilderEmpty . coreBytesBuilderTerm)
      (branch
        CoreBytesBuilderChunk
        .
        (coreUnaryType (constructor CoreTerm CoreBytes) coreBytesBuilderTerm))
      (branch
        CoreBytesBuilderAppend
        .
        (coreBinaryType coreBytesBuilderTerm coreBytesBuilderTerm coreBytesBuilderTerm))
      (branch
        CoreBytesBuilderBuild
        .
        (coreUnaryType coreBytesBuilderTerm (constructor CoreTerm CoreBytes)))
      (branch
        CoreRuntimeImageV4Build
        .
        (coreUnaryType coreBytesBuilderTerm (constructor CoreTerm CoreBytes)))
      (branch
        CoreBytesHead
        .
        (coreUnaryType (constructor CoreTerm CoreBytes) (constructor CoreTerm CoreByte)))
      (branch
        CoreBytesTail
        .
        (coreUnaryType (constructor CoreTerm CoreBytes) (constructor CoreTerm CoreBytes)))
      (branch
        CoreBytesChecksum
        .
        (coreUnaryType (constructor CoreTerm CoreBytes) (constructor CoreTerm CoreBytes)))))

def naturalEqual : (pi unrestricted left : Nat . (pi unrestricted right : Nat . Nat)) =
  (lambda unrestricted left : Nat .
    (lambda unrestricted right : Nat .
      (nat-eliminate
        (lambda unrestricted result : Nat . Nat)
        (nat-eliminate
          (lambda unrestricted result : Nat . Nat)
          (succ zero)
          (lambda unrestricted predecessor : Nat . (lambda unrestricted induction : Nat . zero))
          (nat-less-than right left))
        (lambda unrestricted predecessor : Nat . (lambda unrestricted induction : Nat . zero))
        (nat-less-than left right))))

def coreNaturalAnd : (pi unrestricted left : Nat . (pi unrestricted right : Nat . Nat)) =
  (lambda unrestricted left : Nat .
    (lambda unrestricted right : Nat .
      (nat-eliminate
        (lambda unrestricted condition : Nat . Nat)
        zero
        (lambda unrestricted predecessor : Nat . (lambda unrestricted induction : Nat . right))
        left)))

def coreBytesEqual : (pi unrestricted left : Bytes . (pi unrestricted right : Bytes . Nat)) =
  (lambda unrestricted left : Bytes .
    (lambda unrestricted right : Bytes . (bytes-equal left right)))

def chooseCorePrimitive :
  (pi unrestricted matched : Nat .
    (pi unrestricted primitive : (family CorePrimitive) .
      (pi unrestricted unmatchedResult : (family CorePrimitiveLookupResult) .
        (family CorePrimitiveLookupResult)))) =
  (lambda unrestricted matched : Nat .
    (lambda unrestricted primitive : (family CorePrimitive) .
      (lambda unrestricted unmatchedResult : (family CorePrimitiveLookupResult) .
        (nat-eliminate
          (lambda unrestricted condition : Nat . (family CorePrimitiveLookupResult))
          unmatchedResult
          (lambda unrestricted predecessor : Nat .
            (lambda unrestricted induction : (family CorePrimitiveLookupResult) .
              (constructor CorePrimitiveLookupResult CorePrimitiveFound primitive)))
          matched))))

def lookupCoreNativeEffectPrimitive :
  (pi unrestricted name : Bytes . (family CorePrimitiveLookupResult)) =
  (lambda unrestricted name : Bytes .
    (chooseCorePrimitive
      (coreBytesEqual name b"linux-open-node")
      (constructor CorePrimitive CoreLinuxOpenNode)
      (chooseCorePrimitive
        (coreBytesEqual name b"linux-close-node")
        (constructor CorePrimitive CoreLinuxCloseNode)
        (chooseCorePrimitive
          (coreBytesEqual name b"linux-ioctl")
          (constructor CorePrimitive CoreLinuxIoctl)
          (chooseCorePrimitive
            (coreBytesEqual name b"linux-mmap")
            (constructor CorePrimitive CoreLinuxMmap)
            (chooseCorePrimitive
              (coreBytesEqual name b"linux-munmap")
              (constructor CorePrimitive CoreLinuxMunmap)
              (constructor CorePrimitiveLookupResult CorePrimitiveNotFound name)))))))

def lookupCoreEffectPrimitive :
  (pi unrestricted name : Bytes . (family CorePrimitiveLookupResult)) =
  (lambda unrestricted name : Bytes .
    (chooseCorePrimitive
      (coreBytesEqual name b"File")
      (constructor CorePrimitive CoreFileEffect)
      (chooseCorePrimitive
        (coreBytesEqual name b"effects")
        (constructor CorePrimitive CoreEffects)
        (chooseCorePrimitive
          (coreBytesEqual name b"computation")
          (constructor CorePrimitive CoreComputation)
          (chooseCorePrimitive
            (coreBytesEqual name b"return")
            (constructor CorePrimitive CoreReturn)
            (chooseCorePrimitive
              (coreBytesEqual name b"bind")
              (constructor CorePrimitive CoreBind)
              (chooseCorePrimitive
                (coreBytesEqual name b"read-file")
                (constructor CorePrimitive CoreReadFile)
                (chooseCorePrimitive
                  (coreBytesEqual name b"write-file")
                  (constructor CorePrimitive CoreWriteFile)
                  (lookupCoreNativeEffectPrimitive name)))))))))

def lookupCoreBytesBuilderPrimitive :
  (pi unrestricted name : Bytes . (family CorePrimitiveLookupResult)) =
  (lambda unrestricted name : Bytes .
    (chooseCorePrimitive
      (coreBytesEqual name b"BytesBuilder")
      (constructor CorePrimitive CoreBytesBuilderType)
      (chooseCorePrimitive
        (coreBytesEqual name b"bytes-builder")
        (constructor CorePrimitive CoreBytesBuilderType)
        (chooseCorePrimitive
          (coreBytesEqual
            name
            b"bytes-builder-empty")
          (constructor CorePrimitive CoreBytesBuilderEmpty)
          (chooseCorePrimitive
            (coreBytesEqual
              name
              b"bytes-builder-chunk")
            (constructor CorePrimitive CoreBytesBuilderChunk)
            (chooseCorePrimitive
              (coreBytesEqual
                name
                b"bytes-builder-append")
              (constructor CorePrimitive CoreBytesBuilderAppend)
              (chooseCorePrimitive
                (coreBytesEqual
                  name
                  b"bytes-builder-build")
                (constructor CorePrimitive CoreBytesBuilderBuild)
                (chooseCorePrimitive
                  (coreBytesEqual
                    name
                    b"runtime-image-v4-build")
                  (constructor CorePrimitive CoreRuntimeImageV4Build)
                  (lookupCoreEffectPrimitive name)))))))))

def lookupCoreIndexedBytesPrimitive :
  (pi unrestricted name : Bytes . (family CorePrimitiveLookupResult)) =
  (lambda unrestricted name : Bytes .
    (chooseCorePrimitive
      (coreBytesEqual name b"bytes-set-index")
      (constructor CorePrimitive CoreBytesSetIndex)
      (chooseCorePrimitive
        (coreBytesEqual
          name
          b"bytes-index-nonzero")
        (constructor CorePrimitive CoreBytesIndexNonzero)
        (chooseCorePrimitive
          (coreBytesEqual
            name
            b"bytes-set-free-index")
          (constructor CorePrimitive CoreBytesSetFreeIndex)
          (chooseCorePrimitive
            (coreBytesEqual name b"bytes-head")
            (constructor CorePrimitive CoreBytesHead)
            (chooseCorePrimitive
              (coreBytesEqual name b"bytes-tail")
              (constructor CorePrimitive CoreBytesTail)
              (chooseCorePrimitive
                (coreBytesEqual name b"bytes-checksum")
                (constructor CorePrimitive CoreBytesChecksum)
                (lookupCoreBytesBuilderPrimitive name))))))))

def lookupCorePrimitive : (pi unrestricted name : Bytes . (family CorePrimitiveLookupResult)) =
  (lambda unrestricted name : Bytes .
    (chooseCorePrimitive
      (coreBytesEqual name b"byte-equal")
      (constructor CorePrimitive CoreByteEqual)
      (chooseCorePrimitive
        (coreBytesEqual name b"byte-less-than")
        (constructor CorePrimitive CoreByteLess)
        (chooseCorePrimitive
          (coreBytesEqual name b"nat-less-than")
          (constructor CorePrimitive CoreNaturalLess)
          (chooseCorePrimitive
            (coreBytesEqual name b"nat-to-byte")
            (constructor CorePrimitive CoreNaturalToByte)
            (chooseCorePrimitive
              (coreBytesEqual name b"byte-to-nat")
              (constructor CorePrimitive CoreByteToNatural)
              (chooseCorePrimitive
                (coreBytesEqual name b"bytes-append")
                (constructor CorePrimitive CoreBytesAppend)
                (chooseCorePrimitive
                  (coreBytesEqual name b"bytes-cons")
                  (constructor CorePrimitive CoreBytesCons)
                  (chooseCorePrimitive
                    (coreBytesEqual name b"bytes-length")
                    (constructor CorePrimitive CoreBytesLength)
                    (chooseCorePrimitive
                      (coreBytesEqual name b"nat-eliminate")
                      (constructor CorePrimitive CoreNaturalEliminate)
                      (chooseCorePrimitive
                        (coreBytesEqual
                          name
                          b"bytes-eliminate")
                        (constructor CorePrimitive CoreBytesEliminate)
                        (chooseCorePrimitive
                          (coreBytesEqual name b"bytes-equal")
                          (constructor CorePrimitive CoreBytesEqual)
                          (lookupCoreIndexedBytesPrimitive name)))))))))))))

def resolveCorePrimitiveName : (pi unrestricted name : Bytes . (family CoreResolutionResult)) =
  (lambda unrestricted name : Bytes .
    (eliminate
      CorePrimitiveLookupResult
      (lambda unrestricted result : (family CorePrimitiveLookupResult) .
        (family CoreResolutionResult))
      (lookupCorePrimitive name)
      (branch
        CorePrimitiveFound
        primitive
        .
        (constructor
          CoreResolutionResult
          CoreResolved
          (constructor CoreTerm CorePrimitiveTerm primitive)))
      (branch
        CorePrimitiveNotFound
        missing
        .
        (constructor CoreResolutionResult CoreResolutionFailed missing))))

def naturalAdd : (pi unrestricted left : Nat . (pi unrestricted right : Nat . Nat)) =
  (lambda unrestricted left : Nat .
    (lambda unrestricted right : Nat .
      (nat-eliminate
        (lambda unrestricted value : Nat . Nat)
        right
        (lambda unrestricted predecessor : Nat .
          (lambda unrestricted induction : Nat . (succ induction)))
        left)))

def naturalMaximum : (pi unrestricted left : Nat . (pi unrestricted right : Nat . Nat)) =
  (lambda unrestricted left : Nat .
    (lambda unrestricted right : Nat .
      (nat-eliminate
        (lambda unrestricted condition : Nat . Nat)
        left
        (lambda unrestricted predecessor : Nat . (lambda unrestricted induction : Nat . right))
        (nat-less-than left right))))

def naturalPredecessor : (pi unrestricted value : Nat . Nat) =
  (lambda unrestricted value : Nat .
    (nat-eliminate
      (lambda unrestricted natural : Nat . Nat)
      zero
      (lambda unrestricted predecessor : Nat . (lambda unrestricted induction : Nat . predecessor))
      value))

def multiplicityCode : (pi unrestricted multiplicity : (family CoreMultiplicity) . Nat) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (eliminate
      CoreMultiplicity
      (lambda unrestricted value : (family CoreMultiplicity) . Nat)
      multiplicity
      (branch CoreErased . zero)
      (branch CoreLinear . (succ zero))
      (branch CoreAffine . (succ (succ zero)))
      (branch CoreUnrestricted . (succ (succ (succ zero))))))

def multiplicityEqual :
  (pi unrestricted left : (family CoreMultiplicity) .
    (pi unrestricted right : (family CoreMultiplicity) . Nat)) =
  (lambda unrestricted left : (family CoreMultiplicity) .
    (lambda unrestricted right : (family CoreMultiplicity) .
      (naturalEqual (multiplicityCode left) (multiplicityCode right))))

def incrementNameLookup :
  (pi unrestricted result : (family NameLookupResult) . (family NameLookupResult)) =
  (lambda unrestricted result : (family NameLookupResult) .
    (eliminate
      NameLookupResult
      (lambda unrestricted value : (family NameLookupResult) . (family NameLookupResult))
      result
      (branch NameFound index . (constructor NameLookupResult NameFound (succ index)))
      (branch NameNotFound identifier . (constructor NameLookupResult NameNotFound identifier))))

def lookupNameFrom :
  (pi unrestricted scope : (family NameScope) .
    (pi unrestricted identifier : Bytes . (pi unrestricted index : Nat . (family NameLookupResult)))) =
  (lambda unrestricted scope : (family NameScope) .
    (eliminate
      NameScope
      (lambda unrestricted value : (family NameScope) .
        (pi unrestricted identifier : Bytes .
          (pi unrestricted index : Nat . (family NameLookupResult))))
      scope
      (branch
        EmptyNameScope
        .
        (lambda unrestricted identifier : Bytes .
          (lambda unrestricted index : Nat . (constructor NameLookupResult NameNotFound identifier))))
      (branch
        NameScopeBinding
        bindingIdentifier
        outerScope
        ih_outerScope
        .
        (lambda unrestricted identifier : Bytes .
          (lambda unrestricted index : Nat .
            (app
              (nat-eliminate
                (lambda unrestricted condition : Nat .
                  (pi unrestricted ignored : Nat . (family NameLookupResult)))
                (lambda unrestricted ignored : Nat . (ih_outerScope identifier (succ index)))
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (pi unrestricted ignored : Nat . (family NameLookupResult)) .
                    (lambda unrestricted ignored : Nat .
                      (constructor NameLookupResult NameFound index))))
                (coreBytesEqual bindingIdentifier identifier))
              zero))))))

def lookupName :
  (pi unrestricted scope : (family NameScope) .
    (pi unrestricted identifier : Bytes . (family NameLookupResult))) =
  (lambda unrestricted scope : (family NameScope) .
    (lambda unrestricted identifier : Bytes . (lookupNameFrom scope identifier zero)))

def combineResolvedPi :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domainResult : (family CoreResolutionResult) .
      (pi unrestricted codomainResult : (family CoreResolutionResult) .
        (family CoreResolutionResult)))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domainResult : (family CoreResolutionResult) .
      (lambda unrestricted codomainResult : (family CoreResolutionResult) .
        (eliminate
          CoreResolutionResult
          (lambda unrestricted value : (family CoreResolutionResult) .
            (family CoreResolutionResult))
          domainResult
          (branch
            CoreResolved
            domain
            .
            (eliminate
              CoreResolutionResult
              (lambda unrestricted value : (family CoreResolutionResult) .
                (family CoreResolutionResult))
              codomainResult
              (branch
                CoreResolved
                codomain
                .
                (constructor
                  CoreResolutionResult
                  CoreResolved
                  (constructor CoreTerm CorePi multiplicity domain codomain)))
              (branch
                CoreResolutionFailed
                identifier
                .
                (constructor CoreResolutionResult CoreResolutionFailed identifier))))
          (branch
            CoreResolutionFailed
            identifier
            .
            (constructor CoreResolutionResult CoreResolutionFailed identifier))))))

def combineResolvedLambda :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domainResult : (family CoreResolutionResult) .
      (pi unrestricted bodyResult : (family CoreResolutionResult) . (family CoreResolutionResult)))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domainResult : (family CoreResolutionResult) .
      (lambda unrestricted bodyResult : (family CoreResolutionResult) .
        (eliminate
          CoreResolutionResult
          (lambda unrestricted value : (family CoreResolutionResult) .
            (family CoreResolutionResult))
          domainResult
          (branch
            CoreResolved
            domain
            .
            (eliminate
              CoreResolutionResult
              (lambda unrestricted value : (family CoreResolutionResult) .
                (family CoreResolutionResult))
              bodyResult
              (branch
                CoreResolved
                body
                .
                (constructor
                  CoreResolutionResult
                  CoreResolved
                  (constructor CoreTerm CoreLambda multiplicity domain body)))
              (branch
                CoreResolutionFailed
                identifier
                .
                (constructor CoreResolutionResult CoreResolutionFailed identifier))))
          (branch
            CoreResolutionFailed
            identifier
            .
            (constructor CoreResolutionResult CoreResolutionFailed identifier))))))

def combineResolvedLetValue =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted annotation : (family CoreTerm) .
      (lambda unrestricted valueResult : (family CoreResolutionResult) .
        (lambda unrestricted bodyResult : (family CoreResolutionResult) .
          (eliminate
            CoreResolutionResult
            (lambda unrestricted current : (family CoreResolutionResult) .
              (family CoreResolutionResult))
            valueResult
            (branch
              CoreResolved
              value
              .
              (eliminate
                CoreResolutionResult
                (lambda unrestricted current : (family CoreResolutionResult) .
                  (family CoreResolutionResult))
                bodyResult
                (branch
                  CoreResolved
                  body
                  .
                  (constructor
                    CoreResolutionResult
                    CoreResolved
                    (constructor CoreTerm CoreLet multiplicity annotation value body)))
                (branch
                  CoreResolutionFailed
                  identifier
                  .
                  (constructor CoreResolutionResult CoreResolutionFailed identifier))))
            (branch
              CoreResolutionFailed
              identifier
              .
              (constructor CoreResolutionResult CoreResolutionFailed identifier)))))))

def combineResolvedLet =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted annotationResult : (family CoreResolutionResult) .
      (lambda unrestricted valueResult : (family CoreResolutionResult) .
        (lambda unrestricted bodyResult : (family CoreResolutionResult) .
          (eliminate
            CoreResolutionResult
            (lambda unrestricted current : (family CoreResolutionResult) .
              (family CoreResolutionResult))
            annotationResult
            (branch
              CoreResolved
              annotation
              .
              (combineResolvedLetValue multiplicity annotation valueResult bodyResult))
            (branch
              CoreResolutionFailed
              identifier
              .
              (constructor CoreResolutionResult CoreResolutionFailed identifier)))))))

def combineResolvedApplication :
  (pi unrestricted functionResult : (family CoreResolutionResult) .
    (pi unrestricted argumentResult : (family CoreResolutionResult) . (family CoreResolutionResult))) =
  (lambda unrestricted functionResult : (family CoreResolutionResult) .
    (lambda unrestricted argumentResult : (family CoreResolutionResult) .
      (eliminate
        CoreResolutionResult
        (lambda unrestricted value : (family CoreResolutionResult) . (family CoreResolutionResult))
        functionResult
        (branch
          CoreResolved
          function
          .
          (eliminate
            CoreResolutionResult
            (lambda unrestricted value : (family CoreResolutionResult) .
              (family CoreResolutionResult))
            argumentResult
            (branch
              CoreResolved
              argument
              .
              (constructor
                CoreResolutionResult
                CoreResolved
                (constructor CoreTerm CoreApplication function argument)))
            (branch
              CoreResolutionFailed
              identifier
              .
              (constructor CoreResolutionResult CoreResolutionFailed identifier))))
        (branch
          CoreResolutionFailed
          identifier
          .
          (constructor CoreResolutionResult CoreResolutionFailed identifier)))))

def combineResolvedNaturalSuccessor :
  (pi unrestricted predecessorResult : (family CoreResolutionResult) .
    (family CoreResolutionResult)) =
  (lambda unrestricted predecessorResult : (family CoreResolutionResult) .
    (eliminate
      CoreResolutionResult
      (lambda unrestricted result : (family CoreResolutionResult) . (family CoreResolutionResult))
      predecessorResult
      (branch
        CoreResolved
        predecessor
        .
        (constructor
          CoreResolutionResult
          CoreResolved
          (constructor CoreTerm CoreNaturalSuccessor predecessor)))
      (branch
        CoreResolutionFailed
        identifier
        .
        (constructor CoreResolutionResult CoreResolutionFailed identifier))))

def combineResolvedTermSequence :
  (pi unrestricted headResult : (family CoreResolutionResult) .
    (pi unrestricted tailResult : (family CoreResolutionResult) . (family CoreResolutionResult))) =
  (lambda unrestricted headResult : (family CoreResolutionResult) .
    (lambda unrestricted tailResult : (family CoreResolutionResult) .
      (eliminate
        CoreResolutionResult
        (lambda unrestricted value : (family CoreResolutionResult) . (family CoreResolutionResult))
        headResult
        (branch
          CoreResolved
          head
          .
          (eliminate
            CoreResolutionResult
            (lambda unrestricted value : (family CoreResolutionResult) .
              (family CoreResolutionResult))
            tailResult
            (branch
              CoreResolved
              tail
              .
              (constructor
                CoreResolutionResult
                CoreResolved
                (constructor CoreTerm CoreTermSequenceNext head tail)))
            (branch
              CoreResolutionFailed
              identifier
              .
              (constructor CoreResolutionResult CoreResolutionFailed identifier))))
        (branch
          CoreResolutionFailed
          identifier
          .
          (constructor CoreResolutionResult CoreResolutionFailed identifier)))))

def combineResolvedFamilyApplication :
  (pi unrestricted familyName : Bytes .
    (pi unrestricted argumentResult : (family CoreResolutionResult) . (family CoreResolutionResult))) =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted argumentResult : (family CoreResolutionResult) .
      (eliminate
        CoreResolutionResult
        (lambda unrestricted value : (family CoreResolutionResult) . (family CoreResolutionResult))
        argumentResult
        (branch
          CoreResolved
          arguments
          .
          (constructor
            CoreResolutionResult
            CoreResolved
            (constructor CoreTerm CoreFamilyApplication familyName arguments)))
        (branch
          CoreResolutionFailed
          identifier
          .
          (constructor CoreResolutionResult CoreResolutionFailed identifier)))))

def combineResolvedConstructorApplication :
  (pi unrestricted familyName : Bytes .
    (pi unrestricted constructorName : Bytes .
      (pi unrestricted argumentResult : (family CoreResolutionResult) .
        (family CoreResolutionResult)))) =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted constructorName : Bytes .
      (lambda unrestricted argumentResult : (family CoreResolutionResult) .
        (eliminate
          CoreResolutionResult
          (lambda unrestricted value : (family CoreResolutionResult) .
            (family CoreResolutionResult))
          argumentResult
          (branch
            CoreResolved
            arguments
            .
            (constructor
              CoreResolutionResult
              CoreResolved
              (constructor CoreTerm CoreConstructorApplication familyName constructorName arguments)))
          (branch
            CoreResolutionFailed
            identifier
            .
            (constructor CoreResolutionResult CoreResolutionFailed identifier))))))

def inspectNamedCoreVariable =
  (lambda unrestricted term : (family NamedCoreTerm) .
    (eliminate
      NamedCoreTerm
      (lambda unrestricted value : (family NamedCoreTerm) . (family NamedCoreVariableInspection))
      term
      (branch
        NamedCoreUniverse
        level
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreNatural
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreNaturalLiteral
        value
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreVariable
        identifier
        .
        (constructor NamedCoreVariableInspection NamedCoreVariableFound identifier))
      (branch
        NamedCorePi
        multiplicity
        binder
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreLambda
        multiplicity
        binder
        domain
        body
        ih_domain
        ih_body
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreLet
        multiplicity
        binder
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch NamedCoreByte . (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreByteLiteral
        value
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch NamedCoreBytes . (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreBytesLiteral
        value
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreTermSequenceEnd
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreEliminatorBranch
        constructorName
        binderNames
        body
        ih_binderNames
        ih_body
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))
      (branch
        NamedCoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor NamedCoreVariableInspection NamedCoreTermIsNotVariable))))

def extendEliminatorBranchScope =
  (lambda unrestricted identifier : Bytes .
    (lambda unrestricted tailResolution : (family EliminatorBranchScopeResolution) .
      (eliminate
        EliminatorBranchScopeResolution
        (lambda unrestricted value : (family EliminatorBranchScopeResolution) .
          (family EliminatorBranchScopeResolution))
        tailResolution
        (branch
          EliminatorBranchScopeResolved
          scope
          binderCount
          .
          (constructor
            EliminatorBranchScopeResolution
            EliminatorBranchScopeResolved
            (constructor NameScope NameScopeBinding identifier scope)
            (succ binderCount)))
        (branch
          EliminatorBranchScopeRejected
          .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))))

def resolveEliminatorBranchScope =
  (lambda unrestricted binders : (family NamedCoreTerm) .
    (eliminate
      NamedCoreTerm
      (lambda unrestricted value : (family NamedCoreTerm) .
        (pi unrestricted scope : (family NameScope) . (family EliminatorBranchScopeResolution)))
      binders
      (branch
        NamedCoreUniverse
        level
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreNatural
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreNaturalLiteral
        value
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreVariable
        identifier
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCorePi
        multiplicity
        binder
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreLambda
        multiplicity
        binder
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreLet
        multiplicity
        binder
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreByte
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreByteLiteral
        value
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreBytes
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreBytesLiteral
        value
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreTermSequenceEnd
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeResolved scope zero)))
      (branch
        NamedCoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted scope : (family NameScope) .
          (eliminate
            NamedCoreVariableInspection
            (lambda unrestricted inspection : (family NamedCoreVariableInspection) .
              (family EliminatorBranchScopeResolution))
            (inspectNamedCoreVariable head)
            (branch
              NamedCoreVariableFound
              identifier
              .
              (extendEliminatorBranchScope identifier (ih_tail scope)))
            (branch
              NamedCoreTermIsNotVariable
              .
              (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))))
      (branch
        NamedCoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreEliminatorBranch
        constructorName
        binderNames
        body
        ih_binderNames
        ih_body
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))
      (branch
        NamedCoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor EliminatorBranchScopeResolution EliminatorBranchScopeRejected)))))

def finishResolvedEliminatorBranch =
  (lambda unrestricted constructorName : Bytes .
    (lambda unrestricted binderCount : Nat .
      (lambda unrestricted bodyResult : (family CoreResolutionResult) .
        (eliminate
          CoreResolutionResult
          (lambda unrestricted value : (family CoreResolutionResult) .
            (family CoreResolutionResult))
          bodyResult
          (branch
            CoreResolved
            body
            .
            (constructor
              CoreResolutionResult
              CoreResolved
              (constructor CoreTerm CoreEliminatorBranch constructorName binderCount body)))
          (branch
            CoreResolutionFailed
            identifier
            .
            (constructor CoreResolutionResult CoreResolutionFailed identifier))))))

def finishResolvedEliminatorBranchScope =
  (lambda unrestricted constructorName : Bytes .
    (lambda unrestricted resolveBody : (pi unrestricted scope : (family NameScope) . (family CoreResolutionResult)) .
      (lambda unrestricted scopeResolution : (family EliminatorBranchScopeResolution) .
        (eliminate
          EliminatorBranchScopeResolution
          (lambda unrestricted value : (family EliminatorBranchScopeResolution) .
            (family CoreResolutionResult))
          scopeResolution
          (branch
            EliminatorBranchScopeResolved
            scope
            binderCount
            .
            (finishResolvedEliminatorBranch constructorName binderCount (resolveBody scope)))
          (branch
            EliminatorBranchScopeRejected
            .
            (constructor CoreResolutionResult CoreResolutionFailed constructorName))))))

def combineResolvedEliminator =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted motiveResult : (family CoreResolutionResult) .
      (lambda unrestricted scrutineeResult : (family CoreResolutionResult) .
        (lambda unrestricted branchesResult : (family CoreResolutionResult) .
          (eliminate
            CoreResolutionResult
            (lambda unrestricted value : (family CoreResolutionResult) .
              (family CoreResolutionResult))
            motiveResult
            (branch
              CoreResolved
              motive
              .
              (eliminate
                CoreResolutionResult
                (lambda unrestricted value : (family CoreResolutionResult) .
                  (family CoreResolutionResult))
                scrutineeResult
                (branch
                  CoreResolved
                  scrutinee
                  .
                  (eliminate
                    CoreResolutionResult
                    (lambda unrestricted value : (family CoreResolutionResult) .
                      (family CoreResolutionResult))
                    branchesResult
                    (branch
                      CoreResolved
                      branches
                      .
                      (constructor
                        CoreResolutionResult
                        CoreResolved
                        (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)))
                    (branch
                      CoreResolutionFailed
                      identifier
                      .
                      (constructor CoreResolutionResult CoreResolutionFailed identifier))))
                (branch
                  CoreResolutionFailed
                  identifier
                  .
                  (constructor CoreResolutionResult CoreResolutionFailed identifier))))
            (branch
              CoreResolutionFailed
              identifier
              .
              (constructor CoreResolutionResult CoreResolutionFailed identifier)))))))

def combineResolvedArithmetic =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted functionResult : (family CoreResolutionResult) .
      (lambda unrestricted argumentResult : (family CoreResolutionResult) .
        (eliminate
          CoreResolutionResult
          (lambda unrestricted value : (family CoreResolutionResult) .
            (family CoreResolutionResult))
          functionResult
          (branch
            CoreResolved
            function
            .
            (eliminate
              CoreResolutionResult
              (lambda unrestricted value : (family CoreResolutionResult) .
                (family CoreResolutionResult))
              argumentResult
              (branch
                CoreResolved
                argument
                .
                (constructor
                  CoreResolutionResult
                  CoreResolved
                  (constructor CoreTerm CoreNaturalArithmetic operation function argument)))
              (branch
                CoreResolutionFailed
                identifier
                .
                (constructor CoreResolutionResult CoreResolutionFailed identifier))))
          (branch
            CoreResolutionFailed
            identifier
            .
            (constructor CoreResolutionResult CoreResolutionFailed identifier))))))

def resolveNamedCore :
  (pi unrestricted term : (family NamedCoreTerm) .
    (pi unrestricted scope : (family NameScope) . (family CoreResolutionResult))) =
  (lambda unrestricted term : (family NamedCoreTerm) .
    (eliminate
      NamedCoreTerm
      (lambda unrestricted value : (family NamedCoreTerm) .
        (pi unrestricted scope : (family NameScope) . (family CoreResolutionResult)))
      term
      (branch
        NamedCoreUniverse
        level
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor CoreResolutionResult CoreResolved (constructor CoreTerm CoreUniverse level))))
      (branch
        NamedCoreNatural
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor CoreResolutionResult CoreResolved (constructor CoreTerm CoreNatural))))
      (branch
        NamedCoreNaturalLiteral
        value
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor
            CoreResolutionResult
            CoreResolved
            (constructor CoreTerm CoreNaturalLiteral value))))
      (branch
        NamedCoreVariable
        identifier
        .
        (lambda unrestricted scope : (family NameScope) .
          (eliminate
            NameLookupResult
            (lambda unrestricted result : (family NameLookupResult) . (family CoreResolutionResult))
            (lookupName scope identifier)
            (branch
              NameFound
              index
              .
              (constructor CoreResolutionResult CoreResolved (constructor CoreTerm CoreBound index)))
            (branch NameNotFound missingIdentifier . (resolveCorePrimitiveName missingIdentifier)))))
      (branch
        NamedCorePi
        multiplicity
        binder
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedPi
            multiplicity
            (ih_domain scope)
            (ih_codomain (constructor NameScope NameScopeBinding binder scope)))))
      (branch
        NamedCoreLambda
        multiplicity
        binder
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedLambda
            multiplicity
            (ih_domain scope)
            (ih_body (constructor NameScope NameScopeBinding binder scope)))))
      (branch
        NamedCoreLet
        multiplicity
        binder
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedLet
            multiplicity
            (ih_annotation scope)
            (ih_value scope)
            (ih_body (constructor NameScope NameScopeBinding binder scope)))))
      (branch
        NamedCoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedApplication (ih_function scope) (ih_argument scope))))
      (branch
        NamedCoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedArithmetic operation (ih_function scope) (ih_argument scope))))
      (branch
        NamedCoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedNaturalSuccessor (ih_predecessor scope))))
      (branch
        NamedCoreByte
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor CoreResolutionResult CoreResolved (constructor CoreTerm CoreByte))))
      (branch
        NamedCoreByteLiteral
        value
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor
            CoreResolutionResult
            CoreResolved
            (constructor CoreTerm CoreByteLiteral value))))
      (branch
        NamedCoreBytes
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor CoreResolutionResult CoreResolved (constructor CoreTerm CoreBytes))))
      (branch
        NamedCoreBytesLiteral
        value
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor
            CoreResolutionResult
            CoreResolved
            (constructor CoreTerm CoreBytesLiteral value))))
      (branch
        NamedCoreTermSequenceEnd
        .
        (lambda unrestricted scope : (family NameScope) .
          (constructor CoreResolutionResult CoreResolved (constructor CoreTerm CoreTermSequenceEnd))))
      (branch
        NamedCoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedTermSequence (ih_head scope) (ih_tail scope))))
      (branch
        NamedCoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedFamilyApplication familyName (ih_arguments scope))))
      (branch
        NamedCoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedConstructorApplication familyName constructorName (ih_arguments scope))))
      (branch
        NamedCoreEliminatorBranch
        constructorName
        binderNames
        body
        ih_binderNames
        ih_body
        .
        (lambda unrestricted scope : (family NameScope) .
          (finishResolvedEliminatorBranchScope
            constructorName
            ih_body
            (resolveEliminatorBranchScope binderNames scope))))
      (branch
        NamedCoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted scope : (family NameScope) .
          (combineResolvedEliminator
            familyName
            (ih_motive scope)
            (ih_scrutinee scope)
            (ih_branches scope))))))

def resolveClosedNamedCore :
  (pi unrestricted term : (family NamedCoreTerm) . (family CoreResolutionResult)) =
  (lambda unrestricted term : (family NamedCoreTerm) .
    (resolveNamedCore term (constructor NameScope EmptyNameScope)))

-- Part of `shiftCore`, lifted out to keep it inside the §28.3 size and
-- nesting limits; the parameters are the locals it still needs.
def shiftCorePart1 =
  (lambda unrestricted index : Nat .
    (lambda unrestricted cutoff : Nat .
      (lambda unrestricted amount : Nat .
        (nat-eliminate
          (lambda unrestricted condition : Nat . (family CoreTerm))
          (constructor CoreTerm CoreBound (naturalAdd index amount))
          (lambda unrestricted predecessor : Nat .
            (lambda unrestricted induction : (family CoreTerm) .
              (constructor CoreTerm CoreBound index)))
          (nat-less-than index cutoff)))))

def shiftCore :
  (pi unrestricted term : (family CoreTerm) .
    (pi unrestricted cutoff : Nat . (pi unrestricted amount : Nat . (family CoreTerm)))) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted cutoff : Nat . (pi unrestricted amount : Nat . (family CoreTerm))))
      term
      (branch
        CoreUniverse
        level
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreUniverse level))))
      (branch
        CoreNatural
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreNatural))))
      (branch
        CoreNaturalLiteral
        value
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreNaturalLiteral value))))
      (branch CoreBound index . (shiftCorePart1 index))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CorePi
              multiplicity
              (ih_domain cutoff amount)
              (ih_codomain (succ cutoff) amount)))))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreLambda
              multiplicity
              (ih_domain cutoff amount)
              (ih_body (succ cutoff) amount)))))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreLet
              multiplicity
              (ih_annotation cutoff amount)
              (ih_value cutoff amount)
              (ih_body (succ cutoff) amount)))))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreApplication
              (ih_function cutoff amount)
              (ih_argument cutoff amount)))))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreNaturalArithmetic
              operation
              (ih_function cutoff amount)
              (ih_argument cutoff amount)))))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor CoreTerm CoreNaturalSuccessor (ih_predecessor cutoff amount)))))
      (branch
        CoreByte
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreByte))))
      (branch
        CoreByteLiteral
        value
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreByteLiteral value))))
      (branch
        CoreBytes
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreBytes))))
      (branch
        CoreBytesLiteral
        value
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreBytesLiteral value))))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CorePrimitiveTerm primitive))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat . (constructor CoreTerm CoreTermSequenceEnd))))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreTermSequenceNext
              (ih_head cutoff amount)
              (ih_tail cutoff amount)))))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor CoreTerm CoreFamilyApplication familyName (ih_arguments cutoff amount)))))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreConstructorApplication
              familyName
              constructorName
              (ih_arguments cutoff amount)))))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreEliminatorBranch
              constructorName
              binderCount
              (ih_body (naturalAdd cutoff binderCount) amount)))))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted cutoff : Nat .
          (lambda unrestricted amount : Nat .
            (constructor
              CoreTerm
              CoreEliminator
              familyName
              (ih_motive cutoff amount)
              (ih_scrutinee cutoff amount)
              (ih_branches cutoff amount)))))))

def shiftCoreBy :
  (pi unrestricted amount : Nat . (pi unrestricted term : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted amount : Nat .
    (lambda unrestricted term : (family CoreTerm) . (shiftCore term zero amount)))

-- Part of `substituteCore`, lifted out to keep it inside the §28.3 size and
-- nesting limits; the parameters are the locals it still needs.
def substituteCorePart1 =
  (lambda unrestricted index : Nat .
    (lambda unrestricted depth : Nat .
      (lambda unrestricted replacement : (family CoreTerm) .
        (nat-eliminate
          (lambda unrestricted equalCondition : Nat . (family CoreTerm))
          (nat-eliminate
            (lambda unrestricted greaterCondition : Nat . (family CoreTerm))
            (constructor CoreTerm CoreBound index)
            (lambda unrestricted predecessor : Nat .
              (lambda unrestricted induction : (family CoreTerm) .
                (constructor CoreTerm CoreBound (naturalPredecessor index))))
            (nat-less-than depth index))
          (lambda unrestricted predecessor : Nat .
            (lambda unrestricted induction : (family CoreTerm) . (shiftCore replacement zero depth)))
          (naturalEqual index depth)))))

-- Part of `substituteCore`, lifted out to keep it inside the §28.3 size and
-- nesting limits; the parameters are the locals it still needs.
def substituteCorePart2 =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted ih_domain : (pi unrestricted depth : Nat . (pi unrestricted replacement : (family CoreTerm) . (family CoreTerm))) .
      (lambda unrestricted ih_codomain : (pi unrestricted depth : Nat . (pi unrestricted replacement : (family CoreTerm) . (family CoreTerm))) .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CorePi
              multiplicity
              (ih_domain depth replacement)
              (ih_codomain (succ depth) replacement)))))))

def substituteCore :
  (pi unrestricted term : (family CoreTerm) .
    (pi unrestricted depth : Nat .
      (pi unrestricted replacement : (family CoreTerm) . (family CoreTerm)))) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted depth : Nat .
          (pi unrestricted replacement : (family CoreTerm) . (family CoreTerm))))
      term
      (branch
        CoreUniverse
        level
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreUniverse level))))
      (branch
        CoreNatural
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) . (constructor CoreTerm CoreNatural))))
      (branch
        CoreNaturalLiteral
        value
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreNaturalLiteral value))))
      (branch CoreBound index . (substituteCorePart1 index))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (substituteCorePart2 multiplicity ih_domain ih_codomain))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreLambda
              multiplicity
              (ih_domain depth replacement)
              (ih_body (succ depth) replacement)))))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreLet
              multiplicity
              (ih_annotation depth replacement)
              (ih_value depth replacement)
              (ih_body (succ depth) replacement)))))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreApplication
              (ih_function depth replacement)
              (ih_argument depth replacement)))))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreNaturalArithmetic
              operation
              (ih_function depth replacement)
              (ih_argument depth replacement)))))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreNaturalSuccessor (ih_predecessor depth replacement)))))
      (branch
        CoreByte
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) . (constructor CoreTerm CoreByte))))
      (branch
        CoreByteLiteral
        value
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreByteLiteral value))))
      (branch
        CoreBytes
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) . (constructor CoreTerm CoreBytes))))
      (branch
        CoreBytesLiteral
        value
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreBytesLiteral value))))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CorePrimitiveTerm primitive))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreTermSequenceEnd))))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreTermSequenceNext
              (ih_head depth replacement)
              (ih_tail depth replacement)))))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor CoreTerm CoreFamilyApplication familyName (ih_arguments depth replacement)))))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreConstructorApplication
              familyName
              constructorName
              (ih_arguments depth replacement)))))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreEliminatorBranch
              constructorName
              binderCount
              (ih_body (naturalAdd depth binderCount) replacement)))))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreEliminator
              familyName
              (ih_motive depth replacement)
              (ih_scrutinee depth replacement)
              (ih_branches depth replacement)))))))

def substituteCoreTop :
  (pi unrestricted replacement : (family CoreTerm) .
    (pi unrestricted body : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted replacement : (family CoreTerm) .
    (lambda unrestricted body : (family CoreTerm) . (substituteCore body zero replacement)))

def reduceCoreTypeApplication :
  (pi unrestricted function : (family CoreTerm) .
    (pi unrestricted argument : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted function : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted argument : (family CoreTerm) . (family CoreTerm)))
      function
      (branch
        CoreUniverse
        level
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreNatural
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreNaturalLiteral
        value
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreBound
        index
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted argument : (family CoreTerm) . (substituteCoreTop argument body)))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreApplication
        nestedFunction
        nestedArgument
        ih_nestedFunction
        ih_nestedArgument
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreNaturalArithmetic
        operation
        nestedFunction
        nestedArgument
        ih_nestedFunction
        ih_nestedArgument
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreByte
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreByteLiteral
        value
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreBytes
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreBytesLiteral
        value
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted argument : (family CoreTerm) .
          (constructor CoreTerm CoreApplication function argument)))))

def inspectCoreLiteral :
  (pi unrestricted term : (family CoreTerm) . (family CoreLiteralInspection)) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family CoreLiteralInspection))
      term
      (branch CoreUniverse level . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch CoreNatural . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreNaturalLiteral
        value
        .
        (constructor CoreLiteralInspection CoreNaturalInspected value))
      (branch CoreBound index . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch CoreByte . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch CoreByteLiteral value . (constructor CoreLiteralInspection CoreByteInspected value))
      (branch CoreBytes . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch CoreBytesLiteral value . (constructor CoreLiteralInspection CoreBytesInspected value))
      (branch CorePrimitiveTerm primitive . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch CoreTermSequenceEnd . (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor CoreLiteralInspection CoreNotLiteral))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor CoreLiteralInspection CoreNotLiteral))))

def inspectCoreArithmeticRight =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : Bytes .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreLiteralInspection
          (lambda unrestricted current : (family CoreLiteralInspection) .
            (family CoreArithmeticInspection))
          (inspectCoreLiteral right)
          (branch
            CoreNaturalInspected
            digits
            .
            (eliminate
              NaturalMagnitudeResult
              (lambda unrestricted result : (family NaturalMagnitudeResult) .
                (family CoreArithmeticInspection))
              (evaluateCoreNaturalOperation operation left digits)
              (branch
                NaturalMagnitudeAccepted
                value
                .
                (constructor CoreArithmeticInspection CoreArithmeticValue value))
              (branch
                NaturalMagnitudeRejected
                failure
                .
                (constructor CoreArithmeticInspection CoreArithmeticRejected failure))))
          (branch
            CoreByteInspected
            value
            .
            (constructor CoreArithmeticInspection CoreArithmeticNeutral))
          (branch
            CoreBytesInspected
            value
            .
            (constructor CoreArithmeticInspection CoreArithmeticNeutral))
          (branch CoreNotLiteral . (constructor CoreArithmeticInspection CoreArithmeticNeutral))))))

-- Callers normalize the operands; an open operand remains neutral.
def inspectCoreArithmetic =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreLiteralInspection
          (lambda unrestricted current : (family CoreLiteralInspection) .
            (family CoreArithmeticInspection))
          (inspectCoreLiteral left)
          (branch CoreNaturalInspected digits . (inspectCoreArithmeticRight operation digits right))
          (branch
            CoreByteInspected
            value
            .
            (constructor CoreArithmeticInspection CoreArithmeticNeutral))
          (branch
            CoreBytesInspected
            value
            .
            (constructor CoreArithmeticInspection CoreArithmeticNeutral))
          (branch CoreNotLiteral . (constructor CoreArithmeticInspection CoreArithmeticNeutral))))))

-- A term-returning reducer never manufactures an inadmissible literal.
-- Checked inference and erasure expose the explicit rejection separately.
def reduceCoreArithmetic =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreArithmeticInspection
          (lambda unrestricted result : (family CoreArithmeticInspection) . (family CoreTerm))
          (inspectCoreArithmetic operation left right)
          (branch CoreArithmeticValue digits . (constructor CoreTerm CoreNaturalLiteral digits))
          (branch
            CoreArithmeticNeutral
            .
            (constructor CoreTerm CoreNaturalArithmetic operation left right))
          (branch
            CoreArithmeticRejected
            failure
            .
            (constructor CoreTerm CoreNaturalArithmetic operation left right))))))

def reduceCoreNaturalSuccessor :
  (pi unrestricted predecessor : (family CoreTerm) . (family CoreTerm)) =
  (lambda unrestricted predecessor : (family CoreTerm) .
    (eliminate
      CoreLiteralInspection
      (lambda unrestricted inspection : (family CoreLiteralInspection) . (family CoreTerm))
      (inspectCoreLiteral predecessor)
      (branch
        CoreNaturalInspected
        value
        .
        (constructor
          CoreTerm
          CoreNaturalLiteral
          (Compiler.NaturalMagnitudeArithmetic/magnitudeSuccessor value)))
      (branch CoreByteInspected value . (constructor CoreTerm CoreNaturalSuccessor predecessor))
      (branch CoreBytesInspected value . (constructor CoreTerm CoreNaturalSuccessor predecessor))
      (branch CoreNotLiteral . (constructor CoreTerm CoreNaturalSuccessor predecessor))))

-- Closed successors normalize through the same literal reducer as evaluation.
def normalizeCoreType : (pi unrestricted term : (family CoreTerm) . (family CoreTerm)) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family CoreTerm))
      term
      (branch CoreUniverse level . (constructor CoreTerm CoreUniverse level))
      (branch CoreNatural . (constructor CoreTerm CoreNatural))
      (branch CoreNaturalLiteral value . (constructor CoreTerm CoreNaturalLiteral value))
      (branch CoreBound index . (constructor CoreTerm CoreBound index))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor CoreTerm CorePi multiplicity ih_domain ih_codomain))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor CoreTerm CoreLambda multiplicity ih_domain ih_body))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (substituteCoreTop ih_value ih_body))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (reduceCoreTypeApplication ih_function ih_argument))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (reduceCoreArithmetic operation ih_function ih_argument))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (reduceCoreNaturalSuccessor ih_predecessor))
      (branch CoreByte . (constructor CoreTerm CoreByte))
      (branch CoreByteLiteral value . (constructor CoreTerm CoreByteLiteral value))
      (branch CoreBytes . (constructor CoreTerm CoreBytes))
      (branch CoreBytesLiteral value . (constructor CoreTerm CoreBytesLiteral value))
      (branch CorePrimitiveTerm primitive . (constructor CoreTerm CorePrimitiveTerm primitive))
      (branch CoreTermSequenceEnd . (constructor CoreTerm CoreTermSequenceEnd))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor CoreTerm CoreTermSequenceNext ih_head ih_tail))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor CoreTerm CoreFamilyApplication familyName ih_arguments))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor CoreTerm CoreConstructorApplication familyName constructorName ih_arguments))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor CoreTerm CoreEliminatorBranch constructorName binderCount ih_body))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor CoreTerm CoreEliminator familyName ih_motive ih_scrutinee ih_branches))))

def coreUniverseEqual :
  (pi unrestricted level : Nat . (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted level : Nat .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted value : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse rightLevel . (naturalEqual level rightLevel))
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral value . zero)
        (branch CoreBound index . zero)
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
        (branch CoreByte . zero)
        (branch CoreByteLiteral value . zero)
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral value . zero)
        (branch CorePrimitiveTerm primitive . zero)
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def coreNaturalEqual : (pi unrestricted right : (family CoreTerm) . Nat) =
  (lambda unrestricted right : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . Nat)
      right
      (branch CoreUniverse level . zero)
      (branch CoreNatural . (succ zero))
      (branch CoreNaturalLiteral value . zero)
      (branch CoreBound index . zero)
      (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
      (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
      (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
      (branch CoreApplication function argument ih_function ih_argument . zero)
      (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
      (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
      (branch CoreByte . zero)
      (branch CoreByteLiteral value . zero)
      (branch CoreBytes . zero)
      (branch CoreBytesLiteral value . zero)
      (branch CorePrimitiveTerm primitive . zero)
      (branch CoreTermSequenceEnd . zero)
      (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
      (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
      (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
      (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        zero)))

def coreNaturalLiteralEqual :
  (pi unrestricted value : Bytes . (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted value : Bytes .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted term : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse level . zero)
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral rightValue . (bytes-equal value rightValue))
        (branch CoreBound index . zero)
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
        (branch CoreByte . zero)
        (branch CoreByteLiteral rightValue . zero)
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral rightValue . zero)
        (branch CorePrimitiveTerm primitive . zero)
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def coreBoundEqual :
  (pi unrestricted index : Nat . (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted index : Nat .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted term : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse level . zero)
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral value . zero)
        (branch CoreBound rightIndex . (naturalEqual index rightIndex))
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
        (branch CoreByte . zero)
        (branch CoreByteLiteral value . zero)
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral value . zero)
        (branch CorePrimitiveTerm primitive . zero)
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def corePiEqual :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domainEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (pi unrestricted codomainEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (pi unrestricted right : (family CoreTerm) . Nat)))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domainEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted codomainEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted right : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted term : (family CoreTerm) . Nat)
            right
            (branch CoreUniverse level . zero)
            (branch CoreNatural . zero)
            (branch CoreNaturalLiteral value . zero)
            (branch CoreBound index . zero)
            (branch
              CorePi
              rightMultiplicity
              rightDomain
              rightCodomain
              ih_rightDomain
              ih_rightCodomain
              .
              (coreNaturalAnd
                (multiplicityEqual multiplicity rightMultiplicity)
                (coreNaturalAnd (domainEqual rightDomain) (codomainEqual rightCodomain))))
            (branch
              CoreLambda
              rightMultiplicity
              rightDomain
              rightBody
              ih_rightDomain
              ih_rightBody
              .
              zero)
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              zero)
            (branch CoreApplication function argument ih_function ih_argument . zero)
            (branch
              CoreNaturalArithmetic
              operation
              function
              argument
              ih_function
              ih_argument
              .
              zero)
            (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
            (branch CoreByte . zero)
            (branch CoreByteLiteral value . zero)
            (branch CoreBytes . zero)
            (branch CoreBytesLiteral value . zero)
            (branch CorePrimitiveTerm primitive . zero)
            (branch CoreTermSequenceEnd . zero)
            (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
            (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
            (branch
              CoreConstructorApplication
              familyName
              constructorName
              arguments
              ih_arguments
              .
              zero)
            (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
            (branch
              CoreEliminator
              familyName
              motive
              scrutinee
              branches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              zero))))))

def coreLambdaEqual :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domainEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (pi unrestricted bodyEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (pi unrestricted right : (family CoreTerm) . Nat)))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domainEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted bodyEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted right : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted term : (family CoreTerm) . Nat)
            right
            (branch CoreUniverse level . zero)
            (branch CoreNatural . zero)
            (branch CoreNaturalLiteral value . zero)
            (branch CoreBound index . zero)
            (branch
              CorePi
              rightMultiplicity
              rightDomain
              rightCodomain
              ih_rightDomain
              ih_rightCodomain
              .
              zero)
            (branch
              CoreLambda
              rightMultiplicity
              rightDomain
              rightBody
              ih_rightDomain
              ih_rightBody
              .
              (coreNaturalAnd
                (multiplicityEqual multiplicity rightMultiplicity)
                (coreNaturalAnd (domainEqual rightDomain) (bodyEqual rightBody))))
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              zero)
            (branch CoreApplication function argument ih_function ih_argument . zero)
            (branch
              CoreNaturalArithmetic
              operation
              function
              argument
              ih_function
              ih_argument
              .
              zero)
            (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
            (branch CoreByte . zero)
            (branch CoreByteLiteral value . zero)
            (branch CoreBytes . zero)
            (branch CoreBytesLiteral value . zero)
            (branch CorePrimitiveTerm primitive . zero)
            (branch CoreTermSequenceEnd . zero)
            (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
            (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
            (branch
              CoreConstructorApplication
              familyName
              constructorName
              arguments
              ih_arguments
              .
              zero)
            (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
            (branch
              CoreEliminator
              familyName
              motive
              scrutinee
              branches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              zero))))))

def coreApplicationEqual :
  (pi unrestricted functionEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
    (pi unrestricted argumentEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (pi unrestricted right : (family CoreTerm) . Nat))) =
  (lambda unrestricted functionEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
    (lambda unrestricted argumentEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreTerm
          (lambda unrestricted term : (family CoreTerm) . Nat)
          right
          (branch CoreUniverse level . zero)
          (branch CoreNatural . zero)
          (branch CoreNaturalLiteral value . zero)
          (branch CoreBound index . zero)
          (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
          (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
          (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
          (branch
            CoreApplication
            rightFunction
            rightArgument
            ih_rightFunction
            ih_rightArgument
            .
            (coreNaturalAnd (functionEqual rightFunction) (argumentEqual rightArgument)))
          (branch
            CoreNaturalArithmetic
            operation
            rightFunction
            rightArgument
            ih_rightFunction
            ih_rightArgument
            .
            zero)
          (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
          (branch CoreByte . zero)
          (branch CoreByteLiteral value . zero)
          (branch CoreBytes . zero)
          (branch CoreBytesLiteral value . zero)
          (branch CorePrimitiveTerm primitive . zero)
          (branch CoreTermSequenceEnd . zero)
          (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
          (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
          (branch
            CoreConstructorApplication
            familyName
            constructorName
            arguments
            ih_arguments
            .
            zero)
          (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
          (branch
            CoreEliminator
            familyName
            motive
            scrutinee
            branches
            ih_motive
            ih_scrutinee
            ih_branches
            .
            zero)))))

def coreArithmeticEqual =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted functionEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted argumentEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted right : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted term : (family CoreTerm) . Nat)
            right
            (branch CoreUniverse level . zero)
            (branch CoreNatural . zero)
            (branch CoreNaturalLiteral value . zero)
            (branch CoreBound index . zero)
            (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
            (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              zero)
            (branch CoreApplication function argument ih_function ih_argument . zero)
            (branch
              CoreNaturalArithmetic
              rightOperation
              rightFunction
              rightArgument
              ih_rightFunction
              ih_rightArgument
              .
              (coreNaturalAnd
                (byte-equal
                  (coreNaturalOperationCode operation)
                  (coreNaturalOperationCode rightOperation))
                (coreNaturalAnd (functionEqual rightFunction) (argumentEqual rightArgument))))
            (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
            (branch CoreByte . zero)
            (branch CoreByteLiteral value . zero)
            (branch CoreBytes . zero)
            (branch CoreBytesLiteral value . zero)
            (branch CorePrimitiveTerm primitive . zero)
            (branch CoreTermSequenceEnd . zero)
            (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
            (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
            (branch
              CoreConstructorApplication
              familyName
              constructorName
              arguments
              ih_arguments
              .
              zero)
            (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
            (branch
              CoreEliminator
              familyName
              motive
              scrutinee
              branches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              zero))))))

def coreNaturalSuccessorEqual :
  (pi unrestricted predecessorEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
    (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted predecessorEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted term : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse level . zero)
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral value . zero)
        (branch CoreBound index . zero)
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . (predecessorEqual predecessor))
        (branch CoreByte . zero)
        (branch CoreByteLiteral value . zero)
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral value . zero)
        (branch CorePrimitiveTerm primitive . zero)
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def coreByteEqual : (pi unrestricted right : (family CoreTerm) . Nat) =
  (lambda unrestricted right : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted term : (family CoreTerm) . Nat)
      right
      (branch CoreUniverse level . zero)
      (branch CoreNatural . zero)
      (branch CoreNaturalLiteral value . zero)
      (branch CoreBound index . zero)
      (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
      (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
      (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
      (branch CoreApplication function argument ih_function ih_argument . zero)
      (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
      (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
      (branch CoreByte . (succ zero))
      (branch CoreByteLiteral value . zero)
      (branch CoreBytes . zero)
      (branch CoreBytesLiteral value . zero)
      (branch CorePrimitiveTerm primitive . zero)
      (branch CoreTermSequenceEnd . zero)
      (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
      (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
      (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
      (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        zero)))

def coreByteLiteralEqual :
  (pi unrestricted value : Byte . (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted value : Byte .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted term : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse level . zero)
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral rightValue . zero)
        (branch CoreBound index . zero)
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
        (branch CoreByte . zero)
        (branch CoreByteLiteral rightValue . (byte-equal value rightValue))
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral rightValue . zero)
        (branch CorePrimitiveTerm primitive . zero)
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def coreBytesTypeEqual : (pi unrestricted right : (family CoreTerm) . Nat) =
  (lambda unrestricted right : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted term : (family CoreTerm) . Nat)
      right
      (branch CoreUniverse level . zero)
      (branch CoreNatural . zero)
      (branch CoreNaturalLiteral value . zero)
      (branch CoreBound index . zero)
      (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
      (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
      (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
      (branch CoreApplication function argument ih_function ih_argument . zero)
      (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
      (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
      (branch CoreByte . zero)
      (branch CoreByteLiteral value . zero)
      (branch CoreBytes . (succ zero))
      (branch CoreBytesLiteral value . zero)
      (branch CorePrimitiveTerm primitive . zero)
      (branch CoreTermSequenceEnd . zero)
      (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
      (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
      (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
      (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        zero)))

def coreBytesLiteralEqual :
  (pi unrestricted value : Bytes . (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted value : Bytes .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted term : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse level . zero)
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral rightValue . zero)
        (branch CoreBound index . zero)
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
        (branch CoreByte . zero)
        (branch CoreByteLiteral rightValue . zero)
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral rightValue . (coreBytesEqual value rightValue))
        (branch CorePrimitiveTerm primitive . zero)
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def corePrimitiveCode : (pi unrestricted primitive : (family CorePrimitive) . Nat) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (eliminate
      CorePrimitive
      (lambda unrestricted value : (family CorePrimitive) . Nat)
      primitive
      (branch CoreByteEqual . zero)
      (branch CoreByteLess . (succ zero))
      (branch CoreNaturalLess . (succ (succ zero)))
      (branch CoreNaturalToByte . (succ (succ (succ zero))))
      (branch CoreByteToNatural . (succ (succ (succ (succ zero)))))
      (branch CoreBytesAppend . (succ (succ (succ (succ (succ zero))))))
      (branch CoreBytesCons . (succ (succ (succ (succ (succ (succ zero)))))))
      (branch CoreBytesLength . (succ (succ (succ (succ (succ (succ (succ zero))))))))
      (branch CoreNaturalEliminate . (succ (succ (succ (succ (succ (succ (succ (succ zero)))))))))
      (branch
        CoreBytesEliminate
        .
        (succ (succ (succ (succ (succ (succ (succ (succ (succ zero))))))))))
      (branch
        CoreBytesEqual
        .
        (succ (succ (succ (succ (succ (succ (succ (succ (succ (succ zero)))))))))))
      (branch CoreFileEffect . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreEffects . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreComputation . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreReturn . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreBind . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreReadFile . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreWriteFile . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreLinuxOpenNode
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreLinuxCloseNode
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreLinuxIoctl
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreLinuxMmap
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreLinuxMunmap
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreBytesSetIndex . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch CoreBytesIndexNonzero . (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesSetFreeIndex
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesBuilderType
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesBuilderEmpty
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesBuilderChunk
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesBuilderAppend
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesBuilderBuild
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreRuntimeImageV4Build
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesHead
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesTail
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
      (branch
        CoreBytesChecksum
        .
        (bytes-length (bytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))))

def corePrimitiveTermEqual :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted term : (family CoreTerm) . Nat)
        right
        (branch CoreUniverse level . zero)
        (branch CoreNatural . zero)
        (branch CoreNaturalLiteral value . zero)
        (branch CoreBound index . zero)
        (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
        (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
        (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
        (branch CoreApplication function argument ih_function ih_argument . zero)
        (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
        (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
        (branch CoreByte . zero)
        (branch CoreByteLiteral value . zero)
        (branch CoreBytes . zero)
        (branch CoreBytesLiteral value . zero)
        (branch
          CorePrimitiveTerm
          rightPrimitive
          .
          (naturalEqual (corePrimitiveCode primitive) (corePrimitiveCode rightPrimitive)))
        (branch CoreTermSequenceEnd . zero)
        (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
        (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
        (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
        (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          zero))))

def coreTermSequenceEndEqual =
  (lambda unrestricted right : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted term : (family CoreTerm) . Nat)
      right
      (branch CoreUniverse level . zero)
      (branch CoreNatural . zero)
      (branch CoreNaturalLiteral value . zero)
      (branch CoreBound index . zero)
      (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
      (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
      (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
      (branch CoreApplication function argument ih_function ih_argument . zero)
      (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
      (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
      (branch CoreByte . zero)
      (branch CoreByteLiteral value . zero)
      (branch CoreBytes . zero)
      (branch CoreBytesLiteral value . zero)
      (branch CorePrimitiveTerm rightPrimitive . zero)
      (branch CoreTermSequenceEnd . (succ zero))
      (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
      (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
      (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
      (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        zero)))

def coreTermSequenceNextEqual =
  (lambda unrestricted headEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
    (lambda unrestricted tailEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreTerm
          (lambda unrestricted term : (family CoreTerm) . Nat)
          right
          (branch CoreUniverse level . zero)
          (branch CoreNatural . zero)
          (branch CoreNaturalLiteral value . zero)
          (branch CoreBound index . zero)
          (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
          (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
          (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
          (branch CoreApplication function argument ih_function ih_argument . zero)
          (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
          (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
          (branch CoreByte . zero)
          (branch CoreByteLiteral value . zero)
          (branch CoreBytes . zero)
          (branch CoreBytesLiteral value . zero)
          (branch CorePrimitiveTerm rightPrimitive . zero)
          (branch CoreTermSequenceEnd . zero)
          (branch
            CoreTermSequenceNext
            head
            tail
            ih_head
            ih_tail
            .
            (coreNaturalAnd (headEqual head) (tailEqual tail)))
          (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
          (branch
            CoreConstructorApplication
            familyName
            constructorName
            arguments
            ih_arguments
            .
            zero)
          (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
          (branch
            CoreEliminator
            familyName
            motive
            scrutinee
            branches
            ih_motive
            ih_scrutinee
            ih_branches
            .
            zero)))))

def coreFamilyApplicationEqual =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted argumentsEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreTerm
          (lambda unrestricted term : (family CoreTerm) . Nat)
          right
          (branch CoreUniverse level . zero)
          (branch CoreNatural . zero)
          (branch CoreNaturalLiteral value . zero)
          (branch CoreBound index . zero)
          (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
          (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
          (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
          (branch CoreApplication function argument ih_function ih_argument . zero)
          (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
          (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
          (branch CoreByte . zero)
          (branch CoreByteLiteral value . zero)
          (branch CoreBytes . zero)
          (branch CoreBytesLiteral value . zero)
          (branch CorePrimitiveTerm rightPrimitive . zero)
          (branch CoreTermSequenceEnd . zero)
          (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
          (branch
            CoreFamilyApplication
            rightFamilyName
            arguments
            ih_arguments
            .
            (coreNaturalAnd (coreBytesEqual familyName rightFamilyName) (argumentsEqual arguments)))
          (branch
            CoreConstructorApplication
            rightFamilyName
            constructorName
            arguments
            ih_arguments
            .
            zero)
          (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
          (branch
            CoreEliminator
            rightFamilyName
            motive
            scrutinee
            branches
            ih_motive
            ih_scrutinee
            ih_branches
            .
            zero)))))

def coreConstructorApplicationEqual =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted constructorName : Bytes .
      (lambda unrestricted argumentsEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted right : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted value : (family CoreTerm) . Nat)
            right
            (branch CoreUniverse level . zero)
            (branch CoreNatural . zero)
            (branch CoreNaturalLiteral value . zero)
            (branch CoreBound index . zero)
            (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
            (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              zero)
            (branch CoreApplication function argument ih_function ih_argument . zero)
            (branch
              CoreNaturalArithmetic
              operation
              function
              argument
              ih_function
              ih_argument
              .
              zero)
            (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
            (branch CoreByte . zero)
            (branch CoreByteLiteral value . zero)
            (branch CoreBytes . zero)
            (branch CoreBytesLiteral value . zero)
            (branch CorePrimitiveTerm primitive . zero)
            (branch CoreTermSequenceEnd . zero)
            (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
            (branch CoreFamilyApplication rightFamilyName arguments ih_arguments . zero)
            (branch
              CoreConstructorApplication
              rightFamilyName
              rightConstructorName
              arguments
              ih_arguments
              .
              (coreNaturalAnd
                (coreNaturalAnd
                  (coreBytesEqual familyName rightFamilyName)
                  (coreBytesEqual constructorName rightConstructorName))
                (argumentsEqual arguments)))
            (branch CoreEliminatorBranch rightConstructorName binderCount body ih_body . zero)
            (branch
              CoreEliminator
              rightFamilyName
              motive
              scrutinee
              branches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              zero))))))

def coreEliminatorBranchEqual =
  (lambda unrestricted constructorName : Bytes .
    (lambda unrestricted binderCount : Nat .
      (lambda unrestricted bodyEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted right : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted value : (family CoreTerm) . Nat)
            right
            (branch CoreUniverse level . zero)
            (branch CoreNatural . zero)
            (branch CoreNaturalLiteral value . zero)
            (branch CoreBound index . zero)
            (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
            (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              zero)
            (branch CoreApplication function argument ih_function ih_argument . zero)
            (branch
              CoreNaturalArithmetic
              operation
              function
              argument
              ih_function
              ih_argument
              .
              zero)
            (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
            (branch CoreByte . zero)
            (branch CoreByteLiteral value . zero)
            (branch CoreBytes . zero)
            (branch CoreBytesLiteral value . zero)
            (branch CorePrimitiveTerm primitive . zero)
            (branch CoreTermSequenceEnd . zero)
            (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
            (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
            (branch
              CoreConstructorApplication
              familyName
              rightConstructorName
              arguments
              ih_arguments
              .
              zero)
            (branch
              CoreEliminatorBranch
              rightConstructorName
              rightBinderCount
              rightBody
              ih_rightBody
              .
              (coreNaturalAnd
                (coreNaturalAnd
                  (coreBytesEqual constructorName rightConstructorName)
                  (naturalEqual binderCount rightBinderCount))
                (bodyEqual rightBody)))
            (branch
              CoreEliminator
              familyName
              motive
              scrutinee
              branches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              zero))))))

def coreEliminatorEqual =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted motiveEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted scrutineeEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted branchesEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
          (lambda unrestricted right : (family CoreTerm) .
            (eliminate
              CoreTerm
              (lambda unrestricted value : (family CoreTerm) . Nat)
              right
              (branch CoreUniverse level . zero)
              (branch CoreNatural . zero)
              (branch CoreNaturalLiteral value . zero)
              (branch CoreBound index . zero)
              (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
              (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
              (branch
                CoreLet
                multiplicity
                annotation
                value
                body
                ih_annotation
                ih_value
                ih_body
                .
                zero)
              (branch CoreApplication function argument ih_function ih_argument . zero)
              (branch
                CoreNaturalArithmetic
                operation
                function
                argument
                ih_function
                ih_argument
                .
                zero)
              (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
              (branch CoreByte . zero)
              (branch CoreByteLiteral value . zero)
              (branch CoreBytes . zero)
              (branch CoreBytesLiteral value . zero)
              (branch CorePrimitiveTerm primitive . zero)
              (branch CoreTermSequenceEnd . zero)
              (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
              (branch CoreFamilyApplication rightFamilyName arguments ih_arguments . zero)
              (branch
                CoreConstructorApplication
                rightFamilyName
                constructorName
                arguments
                ih_arguments
                .
                zero)
              (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
              (branch
                CoreEliminator
                rightFamilyName
                motive
                scrutinee
                branches
                ih_motive
                ih_scrutinee
                ih_branches
                .
                (coreNaturalAnd
                  (coreNaturalAnd
                    (coreNaturalAnd
                      (coreBytesEqual familyName rightFamilyName)
                      (motiveEqual motive))
                    (scrutineeEqual scrutinee))
                  (branchesEqual branches)))))))))

def coreLetEqual =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted annotationEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
      (lambda unrestricted valueEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
        (lambda unrestricted bodyEqual : (pi unrestricted right : (family CoreTerm) . Nat) .
          (lambda unrestricted right : (family CoreTerm) .
            (eliminate
              CoreTerm
              (lambda unrestricted current : (family CoreTerm) . Nat)
              right
              (branch CoreUniverse level . zero)
              (branch CoreNatural . zero)
              (branch CoreNaturalLiteral value . zero)
              (branch CoreBound index . zero)
              (branch CorePi m domain codomain ih_domain ih_codomain . zero)
              (branch CoreLambda m domain body ih_domain ih_body . zero)
              (branch
                CoreLet
                rightMultiplicity
                annotation
                value
                body
                ih_annotation
                ih_value
                ih_body
                .
                (coreNaturalAnd
                  (multiplicityEqual multiplicity rightMultiplicity)
                  (coreNaturalAnd
                    (annotationEqual annotation)
                    (coreNaturalAnd (valueEqual value) (bodyEqual body)))))
              (branch CoreApplication function argument ih_function ih_argument . zero)
              (branch CoreNaturalArithmetic operation left right ih_left ih_right . zero)
              (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
              (branch CoreByte . zero)
              (branch CoreByteLiteral value . zero)
              (branch CoreBytes . zero)
              (branch CoreBytesLiteral value . zero)
              (branch CorePrimitiveTerm primitive . zero)
              (branch CoreTermSequenceEnd . zero)
              (branch CoreTermSequenceNext head tail ih_head ih_tail . zero)
              (branch CoreFamilyApplication family arguments ih_arguments . zero)
              (branch CoreConstructorApplication family constructor arguments ih_arguments . zero)
              (branch CoreEliminatorBranch constructor count body ih_body . zero)
              (branch
                CoreEliminator
                family
                motive
                scrutinee
                branches
                ih_motive
                ih_scrutinee
                ih_branches
                .
                zero)))))))

def coreTermEqual :
  (pi unrestricted left : (family CoreTerm) . (pi unrestricted right : (family CoreTerm) . Nat)) =
  (lambda unrestricted left : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted term : (family CoreTerm) .
        (pi unrestricted right : (family CoreTerm) . Nat))
      left
      (branch CoreUniverse level . (coreUniverseEqual level))
      (branch CoreNatural . coreNaturalEqual)
      (branch CoreNaturalLiteral value . (coreNaturalLiteralEqual value))
      (branch CoreBound index . (coreBoundEqual index))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (corePiEqual multiplicity ih_domain ih_codomain))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (coreLambdaEqual multiplicity ih_domain ih_body))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (coreLetEqual multiplicity ih_annotation ih_value ih_body))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (coreApplicationEqual ih_function ih_argument))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (coreArithmeticEqual operation ih_function ih_argument))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (coreNaturalSuccessorEqual ih_predecessor))
      (branch CoreByte . coreByteEqual)
      (branch CoreByteLiteral value . (coreByteLiteralEqual value))
      (branch CoreBytes . coreBytesTypeEqual)
      (branch CoreBytesLiteral value . (coreBytesLiteralEqual value))
      (branch CorePrimitiveTerm primitive . (corePrimitiveTermEqual primitive))
      (branch CoreTermSequenceEnd . coreTermSequenceEndEqual)
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (coreTermSequenceNextEqual ih_head ih_tail))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (coreFamilyApplicationEqual familyName ih_arguments))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (coreConstructorApplicationEqual familyName constructorName ih_arguments))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (coreEliminatorBranchEqual constructorName binderCount ih_body))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (coreEliminatorEqual familyName ih_motive ih_scrutinee ih_branches))))

-- The existing compiler policy is 64 reduction rounds. Public callers can
-- supply their own budget; this is not a bound on work within one round.
def coreNormalizationDefaultRounds =
  (byte-to-nat (byte 64))

def coreNormalizationResourceFailureCode =
  (byte-to-nat (byte 89))

def countCoreReductionRound =
  (lambda unrestricted result : (family CoreReductionResult) .
    (eliminate
      CoreReductionResult
      (lambda unrestricted value : (family CoreReductionResult) . (family CoreReductionResult))
      result
      (branch
        CoreReductionCompleted
        term
        rounds
        .
        (constructor CoreReductionResult CoreReductionCompleted term (succ rounds)))
      (branch
        CoreReductionExhausted
        term
        rounds
        .
        (constructor CoreReductionResult CoreReductionExhausted term (succ rounds)))))

def reduceCoreWithBudget =
  (lambda unrestricted step : (pi unrestricted term : (family CoreTerm) . (family CoreTerm)) .
    (lambda unrestricted budget : Nat .
      (nat-eliminate
        (lambda unrestricted remaining : Nat .
          (pi unrestricted term : (family CoreTerm) . (family CoreReductionResult)))
        (lambda unrestricted term : (family CoreTerm) .
          (constructor CoreReductionResult CoreReductionExhausted term zero))
        (lambda unrestricted predecessor : Nat .
          (lambda unrestricted induction : (pi unrestricted term : (family CoreTerm) . (family CoreReductionResult)) .
            (lambda unrestricted term : (family CoreTerm) .
              (app
                (lambda unrestricted reduced : (family CoreTerm) .
                  (app
                    (nat-eliminate
                      (lambda unrestricted equal : Nat .
                        (pi unrestricted trigger : Nat . (family CoreReductionResult)))
                      (lambda unrestricted trigger : Nat .
                        (countCoreReductionRound (induction reduced)))
                      (lambda unrestricted prior : Nat .
                        (lambda unrestricted ignored : (pi unrestricted trigger : Nat . (family CoreReductionResult)) .
                          (lambda unrestricted trigger : Nat .
                            (constructor
                              CoreReductionResult
                              CoreReductionCompleted
                              reduced
                              (succ zero)))))
                      (coreTermEqual term reduced))
                    zero))
                (step term)))))
        budget)))

def coreNormalizationDefaultWork =
  (constructor ModelWord32 ModelWord32Value (byte 0) (byte 0) (byte 1) (byte 0))

def chooseCoreEliminatorBranch =
  (lambda unrestricted first : (family CoreEliminatorBranchSelection) .
    (lambda unrestricted second : (family CoreEliminatorBranchSelection) .
      (eliminate
        CoreEliminatorBranchSelection
        (lambda unrestricted value : (family CoreEliminatorBranchSelection) .
          (family CoreEliminatorBranchSelection))
        first
        (branch CoreEliminatorBranchSelected binderCount body . first)
        (branch CoreEliminatorBranchMissing . second))))

def findCoreEliminatorBranch =
  (lambda unrestricted constructorName : Bytes .
    (lambda unrestricted branches : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted value : (family CoreTerm) . (family CoreEliminatorBranchSelection))
        branches
        (branch
          CoreUniverse
          level
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreNatural
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreNaturalLiteral
          value
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreBound
          index
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CorePi
          multiplicity
          domain
          codomain
          ih_domain
          ih_codomain
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreLambda
          multiplicity
          domain
          body
          ih_domain
          ih_body
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreLet
          multiplicity
          annotation
          value
          body
          ih_annotation
          ih_value
          ih_body
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreApplication
          function
          argument
          ih_function
          ih_argument
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreNaturalArithmetic
          operation
          function
          argument
          ih_function
          ih_argument
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreNaturalSuccessor
          predecessor
          ih_predecessor
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch CoreByte . (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreByteLiteral
          value
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch CoreBytes . (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreBytesLiteral
          value
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CorePrimitiveTerm
          primitive
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreTermSequenceEnd
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreTermSequenceNext
          head
          tail
          ih_head
          ih_tail
          .
          (chooseCoreEliminatorBranch ih_head ih_tail))
        (branch
          CoreFamilyApplication
          familyName
          arguments
          ih_arguments
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreConstructorApplication
          familyName
          nestedConstructorName
          arguments
          ih_arguments
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing))
        (branch
          CoreEliminatorBranch
          branchConstructorName
          binderCount
          body
          ih_body
          .
          (nat-eliminate
            (lambda unrestricted matches : Nat . (family CoreEliminatorBranchSelection))
            (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
            (lambda unrestricted predecessor : Nat .
              (lambda unrestricted induction : (family CoreEliminatorBranchSelection) .
                (constructor
                  CoreEliminatorBranchSelection
                  CoreEliminatorBranchSelected
                  binderCount
                  body)))
            (coreBytesEqual branchConstructorName constructorName)))
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          nestedBranches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)))))

def coreNaturalSaturatingSubtract =
  (lambda unrestricted left : Nat .
    (lambda unrestricted right : Nat .
      (nat-eliminate
        (lambda unrestricted remaining : Nat . Nat)
        left
        (lambda unrestricted predecessor : Nat .
          (lambda unrestricted induction : Nat . (naturalPredecessor induction)))
        right)))

def coreTermSequenceCount =
  (lambda unrestricted sequence : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . Nat)
      sequence
      (branch CoreUniverse level . zero)
      (branch CoreNatural . zero)
      (branch CoreNaturalLiteral value . zero)
      (branch CoreBound index . zero)
      (branch CorePi multiplicity domain codomain ih_domain ih_codomain . zero)
      (branch CoreLambda multiplicity domain body ih_domain ih_body . zero)
      (branch CoreLet multiplicity annotation value body ih_annotation ih_value ih_body . zero)
      (branch CoreApplication function argument ih_function ih_argument . zero)
      (branch CoreNaturalArithmetic operation function argument ih_function ih_argument . zero)
      (branch CoreNaturalSuccessor predecessor ih_predecessor . zero)
      (branch CoreByte . zero)
      (branch CoreByteLiteral value . zero)
      (branch CoreBytes . zero)
      (branch CoreBytesLiteral value . zero)
      (branch CorePrimitiveTerm primitive . zero)
      (branch CoreTermSequenceEnd . zero)
      (branch CoreTermSequenceNext head tail ih_head ih_tail . (succ ih_tail))
      (branch CoreFamilyApplication familyName arguments ih_arguments . zero)
      (branch CoreConstructorApplication familyName constructorName arguments ih_arguments . zero)
      (branch CoreEliminatorBranch constructorName binderCount body ih_body . zero)
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        zero)))

def appendCoreTermSequenceForEliminator =
  (lambda unrestricted left : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted right : (family CoreTerm) . (family CoreTerm)))
      left
      (branch CoreUniverse level . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreNatural . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreNaturalLiteral value . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreBound index . (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreByte . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreByteLiteral value . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreBytes . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreBytesLiteral value . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CorePrimitiveTerm primitive . (lambda unrestricted right : (family CoreTerm) . left))
      (branch CoreTermSequenceEnd . (lambda unrestricted right : (family CoreTerm) . right))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted right : (family CoreTerm) .
          (constructor CoreTerm CoreTermSequenceNext head (ih_tail right))))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted right : (family CoreTerm) . left))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted right : (family CoreTerm) . left))))

def instantiateCoreEliminatorBranch =
  (lambda unrestricted supplied : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted body : (family CoreTerm) . (family CoreTerm)))
      supplied
      (branch CoreUniverse level . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreNatural . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreNaturalLiteral value . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreBound index . (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted branchBody : (family CoreTerm) . branchBody))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted branchBody : (family CoreTerm) . branchBody))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreByte . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreByteLiteral value . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreBytes . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreBytesLiteral value . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CorePrimitiveTerm primitive . (lambda unrestricted body : (family CoreTerm) . body))
      (branch CoreTermSequenceEnd . (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted body : (family CoreTerm) . (substituteCoreTop head (ih_tail body))))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted body : (family CoreTerm) . body))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted branchBody : (family CoreTerm) . branchBody))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted body : (family CoreTerm) . body))))

def dropCoreTermSequenceForEliminator =
  (lambda unrestricted sequence : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted count : Nat . (family CoreTerm)))
      sequence
      (branch CoreUniverse level . (lambda unrestricted count : Nat . sequence))
      (branch CoreNatural . (lambda unrestricted count : Nat . sequence))
      (branch CoreNaturalLiteral value . (lambda unrestricted count : Nat . sequence))
      (branch CoreBound index . (lambda unrestricted count : Nat . sequence))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted count : Nat . sequence))
      (branch CoreByte . (lambda unrestricted count : Nat . sequence))
      (branch CoreByteLiteral value . (lambda unrestricted count : Nat . sequence))
      (branch CoreBytes . (lambda unrestricted count : Nat . sequence))
      (branch CoreBytesLiteral value . (lambda unrestricted count : Nat . sequence))
      (branch CorePrimitiveTerm primitive . (lambda unrestricted count : Nat . sequence))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted count : Nat . (constructor CoreTerm CoreTermSequenceEnd)))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted count : Nat .
          (nat-eliminate
            (lambda unrestricted remaining : Nat . (family CoreTerm))
            (constructor CoreTerm CoreTermSequenceNext head tail)
            (lambda unrestricted predecessor : Nat .
              (lambda unrestricted induction : (family CoreTerm) . (ih_tail predecessor)))
            count)))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted count : Nat . sequence))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted count : Nat . sequence))))

def finishCoreEliminatorReduction =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted motive : (family CoreTerm) .
      (lambda unrestricted scrutinee : (family CoreTerm) .
        (lambda unrestricted branches : (family CoreTerm) .
          (lambda unrestricted arguments : (family CoreTerm) .
            (lambda unrestricted inductionCandidates : (family CoreTerm) .
              (lambda unrestricted selection : (family CoreEliminatorBranchSelection) .
                (eliminate
                  CoreEliminatorBranchSelection
                  (lambda unrestricted value : (family CoreEliminatorBranchSelection) .
                    (family CoreTerm))
                  selection
                  (branch
                    CoreEliminatorBranchSelected
                    binderCount
                    body
                    .
                    (app
                      (lambda unrestricted argumentCount : Nat .
                        (app
                          (lambda unrestricted recursiveCount : Nat .
                            (app
                              (lambda unrestricted valueCount : Nat .
                                (app
                                  (lambda unrestricted inductionResults : (family CoreTerm) .
                                    (app
                                      (lambda unrestricted supplied : (family CoreTerm) .
                                        (nat-eliminate
                                        (lambda unrestricted arityMatches : Nat . (family CoreTerm))
                                        (constructor
                                        CoreTerm
                                        CoreEliminator
                                        familyName
                                        motive
                                        scrutinee
                                        branches)
                                        (lambda unrestricted predecessor : Nat .
                                        (lambda unrestricted induction : (family CoreTerm) .
                                        (instantiateCoreEliminatorBranch supplied body)))
                                        (naturalEqual (coreTermSequenceCount supplied) binderCount)))
                                      (appendCoreTermSequenceForEliminator
                                        arguments
                                        inductionResults)))
                                  (dropCoreTermSequenceForEliminator inductionCandidates valueCount)))
                              (coreNaturalSaturatingSubtract argumentCount recursiveCount)))
                          (coreNaturalSaturatingSubtract binderCount argumentCount)))
                      (coreTermSequenceCount arguments)))
                  (branch
                    CoreEliminatorBranchMissing
                    .
                    (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))))))))))

def reduceCoreGenericEliminator =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted motive : (family CoreTerm) .
      (lambda unrestricted scrutinee : (family CoreTerm) .
        (lambda unrestricted branches : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted value : (family CoreTerm) . (family CoreTerm))
            scrutinee
            (branch
              CoreUniverse
              level
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreNatural
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreNaturalLiteral
              value
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreBound
              index
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CorePi
              multiplicity
              domain
              codomain
              ih_domain
              ih_codomain
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreLambda
              multiplicity
              domain
              body
              ih_domain
              ih_body
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              (constructor
                CoreTerm
                CoreEliminator
                familyName
                motive
                (substituteCoreTop ih_value ih_body)
                branches))
            (branch
              CoreApplication
              function
              argument
              ih_function
              ih_argument
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreNaturalArithmetic
              operation
              function
              argument
              ih_function
              ih_argument
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreNaturalSuccessor
              predecessor
              ih_predecessor
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreByte
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreByteLiteral
              value
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreBytes
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreBytesLiteral
              value
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CorePrimitiveTerm
              primitive
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch CoreTermSequenceEnd . (constructor CoreTerm CoreTermSequenceEnd))
            (branch
              CoreTermSequenceNext
              head
              tail
              ih_head
              ih_tail
              .
              (constructor CoreTerm CoreTermSequenceNext ih_head ih_tail))
            (branch
              CoreFamilyApplication
              constructorFamily
              arguments
              ih_arguments
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreConstructorApplication
              constructorFamily
              constructorName
              arguments
              ih_arguments
              .
              (nat-eliminate
                (lambda unrestricted familyMatches : Nat . (family CoreTerm))
                (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (family CoreTerm) .
                    (finishCoreEliminatorReduction
                      familyName
                      motive
                      scrutinee
                      branches
                      arguments
                      ih_arguments
                      (findCoreEliminatorBranch constructorName branches))))
                (coreBytesEqual constructorFamily familyName)))
            (branch
              CoreEliminatorBranch
              constructorName
              binderCount
              body
              ih_body
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches))
            (branch
              CoreEliminator
              nestedFamily
              nestedMotive
              nestedScrutinee
              nestedBranches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)))))))

def coreWorkOne =
  (constructor ModelWord32 ModelWord32Value (byte 1) (byte 0) (byte 0) (byte 0))

def coreWorkBind =
  (lambda unrestricted result : (family CoreWorkResult) .
    (lambda unrestricted continuation : (pi unrestricted term : (family CoreTerm) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
      (eliminate
        CoreWorkResult
        (lambda unrestricted current : (family CoreWorkResult) . (family CoreWorkResult))
        result
        (branch CoreWorkCompleted term budget . (continuation term budget))
        (branch CoreWorkExhausted budget . (constructor CoreWorkResult CoreWorkExhausted budget)))))

def coreWorkCharge =
  (lambda unrestricted amount : (family ModelWord32) .
    (lambda unrestricted budget : (family NormalizationBudget) .
      (lambda unrestricted continuation : (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult)) .
        (eliminate
          NormalizationChargeResult
          (lambda unrestricted current : (family NormalizationChargeResult) .
            (family CoreWorkResult))
          (Compiler.NormalizationBudget/chargeNormalizationBudget amount budget)
          (branch NormalizationCharged remaining . (continuation remaining))
          (branch
            NormalizationChargeExhausted
            unchanged
            rejected
            .
            (constructor CoreWorkResult CoreWorkExhausted unchanged))
          (branch
            NormalizationChargeInvalid
            .
            (constructor CoreWorkResult CoreWorkExhausted budget))))))

def coreWorkChoose =
  (lambda unrestricted condition : Nat .
    (lambda unrestricted selected : (pi unrestricted force : Nat . (family CoreWorkResult)) .
      (lambda unrestricted fallback : (pi unrestricted force : Nat . (family CoreWorkResult)) .
        (app
          (nat-eliminate
            (lambda unrestricted value : Nat .
              (pi unrestricted force : Nat . (family CoreWorkResult)))
            fallback
            (lambda unrestricted predecessor : Nat .
              (lambda unrestricted induction : (pi unrestricted force : Nat . (family CoreWorkResult)) .
                selected))
            condition)
          zero))))

def extendCoreFunctionInspection :
  (pi unrestricted inspection : (family CoreFunctionInspection) .
    (pi unrestricted argument : (family CoreTerm) . (family CoreFunctionInspection))) =
  (lambda unrestricted inspection : (family CoreFunctionInspection) .
    (lambda unrestricted argument : (family CoreTerm) .
      (eliminate
        CoreFunctionInspection
        (lambda unrestricted value : (family CoreFunctionInspection) .
          (family CoreFunctionInspection))
        inspection
        (branch CoreFunctionLambda body . (constructor CoreFunctionInspection CoreFunctionOther))
        (branch
          CoreFunctionPrimitive
          primitive
          .
          (constructor CoreFunctionInspection CoreFunctionAppliedPrimitive primitive argument))
        (branch
          CoreFunctionAppliedPrimitive
          primitive
          first
          .
          (constructor
            CoreFunctionInspection
            CoreFunctionAppliedPrimitive2
            primitive
            first
            argument))
        (branch
          CoreFunctionAppliedPrimitive2
          primitive
          first
          second
          .
          (constructor
            CoreFunctionInspection
            CoreFunctionAppliedPrimitive3
            primitive
            first
            second
            argument))
        (branch
          CoreFunctionAppliedPrimitive3
          primitive
          first
          second
          third
          .
          (constructor CoreFunctionInspection CoreFunctionOther))
        (branch CoreFunctionOther . (constructor CoreFunctionInspection CoreFunctionOther)))))

def inspectCoreFunction :
  (pi unrestricted term : (family CoreTerm) . (family CoreFunctionInspection)) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family CoreFunctionInspection))
      term
      (branch CoreUniverse level . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreNatural . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreNaturalLiteral value . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreBound index . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor CoreFunctionInspection CoreFunctionLambda body))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (extendCoreFunctionInspection ih_function argument))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreByte . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreByteLiteral value . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreBytes . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreBytesLiteral value . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (constructor CoreFunctionInspection CoreFunctionPrimitive primitive))
      (branch CoreTermSequenceEnd . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor CoreFunctionInspection CoreFunctionOther))))

-- Reserve unary metadata work before invoking legacy index arithmetic.
def coreWorkChargeNatural =
  (lambda unrestricted amount : Nat .
    (lambda unrestricted budget : (family NormalizationBudget) .
      (lambda unrestricted continue : (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult)) .
        (eliminate
          NormalizationChargeResult
          (lambda unrestricted current : (family NormalizationChargeResult) .
            (family CoreWorkResult))
          (chargeNormalizationNatural amount budget)
          (branch NormalizationCharged remaining . (continue remaining))
          (branch
            NormalizationChargeExhausted
            remaining
            cost
            .
            (constructor CoreWorkResult CoreWorkExhausted remaining))
          (branch
            NormalizationChargeInvalid
            .
            (constructor CoreWorkResult CoreWorkExhausted budget))))))

def workShiftCoreTree =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted current : (family CoreTerm) .
        (pi unrestricted depth : Nat .
          (pi unrestricted amount : Nat .
            (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)))))
      term
      (branch
        CoreUniverse
        coreUniverseLevel
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreUniverse coreUniverseLevel)
                    remaining)))))))
      (branch
        CoreNatural
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreNatural)
                    remaining)))))))
      (branch
        CoreNaturalLiteral
        coreNaturalValue
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreNaturalLiteral coreNaturalValue)
                    remaining)))))))
      (branch
        CoreBound
        coreBoundIndex
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkChoose
                    (nat-less-than coreBoundIndex depth)
                    (lambda unrestricted force : Nat .
                      (constructor
                        CoreWorkResult
                        CoreWorkCompleted
                        (constructor CoreTerm CoreBound coreBoundIndex)
                        remaining))
                    (lambda unrestricted force : Nat .
                      (coreWorkChargeNatural
                        coreBoundIndex
                        remaining
                        (lambda unrestricted remaining : (family NormalizationBudget) .
                          (constructor
                            CoreWorkResult
                            CoreWorkCompleted
                            (shiftCorePart1 coreBoundIndex depth amount)
                            remaining)))))))))))
      (branch
        CorePi
        corePiMultiplicity
        corePiDomain
        corePiCodomain
        ih_corePiDomain
        ih_corePiCodomain
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_corePiDomain depth amount remaining)
                    (lambda unrestricted new_corePiDomain : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_corePiCodomain (succ depth) amount remaining)
                          (lambda unrestricted new_corePiCodomain : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CorePi
                                  corePiMultiplicity
                                  new_corePiDomain
                                  new_corePiCodomain)
                                remaining)))))))))))))
      (branch
        CoreLambda
        coreLambdaMultiplicity
        coreLambdaDomain
        coreLambdaBody
        ih_coreLambdaDomain
        ih_coreLambdaBody
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreLambdaDomain depth amount remaining)
                    (lambda unrestricted new_coreLambdaDomain : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreLambdaBody (succ depth) amount remaining)
                          (lambda unrestricted new_coreLambdaBody : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreLambda
                                  coreLambdaMultiplicity
                                  new_coreLambdaDomain
                                  new_coreLambdaBody)
                                remaining)))))))))))))
      (branch
        CoreLet
        coreLetMultiplicity
        coreLetAnnotation
        coreLetValue
        coreLetBody
        ih_coreLetAnnotation
        ih_coreLetValue
        ih_coreLetBody
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreLetAnnotation depth amount remaining)
                    (lambda unrestricted new_coreLetAnnotation : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreLetValue depth amount remaining)
                          (lambda unrestricted new_coreLetValue : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (coreWorkBind
                                (ih_coreLetBody (succ depth) amount remaining)
                                (lambda unrestricted new_coreLetBody : (family CoreTerm) .
                                  (lambda unrestricted remaining : (family NormalizationBudget) .
                                    (constructor
                                      CoreWorkResult
                                      CoreWorkCompleted
                                      (constructor
                                        CoreTerm
                                        CoreLet
                                        coreLetMultiplicity
                                        new_coreLetAnnotation
                                        new_coreLetValue
                                        new_coreLetBody)
                                      remaining))))))))))))))))
      (branch
        CoreApplication
        coreApplicationFunction
        coreApplicationArgument
        ih_coreApplicationFunction
        ih_coreApplicationArgument
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreApplicationFunction depth amount remaining)
                    (lambda unrestricted new_coreApplicationFunction : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreApplicationArgument depth amount remaining)
                          (lambda unrestricted new_coreApplicationArgument : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreApplication
                                  new_coreApplicationFunction
                                  new_coreApplicationArgument)
                                remaining)))))))))))))
      (branch
        CoreNaturalArithmetic
        coreArithmeticOperation
        coreArithmeticLeft
        coreArithmeticRight
        ih_coreArithmeticLeft
        ih_coreArithmeticRight
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreArithmeticLeft depth amount remaining)
                    (lambda unrestricted new_coreArithmeticLeft : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreArithmeticRight depth amount remaining)
                          (lambda unrestricted new_coreArithmeticRight : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreNaturalArithmetic
                                  coreArithmeticOperation
                                  new_coreArithmeticLeft
                                  new_coreArithmeticRight)
                                remaining)))))))))))))
      (branch
        CoreNaturalSuccessor
        coreNaturalPredecessor
        ih_coreNaturalPredecessor
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreNaturalPredecessor depth amount remaining)
                    (lambda unrestricted new_coreNaturalPredecessor : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (constructor
                          CoreWorkResult
                          CoreWorkCompleted
                          (constructor CoreTerm CoreNaturalSuccessor new_coreNaturalPredecessor)
                          remaining))))))))))
      (branch
        CoreByte
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreByte)
                    remaining)))))))
      (branch
        CoreByteLiteral
        coreByteValue
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreByteLiteral coreByteValue)
                    remaining)))))))
      (branch
        CoreBytes
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreBytes)
                    remaining)))))))
      (branch
        CoreBytesLiteral
        coreBytesValue
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreBytesLiteral coreBytesValue)
                    remaining)))))))
      (branch
        CorePrimitiveTerm
        corePrimitive
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CorePrimitiveTerm corePrimitive)
                    remaining)))))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreTermSequenceEnd)
                    remaining)))))))
      (branch
        CoreTermSequenceNext
        coreTermSequenceHead
        coreTermSequenceTail
        ih_coreTermSequenceHead
        ih_coreTermSequenceTail
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreTermSequenceHead depth amount remaining)
                    (lambda unrestricted new_coreTermSequenceHead : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreTermSequenceTail depth amount remaining)
                          (lambda unrestricted new_coreTermSequenceTail : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreTermSequenceNext
                                  new_coreTermSequenceHead
                                  new_coreTermSequenceTail)
                                remaining)))))))))))))
      (branch
        CoreFamilyApplication
        coreFamilyName
        coreFamilyArguments
        ih_coreFamilyArguments
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreFamilyArguments depth amount remaining)
                    (lambda unrestricted new_coreFamilyArguments : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (constructor
                          CoreWorkResult
                          CoreWorkCompleted
                          (constructor
                            CoreTerm
                            CoreFamilyApplication
                            coreFamilyName
                            new_coreFamilyArguments)
                          remaining))))))))))
      (branch
        CoreConstructorApplication
        coreConstructorFamilyName
        coreConstructorName
        coreConstructorArguments
        ih_coreConstructorArguments
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreConstructorArguments depth amount remaining)
                    (lambda unrestricted new_coreConstructorArguments : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (constructor
                          CoreWorkResult
                          CoreWorkCompleted
                          (constructor
                            CoreTerm
                            CoreConstructorApplication
                            coreConstructorFamilyName
                            coreConstructorName
                            new_coreConstructorArguments)
                          remaining))))))))))
      (branch
        CoreEliminatorBranch
        coreBranchConstructorName
        coreBranchBinderCount
        coreBranchBody
        ih_coreBranchBody
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkChargeNatural
                    depth
                    remaining
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreBranchBody
                          (naturalAdd depth coreBranchBinderCount)
                          amount
                          remaining)
                        (lambda unrestricted new_coreBranchBody : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (constructor
                              CoreWorkResult
                              CoreWorkCompleted
                              (constructor
                                CoreTerm
                                CoreEliminatorBranch
                                coreBranchConstructorName
                                coreBranchBinderCount
                                new_coreBranchBody)
                              remaining))))))))))))
      (branch
        CoreEliminator
        coreEliminatedFamilyName
        coreEliminatorMotive
        coreEliminatorScrutinee
        coreEliminatorBranches
        ih_coreEliminatorMotive
        ih_coreEliminatorScrutinee
        ih_coreEliminatorBranches
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreEliminatorMotive depth amount remaining)
                    (lambda unrestricted new_coreEliminatorMotive : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreEliminatorScrutinee depth amount remaining)
                          (lambda unrestricted new_coreEliminatorScrutinee : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (coreWorkBind
                                (ih_coreEliminatorBranches depth amount remaining)
                                (lambda unrestricted new_coreEliminatorBranches : (family CoreTerm) .
                                  (lambda unrestricted remaining : (family NormalizationBudget) .
                                    (constructor
                                      CoreWorkResult
                                      CoreWorkCompleted
                                      (constructor
                                        CoreTerm
                                        CoreEliminator
                                        coreEliminatedFamilyName
                                        new_coreEliminatorMotive
                                        new_coreEliminatorScrutinee
                                        new_coreEliminatorBranches)
                                      remaining))))))))))))))))))

-- A zero shift preserves the existing immutable graph. It does not copy the
-- replacement or traverse its descendants merely to return an equal term.
def workShiftCore =
  (lambda unrestricted term : (family CoreTerm) .
    (lambda unrestricted cutoff : Nat .
      (lambda unrestricted amount : Nat .
        (lambda unrestricted budget : (family NormalizationBudget) .
          (coreWorkChoose
            (naturalEqual amount zero)
            (lambda unrestricted force : Nat .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor CoreWorkResult CoreWorkCompleted term remaining))))
            (lambda unrestricted force : Nat . (workShiftCoreTree term cutoff amount budget)))))))

def workSubstituteCoreTree =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted current : (family CoreTerm) .
        (pi unrestricted depth : Nat .
          (pi unrestricted replacement : (family CoreTerm) .
            (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)))))
      term
      (branch
        CoreUniverse
        coreUniverseLevel
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreUniverse coreUniverseLevel)
                    remaining)))))))
      (branch
        CoreNatural
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreNatural)
                    remaining)))))))
      (branch
        CoreNaturalLiteral
        coreNaturalValue
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreNaturalLiteral coreNaturalValue)
                    remaining)))))))
      (branch
        CoreBound
        coreBoundIndex
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkChoose
                    (naturalEqual coreBoundIndex depth)
                    (lambda unrestricted force : Nat .
                      (workShiftCore replacement zero depth remaining))
                    (lambda unrestricted force : Nat .
                      (coreWorkChoose
                        (nat-less-than depth coreBoundIndex)
                        (lambda unrestricted force : Nat .
                          (coreWorkChargeNatural
                            coreBoundIndex
                            remaining
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (substituteCorePart1 coreBoundIndex depth replacement)
                                remaining))))
                        (lambda unrestricted force : Nat .
                          (constructor
                            CoreWorkResult
                            CoreWorkCompleted
                            (constructor CoreTerm CoreBound coreBoundIndex)
                            remaining)))))))))))
      (branch
        CorePi
        corePiMultiplicity
        corePiDomain
        corePiCodomain
        ih_corePiDomain
        ih_corePiCodomain
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_corePiDomain depth replacement remaining)
                    (lambda unrestricted new_corePiDomain : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_corePiCodomain (succ depth) replacement remaining)
                          (lambda unrestricted new_corePiCodomain : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CorePi
                                  corePiMultiplicity
                                  new_corePiDomain
                                  new_corePiCodomain)
                                remaining)))))))))))))
      (branch
        CoreLambda
        coreLambdaMultiplicity
        coreLambdaDomain
        coreLambdaBody
        ih_coreLambdaDomain
        ih_coreLambdaBody
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreLambdaDomain depth replacement remaining)
                    (lambda unrestricted new_coreLambdaDomain : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreLambdaBody (succ depth) replacement remaining)
                          (lambda unrestricted new_coreLambdaBody : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreLambda
                                  coreLambdaMultiplicity
                                  new_coreLambdaDomain
                                  new_coreLambdaBody)
                                remaining)))))))))))))
      (branch
        CoreLet
        coreLetMultiplicity
        coreLetAnnotation
        coreLetValue
        coreLetBody
        ih_coreLetAnnotation
        ih_coreLetValue
        ih_coreLetBody
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreLetAnnotation depth replacement remaining)
                    (lambda unrestricted new_coreLetAnnotation : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreLetValue depth replacement remaining)
                          (lambda unrestricted new_coreLetValue : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (coreWorkBind
                                (ih_coreLetBody (succ depth) replacement remaining)
                                (lambda unrestricted new_coreLetBody : (family CoreTerm) .
                                  (lambda unrestricted remaining : (family NormalizationBudget) .
                                    (constructor
                                      CoreWorkResult
                                      CoreWorkCompleted
                                      (constructor
                                        CoreTerm
                                        CoreLet
                                        coreLetMultiplicity
                                        new_coreLetAnnotation
                                        new_coreLetValue
                                        new_coreLetBody)
                                      remaining))))))))))))))))
      (branch
        CoreApplication
        coreApplicationFunction
        coreApplicationArgument
        ih_coreApplicationFunction
        ih_coreApplicationArgument
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreApplicationFunction depth replacement remaining)
                    (lambda unrestricted new_coreApplicationFunction : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreApplicationArgument depth replacement remaining)
                          (lambda unrestricted new_coreApplicationArgument : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreApplication
                                  new_coreApplicationFunction
                                  new_coreApplicationArgument)
                                remaining)))))))))))))
      (branch
        CoreNaturalArithmetic
        coreArithmeticOperation
        coreArithmeticLeft
        coreArithmeticRight
        ih_coreArithmeticLeft
        ih_coreArithmeticRight
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreArithmeticLeft depth replacement remaining)
                    (lambda unrestricted new_coreArithmeticLeft : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreArithmeticRight depth replacement remaining)
                          (lambda unrestricted new_coreArithmeticRight : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreNaturalArithmetic
                                  coreArithmeticOperation
                                  new_coreArithmeticLeft
                                  new_coreArithmeticRight)
                                remaining)))))))))))))
      (branch
        CoreNaturalSuccessor
        coreNaturalPredecessor
        ih_coreNaturalPredecessor
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreNaturalPredecessor depth replacement remaining)
                    (lambda unrestricted new_coreNaturalPredecessor : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (constructor
                          CoreWorkResult
                          CoreWorkCompleted
                          (constructor CoreTerm CoreNaturalSuccessor new_coreNaturalPredecessor)
                          remaining))))))))))
      (branch
        CoreByte
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreByte)
                    remaining)))))))
      (branch
        CoreByteLiteral
        coreByteValue
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreByteLiteral coreByteValue)
                    remaining)))))))
      (branch
        CoreBytes
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreBytes)
                    remaining)))))))
      (branch
        CoreBytesLiteral
        coreBytesValue
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreBytesLiteral coreBytesValue)
                    remaining)))))))
      (branch
        CorePrimitiveTerm
        corePrimitive
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CorePrimitiveTerm corePrimitive)
                    remaining)))))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreTermSequenceEnd)
                    remaining)))))))
      (branch
        CoreTermSequenceNext
        coreTermSequenceHead
        coreTermSequenceTail
        ih_coreTermSequenceHead
        ih_coreTermSequenceTail
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreTermSequenceHead depth replacement remaining)
                    (lambda unrestricted new_coreTermSequenceHead : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreTermSequenceTail depth replacement remaining)
                          (lambda unrestricted new_coreTermSequenceTail : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (constructor
                                CoreWorkResult
                                CoreWorkCompleted
                                (constructor
                                  CoreTerm
                                  CoreTermSequenceNext
                                  new_coreTermSequenceHead
                                  new_coreTermSequenceTail)
                                remaining)))))))))))))
      (branch
        CoreFamilyApplication
        coreFamilyName
        coreFamilyArguments
        ih_coreFamilyArguments
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreFamilyArguments depth replacement remaining)
                    (lambda unrestricted new_coreFamilyArguments : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (constructor
                          CoreWorkResult
                          CoreWorkCompleted
                          (constructor
                            CoreTerm
                            CoreFamilyApplication
                            coreFamilyName
                            new_coreFamilyArguments)
                          remaining))))))))))
      (branch
        CoreConstructorApplication
        coreConstructorFamilyName
        coreConstructorName
        coreConstructorArguments
        ih_coreConstructorArguments
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreConstructorArguments depth replacement remaining)
                    (lambda unrestricted new_coreConstructorArguments : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (constructor
                          CoreWorkResult
                          CoreWorkCompleted
                          (constructor
                            CoreTerm
                            CoreConstructorApplication
                            coreConstructorFamilyName
                            coreConstructorName
                            new_coreConstructorArguments)
                          remaining))))))))))
      (branch
        CoreEliminatorBranch
        coreBranchConstructorName
        coreBranchBinderCount
        coreBranchBody
        ih_coreBranchBody
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkChargeNatural
                    depth
                    remaining
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreBranchBody
                          (naturalAdd depth coreBranchBinderCount)
                          replacement
                          remaining)
                        (lambda unrestricted new_coreBranchBody : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (constructor
                              CoreWorkResult
                              CoreWorkCompleted
                              (constructor
                                CoreTerm
                                CoreEliminatorBranch
                                coreBranchConstructorName
                                coreBranchBinderCount
                                new_coreBranchBody)
                              remaining))))))))))))
      (branch
        CoreEliminator
        coreEliminatedFamilyName
        coreEliminatorMotive
        coreEliminatorScrutinee
        coreEliminatorBranches
        ih_coreEliminatorMotive
        ih_coreEliminatorScrutinee
        ih_coreEliminatorBranches
        .
        (lambda unrestricted depth : Nat .
          (lambda unrestricted replacement : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkBind
                    (ih_coreEliminatorMotive depth replacement remaining)
                    (lambda unrestricted new_coreEliminatorMotive : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (coreWorkBind
                          (ih_coreEliminatorScrutinee depth replacement remaining)
                          (lambda unrestricted new_coreEliminatorScrutinee : (family CoreTerm) .
                            (lambda unrestricted remaining : (family NormalizationBudget) .
                              (coreWorkBind
                                (ih_coreEliminatorBranches depth replacement remaining)
                                (lambda unrestricted new_coreEliminatorBranches : (family CoreTerm) .
                                  (lambda unrestricted remaining : (family NormalizationBudget) .
                                    (constructor
                                      CoreWorkResult
                                      CoreWorkCompleted
                                      (constructor
                                        CoreTerm
                                        CoreEliminator
                                        coreEliminatedFamilyName
                                        new_coreEliminatorMotive
                                        new_coreEliminatorScrutinee
                                        new_coreEliminatorBranches)
                                      remaining))))))))))))))))))

def workSubstituteCoreTop =
  (lambda unrestricted replacement : (family CoreTerm) .
    (lambda unrestricted body : (family CoreTerm) . (workSubstituteCoreTree body zero replacement)))

def workApplyCoreFunctionOnce =
  (lambda unrestricted function : (family CoreTerm) .
    (lambda unrestricted argument : (family CoreTerm) .
      (lambda unrestricted budget : (family NormalizationBudget) .
        (coreWorkCharge
          coreWorkOne
          budget
          (lambda unrestricted remaining : (family NormalizationBudget) .
            (eliminate
              CoreFunctionInspection
              (lambda unrestricted current : (family CoreFunctionInspection) .
                (family CoreWorkResult))
              (inspectCoreFunction function)
              (branch CoreFunctionLambda body . (workSubstituteCoreTop argument body remaining))
              (branch
                CoreFunctionPrimitive
                primitive
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreApplication function argument)
                  remaining))
              (branch
                CoreFunctionAppliedPrimitive
                primitive
                first
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreApplication function argument)
                  remaining))
              (branch
                CoreFunctionAppliedPrimitive2
                primitive
                first
                second
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreApplication function argument)
                  remaining))
              (branch
                CoreFunctionAppliedPrimitive3
                primitive
                first
                second
                third
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreApplication function argument)
                  remaining))
              (branch
                CoreFunctionOther
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreApplication function argument)
                  remaining))))))))

def corePrimitiveApplication :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted argument : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted argument : (family CoreTerm) .
      (constructor
        CoreTerm
        CoreApplication
        (constructor CoreTerm CorePrimitiveTerm primitive)
        argument)))

def corePrimitiveApplication2 :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted left : (family CoreTerm) .
      (pi unrestricted right : (family CoreTerm) . (family CoreTerm)))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (constructor CoreTerm CoreApplication (corePrimitiveApplication primitive left) right))))

def corePrimitiveApplication3 :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted first : (family CoreTerm) .
      (pi unrestricted second : (family CoreTerm) .
        (pi unrestricted third : (family CoreTerm) . (family CoreTerm))))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted first : (family CoreTerm) .
      (lambda unrestricted second : (family CoreTerm) .
        (lambda unrestricted third : (family CoreTerm) .
          (constructor
            CoreTerm
            CoreApplication
            (corePrimitiveApplication2 primitive first second)
            third)))))

def reduceCoreNaturalToByte : (pi unrestricted argument : (family CoreTerm) . (family CoreTerm)) =
  (lambda unrestricted argument : (family CoreTerm) .
    (eliminate
      CoreLiteralInspection
      (lambda unrestricted inspection : (family CoreLiteralInspection) . (family CoreTerm))
      (inspectCoreLiteral argument)
      (branch
        CoreNaturalInspected
        value
        .
        (constructor
          CoreTerm
          CoreByteLiteral
          (Compiler.NaturalMagnitudeArithmetic/magnitudeLowByte value)))
      (branch
        CoreByteInspected
        value
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreNaturalToByte) argument))
      (branch
        CoreBytesInspected
        value
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreNaturalToByte) argument))
      (branch
        CoreNotLiteral
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreNaturalToByte) argument))))

def reduceCoreByteToNatural : (pi unrestricted argument : (family CoreTerm) . (family CoreTerm)) =
  (lambda unrestricted argument : (family CoreTerm) .
    (eliminate
      CoreLiteralInspection
      (lambda unrestricted inspection : (family CoreLiteralInspection) . (family CoreTerm))
      (inspectCoreLiteral argument)
      (branch
        CoreNaturalInspected
        value
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreByteToNatural) argument))
      (branch
        CoreByteInspected
        value
        .
        (constructor
          CoreTerm
          CoreNaturalLiteral
          (Compiler.NaturalMagnitudeArithmetic/magnitudeFromNatural (byte-to-nat value))))
      (branch
        CoreBytesInspected
        value
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreByteToNatural) argument))
      (branch
        CoreNotLiteral
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreByteToNatural) argument))))

def reduceCoreBytesLength : (pi unrestricted argument : (family CoreTerm) . (family CoreTerm)) =
  (lambda unrestricted argument : (family CoreTerm) .
    (eliminate
      CoreLiteralInspection
      (lambda unrestricted inspection : (family CoreLiteralInspection) . (family CoreTerm))
      (inspectCoreLiteral argument)
      (branch
        CoreNaturalInspected
        value
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreBytesLength) argument))
      (branch
        CoreByteInspected
        value
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreBytesLength) argument))
      (branch
        CoreBytesInspected
        value
        .
        (constructor
          CoreTerm
          CoreNaturalLiteral
          (Compiler.NaturalMagnitudeArithmetic/magnitudeFromNatural (bytes-length value))))
      (branch
        CoreNotLiteral
        .
        (corePrimitiveApplication (constructor CorePrimitive CoreBytesLength) argument))))

def reduceDirectCorePrimitive :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted argument : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (eliminate
      CorePrimitive
      (lambda unrestricted value : (family CorePrimitive) .
        (pi unrestricted argument : (family CoreTerm) . (family CoreTerm)))
      primitive
      (branch CoreByteEqual . (corePrimitiveApplication primitive))
      (branch CoreByteLess . (corePrimitiveApplication primitive))
      (branch CoreNaturalLess . (corePrimitiveApplication primitive))
      (branch CoreNaturalToByte . reduceCoreNaturalToByte)
      (branch CoreByteToNatural . reduceCoreByteToNatural)
      (branch CoreBytesAppend . (corePrimitiveApplication primitive))
      (branch CoreBytesCons . (corePrimitiveApplication primitive))
      (branch CoreBytesLength . reduceCoreBytesLength)
      (branch CoreNaturalEliminate . (corePrimitiveApplication primitive))
      (branch CoreBytesEliminate . (corePrimitiveApplication primitive))
      (branch CoreBytesEqual . (corePrimitiveApplication primitive))
      (branch CoreFileEffect . (corePrimitiveApplication primitive))
      (branch CoreEffects . (corePrimitiveApplication primitive))
      (branch CoreComputation . (corePrimitiveApplication primitive))
      (branch CoreReturn . (corePrimitiveApplication primitive))
      (branch CoreBind . (corePrimitiveApplication primitive))
      (branch CoreReadFile . (corePrimitiveApplication primitive))
      (branch CoreWriteFile . (corePrimitiveApplication primitive))
      (branch CoreLinuxOpenNode . (corePrimitiveApplication primitive))
      (branch CoreLinuxCloseNode . (corePrimitiveApplication primitive))
      (branch CoreLinuxIoctl . (corePrimitiveApplication primitive))
      (branch CoreLinuxMmap . (corePrimitiveApplication primitive))
      (branch CoreLinuxMunmap . (corePrimitiveApplication primitive))
      (branch CoreBytesSetIndex . (corePrimitiveApplication primitive))
      (branch CoreBytesIndexNonzero . (corePrimitiveApplication primitive))
      (branch CoreBytesSetFreeIndex . (corePrimitiveApplication primitive))
      (branch CoreBytesBuilderType . (corePrimitiveApplication primitive))
      (branch CoreBytesBuilderEmpty . (corePrimitiveApplication primitive))
      (branch CoreBytesBuilderChunk . (corePrimitiveApplication primitive))
      (branch CoreBytesBuilderAppend . (corePrimitiveApplication primitive))
      (branch CoreBytesBuilderBuild . (corePrimitiveApplication primitive))
      (branch CoreRuntimeImageV4Build . (corePrimitiveApplication primitive))
      (branch CoreBytesHead . (corePrimitiveApplication primitive))
      (branch CoreBytesTail . (corePrimitiveApplication primitive))
      (branch CoreBytesChecksum . (corePrimitiveApplication primitive))))

def reduceCoreByteEqual :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreLiteralInspection
        (lambda unrestricted leftInspection : (family CoreLiteralInspection) . (family CoreTerm))
        (inspectCoreLiteral left)
        (branch
          CoreNaturalInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreByteEqual) left right))
        (branch
          CoreByteInspected
          leftValue
          .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted rightInspection : (family CoreLiteralInspection) .
              (family CoreTerm))
            (inspectCoreLiteral right)
            (branch
              CoreNaturalInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreByteEqual) left right))
            (branch
              CoreByteInspected
              rightValue
              .
              (constructor
                CoreTerm
                CoreNaturalLiteral
                (Compiler.NaturalMagnitudeArithmetic/magnitudeFromNatural
                  (byte-equal leftValue rightValue))))
            (branch
              CoreBytesInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreByteEqual) left right))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreByteEqual) left right))))
        (branch
          CoreBytesInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreByteEqual) left right))
        (branch
          CoreNotLiteral
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreByteEqual) left right)))))

def reduceCoreByteLess :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreLiteralInspection
        (lambda unrestricted leftInspection : (family CoreLiteralInspection) . (family CoreTerm))
        (inspectCoreLiteral left)
        (branch
          CoreNaturalInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreByteLess) left right))
        (branch
          CoreByteInspected
          leftValue
          .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted rightInspection : (family CoreLiteralInspection) .
              (family CoreTerm))
            (inspectCoreLiteral right)
            (branch
              CoreNaturalInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreByteLess) left right))
            (branch
              CoreByteInspected
              rightValue
              .
              (constructor
                CoreTerm
                CoreNaturalLiteral
                (Compiler.NaturalMagnitudeArithmetic/magnitudeFromNatural
                  (byte-less-than leftValue rightValue))))
            (branch
              CoreBytesInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreByteLess) left right))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreByteLess) left right))))
        (branch
          CoreBytesInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreByteLess) left right))
        (branch
          CoreNotLiteral
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreByteLess) left right)))))

def reduceCoreNaturalLess :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreLiteralInspection
        (lambda unrestricted leftInspection : (family CoreLiteralInspection) . (family CoreTerm))
        (inspectCoreLiteral left)
        (branch
          CoreNaturalInspected
          leftValue
          .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted rightInspection : (family CoreLiteralInspection) .
              (family CoreTerm))
            (inspectCoreLiteral right)
            (branch
              CoreNaturalInspected
              rightValue
              .
              (constructor
                CoreTerm
                CoreNaturalLiteral
                (Compiler.NaturalMagnitudeArithmetic/magnitudeFromNatural
                  (Compiler.NaturalMagnitudeArithmetic/magnitudeLess leftValue rightValue))))
            (branch
              CoreByteInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreNaturalLess) left right))
            (branch
              CoreBytesInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreNaturalLess) left right))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreNaturalLess) left right))))
        (branch
          CoreByteInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreNaturalLess) left right))
        (branch
          CoreBytesInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreNaturalLess) left right))
        (branch
          CoreNotLiteral
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreNaturalLess) left right)))))

def reduceCoreBytesAppend :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreLiteralInspection
        (lambda unrestricted leftInspection : (family CoreLiteralInspection) . (family CoreTerm))
        (inspectCoreLiteral left)
        (branch
          CoreNaturalInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesAppend) left right))
        (branch
          CoreByteInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesAppend) left right))
        (branch
          CoreBytesInspected
          leftValue
          .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted rightInspection : (family CoreLiteralInspection) .
              (family CoreTerm))
            (inspectCoreLiteral right)
            (branch
              CoreNaturalInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesAppend) left right))
            (branch
              CoreByteInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesAppend) left right))
            (branch
              CoreBytesInspected
              rightValue
              .
              (constructor CoreTerm CoreBytesLiteral (bytes-append leftValue rightValue)))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesAppend) left right))))
        (branch
          CoreNotLiteral
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesAppend) left right)))))

def reduceCoreBytesEqual :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreLiteralInspection
        (lambda unrestricted leftInspection : (family CoreLiteralInspection) . (family CoreTerm))
        (inspectCoreLiteral left)
        (branch
          CoreNaturalInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesEqual) left right))
        (branch
          CoreByteInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesEqual) left right))
        (branch
          CoreBytesInspected
          leftValue
          .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted rightInspection : (family CoreLiteralInspection) .
              (family CoreTerm))
            (inspectCoreLiteral right)
            (branch
              CoreNaturalInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesEqual) left right))
            (branch
              CoreByteInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesEqual) left right))
            (branch
              CoreBytesInspected
              rightValue
              .
              (constructor
                CoreTerm
                CoreNaturalLiteral
                (Compiler.NaturalMagnitudeArithmetic/magnitudeFromNatural
                  (bytes-equal leftValue rightValue))))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesEqual) left right))))
        (branch
          CoreNotLiteral
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesEqual) left right)))))

def reduceCoreBytesCons :
  (pi unrestricted left : (family CoreTerm) .
    (pi unrestricted right : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (eliminate
        CoreLiteralInspection
        (lambda unrestricted leftInspection : (family CoreLiteralInspection) . (family CoreTerm))
        (inspectCoreLiteral left)
        (branch
          CoreNaturalInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right))
        (branch
          CoreByteInspected
          leftValue
          .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted rightInspection : (family CoreLiteralInspection) .
              (family CoreTerm))
            (inspectCoreLiteral right)
            (branch
              CoreNaturalInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right))
            (branch
              CoreByteInspected
              value
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right))
            (branch
              CoreBytesInspected
              rightValue
              .
              (constructor CoreTerm CoreBytesLiteral (bytes-cons leftValue rightValue)))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right))))
        (branch
          CoreBytesInspected
          value
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right))
        (branch
          CoreNotLiteral
          .
          (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right)))))

def reduceAppliedCorePrimitive :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted left : (family CoreTerm) .
      (pi unrestricted right : (family CoreTerm) . (family CoreTerm)))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (eliminate
      CorePrimitive
      (lambda unrestricted value : (family CorePrimitive) .
        (pi unrestricted left : (family CoreTerm) .
          (pi unrestricted right : (family CoreTerm) . (family CoreTerm))))
      primitive
      (branch CoreByteEqual . reduceCoreByteEqual)
      (branch CoreByteLess . reduceCoreByteLess)
      (branch CoreNaturalLess . reduceCoreNaturalLess)
      (branch CoreNaturalToByte . (corePrimitiveApplication2 primitive))
      (branch CoreByteToNatural . (corePrimitiveApplication2 primitive))
      (branch CoreBytesAppend . reduceCoreBytesAppend)
      (branch CoreBytesCons . reduceCoreBytesCons)
      (branch CoreBytesLength . (corePrimitiveApplication2 primitive))
      (branch CoreNaturalEliminate . (corePrimitiveApplication2 primitive))
      (branch CoreBytesEliminate . (corePrimitiveApplication2 primitive))
      (branch CoreBytesEqual . reduceCoreBytesEqual)
      (branch CoreFileEffect . (corePrimitiveApplication2 primitive))
      (branch CoreEffects . (corePrimitiveApplication2 primitive))
      (branch CoreComputation . (corePrimitiveApplication2 primitive))
      (branch CoreReturn . (corePrimitiveApplication2 primitive))
      (branch CoreBind . (corePrimitiveApplication2 primitive))
      (branch CoreReadFile . (corePrimitiveApplication2 primitive))
      (branch CoreWriteFile . (corePrimitiveApplication2 primitive))
      (branch CoreLinuxOpenNode . (corePrimitiveApplication2 primitive))
      (branch CoreLinuxCloseNode . (corePrimitiveApplication2 primitive))
      (branch CoreLinuxIoctl . (corePrimitiveApplication2 primitive))
      (branch CoreLinuxMmap . (corePrimitiveApplication2 primitive))
      (branch CoreLinuxMunmap . (corePrimitiveApplication2 primitive))
      (branch CoreBytesSetIndex . (corePrimitiveApplication2 primitive))
      (branch CoreBytesIndexNonzero . (corePrimitiveApplication2 primitive))
      (branch CoreBytesSetFreeIndex . (corePrimitiveApplication2 primitive))
      (branch CoreBytesBuilderType . (corePrimitiveApplication2 primitive))
      (branch CoreBytesBuilderEmpty . (corePrimitiveApplication2 primitive))
      (branch CoreBytesBuilderChunk . (corePrimitiveApplication2 primitive))
      (branch CoreBytesBuilderAppend . (corePrimitiveApplication2 primitive))
      (branch CoreBytesBuilderBuild . (corePrimitiveApplication2 primitive))
      (branch CoreRuntimeImageV4Build . (corePrimitiveApplication2 primitive))
      (branch CoreBytesHead . (corePrimitiveApplication2 primitive))
      (branch CoreBytesTail . (corePrimitiveApplication2 primitive))
      (branch CoreBytesChecksum . (corePrimitiveApplication2 primitive))))

def corePrimitiveApplication4 :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted first : (family CoreTerm) .
      (pi unrestricted second : (family CoreTerm) .
        (pi unrestricted third : (family CoreTerm) .
          (pi unrestricted fourth : (family CoreTerm) . (family CoreTerm)))))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted first : (family CoreTerm) .
      (lambda unrestricted second : (family CoreTerm) .
        (lambda unrestricted third : (family CoreTerm) .
          (lambda unrestricted fourth : (family CoreTerm) .
            (constructor
              CoreTerm
              CoreApplication
              (corePrimitiveApplication3 primitive first second third)
              fourth))))))

def applyCoreFunctionOnce :
  (pi unrestricted function : (family CoreTerm) .
    (pi unrestricted argument : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted function : (family CoreTerm) .
    (lambda unrestricted argument : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted value : (family CoreTerm) . (family CoreTerm))
        function
        (branch CoreUniverse level . (constructor CoreTerm CoreApplication function argument))
        (branch CoreNatural . (constructor CoreTerm CoreApplication function argument))
        (branch CoreNaturalLiteral value . (constructor CoreTerm CoreApplication function argument))
        (branch CoreBound index . (constructor CoreTerm CoreApplication function argument))
        (branch
          CorePi
          multiplicity
          domain
          codomain
          ih_domain
          ih_codomain
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreLambda
          multiplicity
          domain
          body
          ih_domain
          ih_body
          .
          (substituteCoreTop argument body))
        (branch
          CoreLet
          multiplicity
          annotation
          value
          body
          ih_annotation
          ih_value
          ih_body
          .
          (constructor CoreTerm CoreApplication (substituteCoreTop value body) argument))
        (branch
          CoreApplication
          nestedFunction
          nestedArgument
          ih_nestedFunction
          ih_nestedArgument
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreNaturalArithmetic
          operation
          nestedFunction
          nestedArgument
          ih_nestedFunction
          ih_nestedArgument
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreNaturalSuccessor
          predecessor
          ih_predecessor
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch CoreByte . (constructor CoreTerm CoreApplication function argument))
        (branch CoreByteLiteral value . (constructor CoreTerm CoreApplication function argument))
        (branch CoreBytes . (constructor CoreTerm CoreApplication function argument))
        (branch CoreBytesLiteral value . (constructor CoreTerm CoreApplication function argument))
        (branch
          CorePrimitiveTerm
          primitive
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch CoreTermSequenceEnd . (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreTermSequenceNext
          head
          tail
          ih_head
          ih_tail
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreFamilyApplication
          familyName
          arguments
          ih_arguments
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreConstructorApplication
          familyName
          constructorName
          arguments
          ih_arguments
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreEliminatorBranch
          constructorName
          binderCount
          body
          ih_body
          .
          (constructor CoreTerm CoreApplication function argument))
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          (constructor CoreTerm CoreApplication function argument)))))

def reduceNaturalEliminateStep :
  (pi unrestricted successorCase : (family CoreTerm) .
    (pi unrestricted predecessor : Bytes .
      (pi unrestricted induction : (family CoreTerm) . (family CoreTerm)))) =
  (lambda unrestricted successorCase : (family CoreTerm) .
    (lambda unrestricted predecessor : Bytes .
      (lambda unrestricted induction : (family CoreTerm) .
        (applyCoreFunctionOnce
          (applyCoreFunctionOnce
            successorCase
            (constructor CoreTerm CoreNaturalLiteral predecessor))
          induction))))

def reduceCoreNaturalEliminate :
  (pi unrestricted motive : (family CoreTerm) .
    (pi unrestricted zeroCase : (family CoreTerm) .
      (pi unrestricted successorCase : (family CoreTerm) .
        (pi unrestricted scrutinee : (family CoreTerm) . (family CoreTerm))))) =
  (lambda unrestricted motive : (family CoreTerm) .
    (lambda unrestricted zeroCase : (family CoreTerm) .
      (lambda unrestricted successorCase : (family CoreTerm) .
        (lambda unrestricted scrutinee : (family CoreTerm) .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted inspection : (family CoreLiteralInspection) . (family CoreTerm))
            (inspectCoreLiteral scrutinee)
            (branch
              CoreNaturalInspected
              value
              .
              (second
                (Compiler.NaturalMagnitudeArithmetic/magnitudeIterate
                  (sigma unrestricted predecessor : Bytes . (family CoreTerm))
                  value
                  (lambda unrestricted state : (sigma unrestricted predecessor : Bytes . (family CoreTerm)) .
                    (pair
                      (sigma unrestricted predecessor : Bytes . (family CoreTerm))
                      (Compiler.NaturalMagnitudeArithmetic/magnitudeSuccessor (first state))
                      (reduceNaturalEliminateStep successorCase (first state) (second state))))
                  (pair
                    (sigma unrestricted predecessor : Bytes . (family CoreTerm))
                    b""
                    zeroCase))))
            (branch
              CoreByteInspected
              value
              .
              (corePrimitiveApplication4
                (constructor CorePrimitive CoreNaturalEliminate)
                motive
                zeroCase
                successorCase
                scrutinee))
            (branch
              CoreBytesInspected
              value
              .
              (corePrimitiveApplication4
                (constructor CorePrimitive CoreNaturalEliminate)
                motive
                zeroCase
                successorCase
                scrutinee))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication4
                (constructor CorePrimitive CoreNaturalEliminate)
                motive
                zeroCase
                successorCase
                scrutinee)))))))

def reduceBytesEliminateStep :
  (pi unrestricted consCase : (family CoreTerm) .
    (pi unrestricted head : Byte .
      (pi unrestricted tail : Bytes .
        (pi unrestricted induction : (family CoreTerm) . (family CoreTerm))))) =
  (lambda unrestricted consCase : (family CoreTerm) .
    (lambda unrestricted head : Byte .
      (lambda unrestricted tail : Bytes .
        (lambda unrestricted induction : (family CoreTerm) .
          (applyCoreFunctionOnce
            (applyCoreFunctionOnce
              (applyCoreFunctionOnce consCase (constructor CoreTerm CoreByteLiteral head))
              (constructor CoreTerm CoreBytesLiteral tail))
            induction)))))

def reduceCoreBytesEliminate :
  (pi unrestricted motive : (family CoreTerm) .
    (pi unrestricted emptyCase : (family CoreTerm) .
      (pi unrestricted consCase : (family CoreTerm) .
        (pi unrestricted scrutinee : (family CoreTerm) . (family CoreTerm))))) =
  (lambda unrestricted motive : (family CoreTerm) .
    (lambda unrestricted emptyCase : (family CoreTerm) .
      (lambda unrestricted consCase : (family CoreTerm) .
        (lambda unrestricted scrutinee : (family CoreTerm) .
          (eliminate
            CoreLiteralInspection
            (lambda unrestricted inspection : (family CoreLiteralInspection) . (family CoreTerm))
            (inspectCoreLiteral scrutinee)
            (branch
              CoreNaturalInspected
              value
              .
              (corePrimitiveApplication4
                (constructor CorePrimitive CoreBytesEliminate)
                motive
                emptyCase
                consCase
                scrutinee))
            (branch
              CoreByteInspected
              value
              .
              (corePrimitiveApplication4
                (constructor CorePrimitive CoreBytesEliminate)
                motive
                emptyCase
                consCase
                scrutinee))
            (branch
              CoreBytesInspected
              value
              .
              (bytes-eliminate
                (lambda unrestricted remaining : Bytes . (family CoreTerm))
                emptyCase
                (reduceBytesEliminateStep consCase)
                value))
            (branch
              CoreNotLiteral
              .
              (corePrimitiveApplication4
                (constructor CorePrimitive CoreBytesEliminate)
                motive
                emptyCase
                consCase
                scrutinee)))))))

def reduceAppliedCoreEliminator :
  (pi unrestricted primitive : (family CorePrimitive) .
    (pi unrestricted first : (family CoreTerm) .
      (pi unrestricted second : (family CoreTerm) .
        (pi unrestricted third : (family CoreTerm) .
          (pi unrestricted fourth : (family CoreTerm) . (family CoreTerm)))))) =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (eliminate
      CorePrimitive
      (lambda unrestricted value : (family CorePrimitive) .
        (pi unrestricted first : (family CoreTerm) .
          (pi unrestricted second : (family CoreTerm) .
            (pi unrestricted third : (family CoreTerm) .
              (pi unrestricted fourth : (family CoreTerm) . (family CoreTerm))))))
      primitive
      (branch CoreByteEqual . (corePrimitiveApplication4 primitive))
      (branch CoreByteLess . (corePrimitiveApplication4 primitive))
      (branch CoreNaturalLess . (corePrimitiveApplication4 primitive))
      (branch CoreNaturalToByte . (corePrimitiveApplication4 primitive))
      (branch CoreByteToNatural . (corePrimitiveApplication4 primitive))
      (branch CoreBytesAppend . (corePrimitiveApplication4 primitive))
      (branch CoreBytesCons . (corePrimitiveApplication4 primitive))
      (branch CoreBytesLength . (corePrimitiveApplication4 primitive))
      (branch CoreNaturalEliminate . reduceCoreNaturalEliminate)
      (branch CoreBytesEliminate . reduceCoreBytesEliminate)
      (branch CoreBytesEqual . (corePrimitiveApplication4 primitive))
      (branch CoreFileEffect . (corePrimitiveApplication4 primitive))
      (branch CoreEffects . (corePrimitiveApplication4 primitive))
      (branch CoreComputation . (corePrimitiveApplication4 primitive))
      (branch CoreReturn . (corePrimitiveApplication4 primitive))
      (branch CoreBind . (corePrimitiveApplication4 primitive))
      (branch CoreReadFile . (corePrimitiveApplication4 primitive))
      (branch CoreWriteFile . (corePrimitiveApplication4 primitive))
      (branch CoreLinuxOpenNode . (corePrimitiveApplication4 primitive))
      (branch CoreLinuxCloseNode . (corePrimitiveApplication4 primitive))
      (branch CoreLinuxIoctl . (corePrimitiveApplication4 primitive))
      (branch CoreLinuxMmap . (corePrimitiveApplication4 primitive))
      (branch CoreLinuxMunmap . (corePrimitiveApplication4 primitive))
      (branch CoreBytesSetIndex . (corePrimitiveApplication4 primitive))
      (branch CoreBytesIndexNonzero . (corePrimitiveApplication4 primitive))
      (branch CoreBytesSetFreeIndex . (corePrimitiveApplication4 primitive))
      (branch CoreBytesBuilderType . (corePrimitiveApplication4 primitive))
      (branch CoreBytesBuilderEmpty . (corePrimitiveApplication4 primitive))
      (branch CoreBytesBuilderChunk . (corePrimitiveApplication4 primitive))
      (branch CoreBytesBuilderAppend . (corePrimitiveApplication4 primitive))
      (branch CoreBytesBuilderBuild . (corePrimitiveApplication4 primitive))
      (branch CoreRuntimeImageV4Build . (corePrimitiveApplication4 primitive))
      (branch CoreBytesHead . (corePrimitiveApplication4 primitive))
      (branch CoreBytesTail . (corePrimitiveApplication4 primitive))
      (branch CoreBytesChecksum . (corePrimitiveApplication4 primitive))))

def finishCoreNaturalWorkStep =
  (lambda unrestricted predecessor : Bytes .
    (lambda unrestricted result : (family CoreWorkResult) .
      (eliminate
        CoreWorkResult
        (lambda unrestricted current : (family CoreWorkResult) . (family CoreNaturalWorkState))
        result
        (branch
          CoreWorkCompleted
          term
          budget
          .
          (constructor
            CoreNaturalWorkState
            CoreNaturalWorkActive
            (Compiler.NaturalMagnitudeArithmetic/magnitudeSuccessor predecessor)
            term
            budget))
        (branch
          CoreWorkExhausted
          budget
          .
          (constructor CoreNaturalWorkState CoreNaturalWorkStopped budget)))))

def stepCoreNaturalWork =
  (lambda unrestricted successorCase : (family CoreTerm) .
    (lambda unrestricted state : (family CoreNaturalWorkState) .
      (eliminate
        CoreNaturalWorkState
        (lambda unrestricted current : (family CoreNaturalWorkState) .
          (family CoreNaturalWorkState))
        state
        (branch
          CoreNaturalWorkActive
          predecessor
          term
          budget
          .
          (finishCoreNaturalWorkStep
            predecessor
            (coreWorkBind
              (workApplyCoreFunctionOnce
                successorCase
                (constructor CoreTerm CoreNaturalLiteral predecessor)
                budget)
              (lambda unrestricted applied : (family CoreTerm) .
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (workApplyCoreFunctionOnce applied term remaining))))))
        (branch CoreNaturalWorkStopped budget . state))))

-- Every composed block checks for exhaustion before entering its inner loop.
def repeatCoreNaturalWorkSmall =
  (lambda unrestricted count : Nat .
    (lambda unrestricted step : (pi unrestricted state : (family CoreNaturalWorkState) . (family CoreNaturalWorkState)) .
      (lambda unrestricted state : (family CoreNaturalWorkState) .
        (eliminate
          CoreNaturalWorkState
          (lambda unrestricted current : (family CoreNaturalWorkState) .
            (family CoreNaturalWorkState))
          state
          (branch
            CoreNaturalWorkActive
            predecessor
            term
            budget
            .
            (nat-eliminate
              (lambda unrestricted index : Nat . (family CoreNaturalWorkState))
              state
              (lambda unrestricted predecessor : Nat .
                (lambda unrestricted induction : (family CoreNaturalWorkState) . (step induction)))
              count))
          (branch CoreNaturalWorkStopped budget . state)))))

def iterateCoreNaturalWork =
  (lambda unrestricted digits : Bytes .
    (lambda unrestricted step : (pi unrestricted state : (family CoreNaturalWorkState) . (family CoreNaturalWorkState)) .
      (lambda unrestricted seed : (family CoreNaturalWorkState) .
        (app
          (bytes-eliminate
            (lambda unrestricted remaining : Bytes .
              (pi unrestricted step : (pi unrestricted state : (family CoreNaturalWorkState) . (family CoreNaturalWorkState)) .
                (pi unrestricted seed : (family CoreNaturalWorkState) .
                  (family CoreNaturalWorkState))))
            (lambda unrestricted step : (pi unrestricted state : (family CoreNaturalWorkState) . (family CoreNaturalWorkState)) .
              (lambda unrestricted seed : (family CoreNaturalWorkState) . seed))
            (lambda unrestricted head : Byte .
              (lambda unrestricted tail : Bytes .
                (lambda unrestricted continue : (pi unrestricted step : (pi unrestricted state : (family CoreNaturalWorkState) . (family CoreNaturalWorkState)) . (pi unrestricted seed : (family CoreNaturalWorkState) . (family CoreNaturalWorkState))) .
                  (lambda unrestricted step : (pi unrestricted state : (family CoreNaturalWorkState) . (family CoreNaturalWorkState)) .
                    (lambda unrestricted seed : (family CoreNaturalWorkState) .
                      (continue
                        (lambda unrestricted state : (family CoreNaturalWorkState) .
                          (repeatCoreNaturalWorkSmall (byte-to-nat (byte 10)) step state))
                        (repeatCoreNaturalWorkSmall (byte-to-nat head) step seed)))))))
            digits)
          step
          seed))))

def finishCoreNaturalWork =
  (lambda unrestricted state : (family CoreNaturalWorkState) .
    (eliminate
      CoreNaturalWorkState
      (lambda unrestricted current : (family CoreNaturalWorkState) . (family CoreWorkResult))
      state
      (branch
        CoreNaturalWorkActive
        predecessor
        term
        budget
        .
        (constructor CoreWorkResult CoreWorkCompleted term budget))
      (branch CoreNaturalWorkStopped budget . (constructor CoreWorkResult CoreWorkExhausted budget))))

-- Each natural transition costs at least one unit. Reject an unaffordable
-- count before iteration; substitutions then debit the shared remaining budget.
def workNaturalEliminate =
  (lambda unrestricted digits : Bytes .
    (lambda unrestricted zeroCase : (family CoreTerm) .
      (lambda unrestricted successorCase : (family CoreTerm) .
        (lambda unrestricted budget : (family NormalizationBudget) .
          (eliminate
            NormalizationCostResult
            (lambda unrestricted current : (family NormalizationCostResult) .
              (family CoreWorkResult))
            (Compiler.NormalizationBudget/normalizationCostFromMagnitude digits)
            (branch
              NormalizationCostWord
              cost
              .
              (coreWorkCharge
                cost
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (finishCoreNaturalWork
                    (iterateCoreNaturalWork
                      digits
                      (stepCoreNaturalWork successorCase)
                      (constructor
                        CoreNaturalWorkState
                        CoreNaturalWorkActive
                        b""
                        zeroCase
                        remaining))))))
            (branch
              NormalizationCostTooLarge
              .
              (constructor CoreWorkResult CoreWorkExhausted budget))
            (branch
              NormalizationCostInvalid
              .
              (constructor CoreWorkResult CoreWorkExhausted budget)))))))

def workReduceNaturalEliminator =
  (lambda unrestricted motive : (family CoreTerm) .
    (lambda unrestricted zeroCase : (family CoreTerm) .
      (lambda unrestricted successorCase : (family CoreTerm) .
        (lambda unrestricted scrutinee : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (eliminate
              CoreLiteralInspection
              (lambda unrestricted current : (family CoreLiteralInspection) .
                (family CoreWorkResult))
              (inspectCoreLiteral scrutinee)
              (branch
                CoreNaturalInspected
                digits
                .
                (workNaturalEliminate digits zeroCase successorCase budget))
              (branch
                CoreByteInspected
                value
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (corePrimitiveApplication4
                    (constructor CorePrimitive CoreNaturalEliminate)
                    motive
                    zeroCase
                    successorCase
                    scrutinee)
                  budget))
              (branch
                CoreBytesInspected
                value
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (corePrimitiveApplication4
                    (constructor CorePrimitive CoreNaturalEliminate)
                    motive
                    zeroCase
                    successorCase
                    scrutinee)
                  budget))
              (branch
                CoreNotLiteral
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (corePrimitiveApplication4
                    (constructor CorePrimitive CoreNaturalEliminate)
                    motive
                    zeroCase
                    successorCase
                    scrutinee)
                  budget))))))))

-- Natural folds and beta substitution share the meter. Primitive byte payload
-- costs and generic family induction still need separate accounting.
def coreWorkChargeBytes =
  (lambda unrestricted payload : Bytes .
    (lambda unrestricted budget : (family NormalizationBudget) .
      (lambda unrestricted continue : (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult)) .
        (eliminate
          NormalizationChargeResult
          (lambda unrestricted result : (family NormalizationChargeResult) .
            (family CoreWorkResult))
          (chargeNormalizationBytes payload budget)
          (branch NormalizationCharged remaining . (continue remaining))
          (branch
            NormalizationChargeExhausted
            remaining
            amount
            .
            (constructor CoreWorkResult CoreWorkExhausted remaining))
          (branch
            NormalizationChargeInvalid
            .
            (constructor CoreWorkResult CoreWorkExhausted budget))))))

def workInspectCoreBytes =
  (lambda unrestricted value : (family CoreTerm) .
    (lambda unrestricted selected : (pi unrestricted payload : Bytes . (family CoreWorkResult)) .
      (lambda unrestricted fallback : (pi unrestricted force : Nat . (family CoreWorkResult)) .
        (eliminate
          CoreLiteralInspection
          (lambda unrestricted current : (family CoreLiteralInspection) . (family CoreWorkResult))
          (inspectCoreLiteral value)
          (branch CoreNaturalInspected payload . (fallback zero))
          (branch CoreByteInspected payload . (fallback zero))
          (branch CoreBytesInspected payload . (selected payload))
          (branch CoreNotLiteral . (fallback zero))))))

def workInspectCoreNatural =
  (lambda unrestricted value : (family CoreTerm) .
    (lambda unrestricted selected : (pi unrestricted payload : Bytes . (family CoreWorkResult)) .
      (lambda unrestricted fallback : (pi unrestricted force : Nat . (family CoreWorkResult)) .
        (eliminate
          CoreLiteralInspection
          (lambda unrestricted current : (family CoreLiteralInspection) . (family CoreWorkResult))
          (inspectCoreLiteral value)
          (branch CoreNaturalInspected payload . (selected payload))
          (branch CoreByteInspected payload . (fallback zero))
          (branch CoreBytesInspected payload . (fallback zero))
          (branch CoreNotLiteral . (fallback zero))))))

def workInspectCoreByte =
  (lambda unrestricted value : (family CoreTerm) .
    (lambda unrestricted selected : (pi unrestricted payload : Byte . (family CoreWorkResult)) .
      (lambda unrestricted fallback : (pi unrestricted force : Nat . (family CoreWorkResult)) .
        (eliminate
          CoreLiteralInspection
          (lambda unrestricted current : (family CoreLiteralInspection) . (family CoreWorkResult))
          (inspectCoreLiteral value)
          (branch CoreNaturalInspected payload . (fallback zero))
          (branch CoreByteInspected payload . (selected payload))
          (branch CoreBytesInspected payload . (fallback zero))
          (branch CoreNotLiteral . (fallback zero))))))

-- The inspection callback selects only the literal kind admitted by this primitive.
def workReduceCorePayloadPair =
  (lambda unrestricted inspect : (pi unrestricted term : (family CoreTerm) . (pi unrestricted selected : (pi unrestricted payload : Bytes . (family CoreWorkResult)) . (pi unrestricted fallback : (pi unrestricted force : Nat . (family CoreWorkResult)) . (family CoreWorkResult)))) .
    (lambda unrestricted primitive : (family CorePrimitive) .
      (lambda unrestricted left : (family CoreTerm) .
        (lambda unrestricted right : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (app
              (lambda unrestricted neutral : (pi unrestricted force : Nat . (family CoreWorkResult)) .
                (inspect
                  left
                  (lambda unrestricted leftPayload : Bytes .
                    (inspect
                      right
                      (lambda unrestricted rightPayload : Bytes .
                        (coreWorkChargeBytes
                          leftPayload
                          budget
                          (lambda unrestricted afterLeft : (family NormalizationBudget) .
                            (coreWorkChargeBytes
                              rightPayload
                              afterLeft
                              (lambda unrestricted afterRight : (family NormalizationBudget) .
                                (constructor
                                  CoreWorkResult
                                  CoreWorkCompleted
                                  (reduceAppliedCorePrimitive primitive left right)
                                  afterRight))))))
                      neutral))
                  neutral))
              (lambda unrestricted force : Nat .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (corePrimitiveApplication2 primitive left right)
                  budget))))))))

def workReduceCorePayloadUnary =
  (lambda unrestricted inspect : (pi unrestricted term : (family CoreTerm) . (pi unrestricted selected : (pi unrestricted payload : Bytes . (family CoreWorkResult)) . (pi unrestricted fallback : (pi unrestricted force : Nat . (family CoreWorkResult)) . (family CoreWorkResult)))) .
    (lambda unrestricted primitive : (family CorePrimitive) .
      (lambda unrestricted argument : (family CoreTerm) .
        (lambda unrestricted budget : (family NormalizationBudget) .
          (inspect
            argument
            (lambda unrestricted payload : Bytes .
              (coreWorkChargeBytes
                payload
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceDirectCorePrimitive primitive argument)
                    remaining))))
            (lambda unrestricted force : Nat .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (corePrimitiveApplication primitive argument)
                budget)))))))

def workReduceCoreBytesCons =
  (lambda unrestricted left : (family CoreTerm) .
    (lambda unrestricted right : (family CoreTerm) .
      (lambda unrestricted budget : (family NormalizationBudget) .
        (app
          (lambda unrestricted neutral : (pi unrestricted force : Nat . (family CoreWorkResult)) .
            (workInspectCoreByte
              left
              (lambda unrestricted head : Byte .
                (workInspectCoreBytes
                  right
                  (lambda unrestricted tail : Bytes .
                    (coreWorkCharge
                      coreWorkOne
                      budget
                      (lambda unrestricted afterHead : (family NormalizationBudget) .
                        (coreWorkChargeBytes
                          tail
                          afterHead
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (constructor
                              CoreWorkResult
                              CoreWorkCompleted
                              (reduceCoreBytesCons left right)
                              remaining))))))
                  neutral))
              neutral))
          (lambda unrestricted force : Nat .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (corePrimitiveApplication2 (constructor CorePrimitive CoreBytesCons) left right)
              budget))))))

def workReduceCoreBytesAppend =
  (workReduceCorePayloadPair workInspectCoreBytes (constructor CorePrimitive CoreBytesAppend))

def workReduceAppliedCorePrimitive =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (lambda unrestricted budget : (family NormalizationBudget) .
          (eliminate
            CorePrimitive
            (lambda unrestricted current : (family CorePrimitive) . (family CoreWorkResult))
            primitive
            (branch
              CoreByteEqual
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreByteLess
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreNaturalLess
              .
              (workReduceCorePayloadPair workInspectCoreNatural primitive left right budget))
            (branch
              CoreNaturalToByte
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreByteToNatural
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch CoreBytesAppend . (workReduceCoreBytesAppend left right budget))
            (branch CoreBytesCons . (workReduceCoreBytesCons left right budget))
            (branch
              CoreBytesLength
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreNaturalEliminate
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesEliminate
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesEqual
              .
              (workReduceCorePayloadPair workInspectCoreBytes primitive left right budget))
            (branch
              CoreFileEffect
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreEffects
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreComputation
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreReturn
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBind
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreReadFile
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreWriteFile
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreLinuxOpenNode
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreLinuxCloseNode
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreLinuxIoctl
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreLinuxMmap
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreLinuxMunmap
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesSetIndex
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesIndexNonzero
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesSetFreeIndex
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesBuilderType
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesBuilderEmpty
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesBuilderChunk
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesBuilderAppend
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesBuilderBuild
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreRuntimeImageV4Build
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesHead
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesTail
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget))
            (branch
              CoreBytesChecksum
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceAppliedCorePrimitive primitive left right)
                budget)))))))

def workReduceDirectCorePrimitive =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted argument : (family CoreTerm) .
      (lambda unrestricted budget : (family NormalizationBudget) .
        (eliminate
          CorePrimitive
          (lambda unrestricted current : (family CorePrimitive) . (family CoreWorkResult))
          primitive
          (branch
            CoreByteEqual
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreByteLess
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreNaturalLess
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreNaturalToByte
            .
            (workReduceCorePayloadUnary workInspectCoreNatural primitive argument budget))
          (branch
            CoreByteToNatural
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesAppend
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesCons
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesLength
            .
            (workReduceCorePayloadUnary workInspectCoreBytes primitive argument budget))
          (branch
            CoreNaturalEliminate
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesEliminate
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesEqual
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreFileEffect
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreEffects
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreComputation
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreReturn
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBind
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreReadFile
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreWriteFile
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreLinuxOpenNode
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreLinuxCloseNode
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreLinuxIoctl
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreLinuxMmap
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreLinuxMunmap
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesSetIndex
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesIndexNonzero
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesSetFreeIndex
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesBuilderType
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesBuilderEmpty
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesBuilderChunk
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesBuilderAppend
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesBuilderBuild
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreRuntimeImageV4Build
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesHead
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesTail
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))
          (branch
            CoreBytesChecksum
            .
            (constructor
              CoreWorkResult
              CoreWorkCompleted
              (reduceDirectCorePrimitive primitive argument)
              budget))))))

-- The payload charge bounds construction of the fold continuations. Each
-- demanded branch application/substitution then consumes the same remaining budget.
def workReduceBytesEliminateStep =
  (lambda unrestricted consCase : (family CoreTerm) .
    (lambda unrestricted head : Byte .
      (lambda unrestricted tail : Bytes .
        (lambda unrestricted induction : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkBind
              (workApplyCoreFunctionOnce
                consCase
                (constructor CoreTerm CoreByteLiteral head)
                budget)
              (lambda unrestricted withHead : (family CoreTerm) .
                (lambda unrestricted afterHead : (family NormalizationBudget) .
                  (coreWorkBind
                    (workApplyCoreFunctionOnce
                      withHead
                      (constructor CoreTerm CoreBytesLiteral tail)
                      afterHead)
                    (lambda unrestricted withTail : (family CoreTerm) .
                      (lambda unrestricted afterTail : (family NormalizationBudget) .
                        (workApplyCoreFunctionOnce withTail induction afterTail))))))))))))

def workReduceBytesEliminator =
  (lambda unrestricted motive : (family CoreTerm) .
    (lambda unrestricted emptyCase : (family CoreTerm) .
      (lambda unrestricted consCase : (family CoreTerm) .
        (lambda unrestricted scrutinee : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (workInspectCoreBytes
              scrutinee
              (lambda unrestricted payload : Bytes .
                (coreWorkChargeBytes
                  payload
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (app
                      (bytes-eliminate
                        (lambda unrestricted current : Bytes .
                          (pi unrestricted allowance : (family NormalizationBudget) .
                            (family CoreWorkResult)))
                        (lambda unrestricted allowance : (family NormalizationBudget) .
                          (constructor CoreWorkResult CoreWorkCompleted emptyCase allowance))
                        (lambda unrestricted head : Byte .
                          (lambda unrestricted tail : Bytes .
                            (lambda unrestricted induction : (pi unrestricted allowance : (family NormalizationBudget) . (family CoreWorkResult)) .
                              (lambda unrestricted allowance : (family NormalizationBudget) .
                                (coreWorkBind
                                  (induction allowance)
                                  (lambda unrestricted value : (family CoreTerm) .
                                    (lambda unrestricted afterInduction : (family NormalizationBudget) .
                                      (workReduceBytesEliminateStep
                                        consCase
                                        head
                                        tail
                                        value
                                        afterInduction))))))))
                        payload)
                      remaining))))
              (lambda unrestricted force : Nat .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (corePrimitiveApplication4
                    (constructor CorePrimitive CoreBytesEliminate)
                    motive
                    emptyCase
                    consCase
                    scrutinee)
                  budget))))))))

def workReduceAppliedEliminator =
  (lambda unrestricted primitive : (family CorePrimitive) .
    (lambda unrestricted first : (family CoreTerm) .
      (lambda unrestricted second : (family CoreTerm) .
        (lambda unrestricted third : (family CoreTerm) .
          (lambda unrestricted fourth : (family CoreTerm) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (eliminate
                CorePrimitive
                (lambda unrestricted current : (family CorePrimitive) . (family CoreWorkResult))
                primitive
                (branch
                  CoreByteEqual
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreByteLess
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreNaturalLess
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreNaturalToByte
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreByteToNatural
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesAppend
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesCons
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesLength
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreNaturalEliminate
                  .
                  (workReduceNaturalEliminator first second third fourth budget))
                (branch
                  CoreBytesEliminate
                  .
                  (workReduceBytesEliminator first second third fourth budget))
                (branch
                  CoreBytesEqual
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreFileEffect
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreEffects
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreComputation
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreReturn
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBind
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreReadFile
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreWriteFile
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreLinuxOpenNode
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreLinuxCloseNode
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreLinuxIoctl
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreLinuxMmap
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreLinuxMunmap
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesSetIndex
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesIndexNonzero
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesSetFreeIndex
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesBuilderType
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesBuilderEmpty
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesBuilderChunk
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesBuilderAppend
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesBuilderBuild
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreRuntimeImageV4Build
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesHead
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesTail
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget))
                (branch
                  CoreBytesChecksum
                  .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (reduceAppliedCoreEliminator primitive first second third fourth)
                    budget)))))))))

-- Search branch metadata under the shared budget; names are payload-charged.
def workFindCoreEliminatorBranch =
  (lambda unrestricted constructorName : Bytes .
    (lambda unrestricted branches : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted value : (family CoreTerm) .
          (pi unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))))
        branches
        (branch
          CoreUniverse
          level
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreNatural
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreNaturalLiteral
          value
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreBound
          index
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CorePi
          multiplicity
          domain
          codomain
          ih_domain
          ih_codomain
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreLambda
          multiplicity
          domain
          body
          ih_domain
          ih_body
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreLet
          multiplicity
          annotation
          value
          body
          ih_annotation
          ih_value
          ih_body
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreApplication
          function
          argument
          ih_function
          ih_argument
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreNaturalArithmetic
          operation
          function
          argument
          ih_function
          ih_argument
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreNaturalSuccessor
          predecessor
          ih_predecessor
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreByte
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreByteLiteral
          value
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreBytes
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreBytesLiteral
          value
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CorePrimitiveTerm
          primitive
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreTermSequenceEnd
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreTermSequenceNext
          head
          tail
          ih_head
          ih_tail
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (ih_head
                    (lambda unrestricted selection : (family CoreEliminatorBranchSelection) .
                      (lambda unrestricted afterHead : (family NormalizationBudget) .
                        (eliminate
                          CoreEliminatorBranchSelection
                          (lambda unrestricted current : (family CoreEliminatorBranchSelection) .
                            (family CoreWorkResult))
                          selection
                          (branch
                            CoreEliminatorBranchSelected
                            count
                            body
                            .
                            (continuation selection afterHead))
                          (branch CoreEliminatorBranchMissing . (ih_tail continuation afterHead)))))
                    remaining))))))
        (branch
          CoreFamilyApplication
          familyName
          arguments
          ih_arguments
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreConstructorApplication
          familyName
          nestedConstructorName
          arguments
          ih_arguments
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining))))))
        (branch
          CoreEliminatorBranch
          branchConstructorName
          binderCount
          body
          ih_body
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (coreWorkChargeBytes
                    constructorName
                    remaining
                    (lambda unrestricted afterName : (family NormalizationBudget) .
                      (coreWorkChargeBytes
                        branchConstructorName
                        afterName
                        (lambda unrestricted afterBranchName : (family NormalizationBudget) .
                          (coreWorkChoose
                            (bytes-equal constructorName branchConstructorName)
                            (lambda unrestricted force : Nat .
                              (continuation
                                (constructor
                                  CoreEliminatorBranchSelection
                                  CoreEliminatorBranchSelected
                                  binderCount
                                  body)
                                afterBranchName))
                            (lambda unrestricted force : Nat .
                              (continuation
                                (constructor
                                  CoreEliminatorBranchSelection
                                  CoreEliminatorBranchMissing)
                                afterBranchName))))))))))))
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          nestedBranches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          (lambda unrestricted continuation : (pi unrestricted selection : (family CoreEliminatorBranchSelection) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))) .
            (lambda unrestricted budget : (family NormalizationBudget) .
              (coreWorkCharge
                coreWorkOne
                budget
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (continuation
                    (constructor CoreEliminatorBranchSelection CoreEliminatorBranchMissing)
                    remaining)))))))))

def workInstantiateCoreEliminatorBranch =
  (lambda unrestricted supplied : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted body : (family CoreTerm) .
          (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))))
      supplied
      (branch
        CoreUniverse
        level
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreNatural
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreNaturalLiteral
        value
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreBound
        index
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted branchBody : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted branchBody remaining))))))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted branchBody : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted branchBody remaining))))))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreByte
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreByteLiteral
        value
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreBytes
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreBytesLiteral
        value
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_tail body remaining)
                  (lambda unrestricted afterTail : (family CoreTerm) .
                    (lambda unrestricted afterTailBudget : (family NormalizationBudget) .
                      (workSubstituteCoreTop head afterTail afterTailBudget)))))))))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted branchBody : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted branchBody remaining))))))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted body : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted body remaining))))))))

def workCountCoreTermSequence =
  (lambda unrestricted sequence : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted current : (family CoreTerm) .
        (pi unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult))))
      sequence
      (branch
        CoreUniverse
        level
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreNatural
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreNaturalLiteral
        value
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreBound
        index
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreByte
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreByteLiteral
        value
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreBytes
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreBytesLiteral
        value
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (ih_tail
                  (lambda unrestricted count : Nat .
                    (lambda unrestricted afterTail : (family NormalizationBudget) .
                      (continuation (succ count) afterTail)))
                  remaining))))))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted continuation : (pi unrestricted count : Nat . (pi unrestricted remaining : (family NormalizationBudget) . (family CoreWorkResult))) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (continuation zero remaining))))))))

def workReserveCoreSequenceProduct =
  (lambda unrestricted right : (family CoreTerm) .
    (lambda unrestricted left : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted current : (family CoreTerm) .
          (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)))
        left
        (branch
          CoreUniverse
          level
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreNatural
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreNaturalLiteral
          value
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreBound
          index
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CorePi
          multiplicity
          domain
          codomain
          ih_domain
          ih_codomain
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreLambda
          multiplicity
          domain
          body
          ih_domain
          ih_body
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreLet
          multiplicity
          annotation
          value
          body
          ih_annotation
          ih_value
          ih_body
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreApplication
          function
          argument
          ih_function
          ih_argument
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreNaturalArithmetic
          operation
          function
          argument
          ih_function
          ih_argument
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreNaturalSuccessor
          predecessor
          ih_predecessor
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreByte
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreByteLiteral
          value
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreBytes
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreBytesLiteral
          value
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CorePrimitiveTerm
          primitive
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreTermSequenceEnd
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreTermSequenceNext
          head
          tail
          ih_head
          ih_tail
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_tail remaining)
                  (lambda unrestricted ignored : (family CoreTerm) .
                    (lambda unrestricted afterTail : (family NormalizationBudget) .
                      (workCountCoreTermSequence
                        right
                        (lambda unrestricted count : Nat .
                          (lambda unrestricted afterCount : (family NormalizationBudget) .
                            (constructor CoreWorkResult CoreWorkCompleted left afterCount)))
                        afterTail))))))))
        (branch
          CoreFamilyApplication
          familyName
          arguments
          ih_arguments
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreConstructorApplication
          familyName
          constructorName
          arguments
          ih_arguments
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreEliminatorBranch
          constructorName
          binderCount
          body
          ih_body
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining)))))
        (branch
          CoreEliminator
          familyName
          motive
          scrutinee
          branches
          ih_motive
          ih_scrutinee
          ih_branches
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor CoreWorkResult CoreWorkCompleted left remaining))))))))

-- Reserve a conservative quadratic allowance for bounded arity arithmetic,
-- counting, dropping and appending. Substitution consumes its own shared charges.
def workReserveCoreEliminatorBookkeeping =
  (lambda unrestricted arguments : (family CoreTerm) .
    (lambda unrestricted budget : (family NormalizationBudget) .
      (nat-eliminate
        (lambda unrestricted current : Nat . (family CoreWorkResult))
        (constructor CoreWorkResult CoreWorkCompleted arguments budget)
        (lambda unrestricted predecessor : Nat .
          (lambda unrestricted induction : (family CoreWorkResult) .
            (coreWorkBind
              induction
              (lambda unrestricted ignored : (family CoreTerm) .
                (lambda unrestricted remaining : (family NormalizationBudget) .
                  (workReserveCoreSequenceProduct arguments arguments remaining))))))
        (byte-to-nat (byte 16)))))

def workFinishCoreEliminatorReduction =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted motive : (family CoreTerm) .
      (lambda unrestricted scrutinee : (family CoreTerm) .
        (lambda unrestricted branches : (family CoreTerm) .
          (lambda unrestricted arguments : (family CoreTerm) .
            (lambda unrestricted inductionCandidates : (family CoreTerm) .
              (lambda unrestricted selection : (family CoreEliminatorBranchSelection) .
                (lambda unrestricted budget : (family NormalizationBudget) .
                  (app
                    (lambda unrestricted neutral : (pi unrestricted force : Nat . (family CoreWorkResult)) .
                      (eliminate
                        CoreEliminatorBranchSelection
                        (lambda unrestricted current : (family CoreEliminatorBranchSelection) .
                          (family CoreWorkResult))
                        selection
                        (branch
                          CoreEliminatorBranchSelected
                          binderCount
                          body
                          .
                          (workCountCoreTermSequence
                            arguments
                            (lambda unrestricted argumentCount : Nat .
                              (lambda unrestricted afterCount : (family NormalizationBudget) .
                                (coreWorkChoose
                                  (coreNaturalAnd
                                    (nat-less-than
                                      binderCount
                                      (succ (naturalAdd argumentCount argumentCount)))
                                    (nat-less-than
                                      (nat-less-than binderCount argumentCount)
                                      (succ zero)))
                                  (lambda unrestricted force : Nat .
                                    (coreWorkBind
                                      (workReserveCoreEliminatorBookkeeping arguments afterCount)
                                      (lambda unrestricted ignored : (family CoreTerm) .
                                        (lambda unrestricted afterBookkeeping : (family NormalizationBudget) .
                                        (app
                                        (lambda unrestricted recursiveCount : Nat .
                                        (app
                                        (lambda unrestricted valueCount : Nat .
                                        (app
                                        (lambda unrestricted supplied : (family CoreTerm) .
                                        (coreWorkChoose
                                        (naturalEqual (coreTermSequenceCount supplied) binderCount)
                                        (lambda unrestricted force : Nat .
                                        (workInstantiateCoreEliminatorBranch
                                        supplied
                                        body
                                        afterBookkeeping))
                                        (lambda unrestricted force : Nat .
                                        (constructor
                                        CoreWorkResult
                                        CoreWorkCompleted
                                        (constructor
                                        CoreTerm
                                        CoreEliminator
                                        familyName
                                        motive
                                        scrutinee
                                        branches)
                                        afterBookkeeping))))
                                        (appendCoreTermSequenceForEliminator
                                        arguments
                                        (dropCoreTermSequenceForEliminator
                                        inductionCandidates
                                        valueCount))))
                                        (coreNaturalSaturatingSubtract argumentCount recursiveCount)))
                                        (coreNaturalSaturatingSubtract binderCount argumentCount))))))
                                  (lambda unrestricted force : Nat .
                                    (constructor
                                      CoreWorkResult
                                      CoreWorkCompleted
                                      (constructor
                                        CoreTerm
                                        CoreEliminator
                                        familyName
                                        motive
                                        scrutinee
                                        branches)
                                      afterCount)))))
                            budget))
                        (branch CoreEliminatorBranchMissing . (neutral zero))))
                    (lambda unrestricted force : Nat .
                      (constructor
                        CoreWorkResult
                        CoreWorkCompleted
                        (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                        budget)))))))))))

def workReduceCoreGenericEliminator =
  (lambda unrestricted familyName : Bytes .
    (lambda unrestricted motive : (family CoreTerm) .
      (lambda unrestricted scrutinee : (family CoreTerm) .
        (lambda unrestricted branches : (family CoreTerm) .
          (eliminate
            CoreTerm
            (lambda unrestricted current : (family CoreTerm) .
              (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)))
            scrutinee
            (branch
              CoreUniverse
              level
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreNatural
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreNaturalLiteral
              value
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreBound
              index
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CorePi
              multiplicity
              domain
              codomain
              ih_domain
              ih_codomain
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreLambda
              multiplicity
              domain
              body
              ih_domain
              ih_body
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreLet
              multiplicity
              annotation
              value
              body
              ih_annotation
              ih_value
              ih_body
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (coreWorkBind
                      (ih_value remaining)
                      (lambda unrestricted newValue : (family CoreTerm) .
                        (lambda unrestricted afterValue : (family NormalizationBudget) .
                          (coreWorkBind
                            (ih_body afterValue)
                            (lambda unrestricted newBody : (family CoreTerm) .
                              (lambda unrestricted afterBody : (family NormalizationBudget) .
                                (workSubstituteCoreTop newValue newBody afterBody)))))))))))
            (branch
              CoreApplication
              function
              argument
              ih_function
              ih_argument
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreNaturalArithmetic
              operation
              function
              argument
              ih_function
              ih_argument
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreNaturalSuccessor
              predecessor
              ih_predecessor
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreByte
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreByteLiteral
              value
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreBytes
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreBytesLiteral
              value
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CorePrimitiveTerm
              primitive
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreTermSequenceEnd
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreTermSequenceEnd)
                      remaining)))))
            (branch
              CoreTermSequenceNext
              head
              tail
              ih_head
              ih_tail
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (coreWorkBind
                      (ih_head remaining)
                      (lambda unrestricted newHead : (family CoreTerm) .
                        (lambda unrestricted afterHead : (family NormalizationBudget) .
                          (coreWorkBind
                            (ih_tail afterHead)
                            (lambda unrestricted newTail : (family CoreTerm) .
                              (lambda unrestricted afterTail : (family NormalizationBudget) .
                                (constructor
                                  CoreWorkResult
                                  CoreWorkCompleted
                                  (constructor CoreTerm CoreTermSequenceNext newHead newTail)
                                  afterTail)))))))))))
            (branch
              CoreFamilyApplication
              constructorFamily
              arguments
              ih_arguments
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreConstructorApplication
              constructorFamily
              constructorName
              arguments
              ih_arguments
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (coreWorkChargeBytes
                      familyName
                      remaining
                      (lambda unrestricted afterName : (family NormalizationBudget) .
                        (coreWorkChargeBytes
                          constructorFamily
                          afterName
                          (lambda unrestricted afterFamily : (family NormalizationBudget) .
                            (coreWorkChoose
                              (bytes-equal familyName constructorFamily)
                              (lambda unrestricted force : Nat .
                                (workFindCoreEliminatorBranch
                                  constructorName
                                  branches
                                  (lambda unrestricted selection : (family CoreEliminatorBranchSelection) .
                                    (lambda unrestricted afterSelection : (family NormalizationBudget) .
                                      (coreWorkBind
                                        (ih_arguments afterSelection)
                                        (lambda unrestricted candidates : (family CoreTerm) .
                                        (lambda unrestricted afterArguments : (family NormalizationBudget) .
                                        (workFinishCoreEliminatorReduction
                                        familyName
                                        motive
                                        scrutinee
                                        branches
                                        arguments
                                        candidates
                                        selection
                                        afterArguments))))))
                                  afterFamily))
                              (lambda unrestricted force : Nat .
                                (constructor
                                  CoreWorkResult
                                  CoreWorkCompleted
                                  (constructor
                                    CoreTerm
                                    CoreEliminator
                                    familyName
                                    motive
                                    scrutinee
                                    branches)
                                  afterFamily)))))))))))
            (branch
              CoreEliminatorBranch
              constructorName
              binderCount
              body
              ih_body
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining)))))
            (branch
              CoreEliminator
              nestedFamily
              nestedMotive
              nestedScrutinee
              nestedBranches
              ih_motive
              ih_scrutinee
              ih_branches
              .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkCharge
                  coreWorkOne
                  budget
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (constructor
                      CoreWorkResult
                      CoreWorkCompleted
                      (constructor CoreTerm CoreEliminator familyName motive scrutinee branches)
                      remaining))))))))))

-- Both payloads must already be charged before this bounded product walk.
def workReserveCorePayloadProduct =
  (lambda unrestricted rows : Bytes .
    (lambda unrestricted columns : Bytes .
      (bytes-eliminate
        (lambda unrestricted current : Bytes .
          (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)))
        (lambda unrestricted budget : (family NormalizationBudget) .
          (constructor CoreWorkResult CoreWorkCompleted (constructor CoreTerm CoreNatural) budget))
        (lambda unrestricted head : Byte .
          (lambda unrestricted tail : Bytes .
            (lambda unrestricted induction : (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)) .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (coreWorkBind
                  (induction budget)
                  (lambda unrestricted ignored : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkChargeBytes
                        columns
                        remaining
                        (lambda unrestricted afterRow : (family NormalizationBudget) .
                          (constructor
                            CoreWorkResult
                            CoreWorkCompleted
                            (constructor CoreTerm CoreNatural)
                            afterRow))))))))))
        rows)))

def workReserveCoreDivision =
  (lambda unrestricted left : Bytes .
    (lambda unrestricted right : Bytes .
      (lambda unrestricted budget : (family NormalizationBudget) .
        (nat-eliminate
          (lambda unrestricted current : Nat . (family CoreWorkResult))
          (constructor CoreWorkResult CoreWorkCompleted (constructor CoreTerm CoreNatural) budget)
          (lambda unrestricted predecessor : Nat .
            (lambda unrestricted induction : (family CoreWorkResult) .
              (coreWorkBind
                induction
                (lambda unrestricted ignored : (family CoreTerm) .
                  (lambda unrestricted remaining : (family NormalizationBudget) .
                    (workReserveCorePayloadProduct left right remaining))))))
          (byte-to-nat (byte 9))))))

def workReserveCoreArithmetic =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : Bytes .
      (lambda unrestricted right : Bytes .
        (lambda unrestricted budget : (family NormalizationBudget) .
          (eliminate
            CoreNaturalOperation
            (lambda unrestricted current : (family CoreNaturalOperation) . (family CoreWorkResult))
            operation
            (branch
              CoreNaturalAdd
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (constructor CoreTerm CoreNatural)
                budget))
            (branch
              CoreNaturalSubtract
              .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (constructor CoreTerm CoreNatural)
                budget))
            (branch
              CoreNaturalMultiply
              .
              (coreWorkChoose
                (coreNaturalAnd
                  (nat-less-than zero (bytes-length left))
                  (nat-less-than zero (bytes-length right)))
                (lambda unrestricted force : Nat .
                  (coreWorkBind
                    (workReserveCorePayloadProduct right left budget)
                    (lambda unrestricted ignored : (family CoreTerm) .
                      (lambda unrestricted remaining : (family NormalizationBudget) .
                        (workReserveCorePayloadProduct right right remaining)))))
                (lambda unrestricted force : Nat .
                  (constructor
                    CoreWorkResult
                    CoreWorkCompleted
                    (constructor CoreTerm CoreNatural)
                    budget))))
            (branch CoreNaturalDivide . (workReserveCoreDivision left right budget))
            (branch CoreNaturalModulo . (workReserveCoreDivision left right budget)))))))

def workReduceCoreArithmetic =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (lambda unrestricted budget : (family NormalizationBudget) .
          (app
            (lambda unrestricted neutral : (pi unrestricted force : Nat . (family CoreWorkResult)) .
              (workInspectCoreNatural
                left
                (lambda unrestricted leftDigits : Bytes .
                  (workInspectCoreNatural
                    right
                    (lambda unrestricted rightDigits : Bytes .
                      (coreWorkChargeBytes
                        leftDigits
                        budget
                        (lambda unrestricted afterLeft : (family NormalizationBudget) .
                          (coreWorkChargeBytes
                            rightDigits
                            afterLeft
                            (lambda unrestricted afterRight : (family NormalizationBudget) .
                              (coreWorkBind
                                (workReserveCoreArithmetic
                                  operation
                                  leftDigits
                                  rightDigits
                                  afterRight)
                                (lambda unrestricted ignored : (family CoreTerm) .
                                  (lambda unrestricted remaining : (family NormalizationBudget) .
                                    (constructor
                                      CoreWorkResult
                                      CoreWorkCompleted
                                      (reduceCoreArithmetic operation left right)
                                      remaining)))))))))
                    neutral))
                neutral))
            (lambda unrestricted force : Nat .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (constructor CoreTerm CoreNaturalArithmetic operation left right)
                budget)))))))

def workReduceCoreNaturalSuccessor =
  (lambda unrestricted predecessor : (family CoreTerm) .
    (lambda unrestricted budget : (family NormalizationBudget) .
      (workInspectCoreNatural
        predecessor
        (lambda unrestricted digits : Bytes .
          (coreWorkChargeBytes
            digits
            budget
            (lambda unrestricted remaining : (family NormalizationBudget) .
              (constructor
                CoreWorkResult
                CoreWorkCompleted
                (reduceCoreNaturalSuccessor predecessor)
                remaining))))
        (lambda unrestricted force : Nat .
          (constructor
            CoreWorkResult
            CoreWorkCompleted
            (constructor CoreTerm CoreNaturalSuccessor predecessor)
            budget)))))

def workReduceCoreApplication =
  (lambda unrestricted function : (family CoreTerm) .
    (lambda unrestricted argument : (family CoreTerm) .
      (lambda unrestricted budget : (family NormalizationBudget) .
        (coreWorkCharge
          coreWorkOne
          budget
          (lambda unrestricted remaining : (family NormalizationBudget) .
            (eliminate
              CoreFunctionInspection
              (lambda unrestricted current : (family CoreFunctionInspection) .
                (family CoreWorkResult))
              (inspectCoreFunction function)
              (branch CoreFunctionLambda body . (workSubstituteCoreTop argument body remaining))
              (branch
                CoreFunctionPrimitive
                primitive
                .
                (workReduceDirectCorePrimitive primitive argument remaining))
              (branch
                CoreFunctionAppliedPrimitive
                primitive
                first
                .
                (workReduceAppliedCorePrimitive primitive first argument remaining))
              (branch
                CoreFunctionAppliedPrimitive2
                primitive
                first
                second
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (corePrimitiveApplication3 primitive first second argument)
                  remaining))
              (branch
                CoreFunctionAppliedPrimitive3
                primitive
                first
                second
                third
                .
                (workReduceAppliedEliminator primitive first second third argument remaining))
              (branch
                CoreFunctionOther
                .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreApplication function argument)
                  remaining))))))))

def workNormalizeCoreOne =
  (lambda unrestricted full : Nat .
    (lambda unrestricted term : (family CoreTerm) .
      (eliminate
        CoreTerm
        (lambda unrestricted current : (family CoreTerm) .
          (pi unrestricted budget : (family NormalizationBudget) . (family CoreWorkResult)))
        term
        (branch
          CoreUniverse
          coreUniverseLevel
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreUniverse coreUniverseLevel)
                  remaining)))))
        (branch
          CoreNatural
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreNatural)
                  remaining)))))
        (branch
          CoreNaturalLiteral
          coreNaturalValue
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreNaturalLiteral coreNaturalValue)
                  remaining)))))
        (branch
          CoreBound
          coreBoundIndex
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreBound coreBoundIndex)
                  remaining)))))
        (branch
          CorePi
          corePiMultiplicity
          corePiDomain
          corePiCodomain
          ih_corePiDomain
          ih_corePiCodomain
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_corePiDomain remaining)
                  (lambda unrestricted new_corePiDomain : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_corePiCodomain remaining)
                        (lambda unrestricted new_corePiCodomain : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (constructor
                              CoreWorkResult
                              CoreWorkCompleted
                              (constructor
                                CoreTerm
                                CorePi
                                corePiMultiplicity
                                new_corePiDomain
                                new_corePiCodomain)
                              remaining)))))))))))
        (branch
          CoreLambda
          coreLambdaMultiplicity
          coreLambdaDomain
          coreLambdaBody
          ih_coreLambdaDomain
          ih_coreLambdaBody
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreLambdaDomain remaining)
                  (lambda unrestricted new_coreLambdaDomain : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreLambdaBody remaining)
                        (lambda unrestricted new_coreLambdaBody : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (constructor
                              CoreWorkResult
                              CoreWorkCompleted
                              (constructor
                                CoreTerm
                                CoreLambda
                                coreLambdaMultiplicity
                                new_coreLambdaDomain
                                new_coreLambdaBody)
                              remaining)))))))))))
        (branch
          CoreLet
          coreLetMultiplicity
          coreLetAnnotation
          coreLetValue
          coreLetBody
          ih_coreLetAnnotation
          ih_coreLetValue
          ih_coreLetBody
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreLetValue remaining)
                  (lambda unrestricted new_coreLetValue : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreLetBody remaining)
                        (lambda unrestricted new_coreLetBody : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (workSubstituteCoreTop new_coreLetValue new_coreLetBody remaining)))))))))))
        (branch
          CoreApplication
          coreApplicationFunction
          coreApplicationArgument
          ih_coreApplicationFunction
          ih_coreApplicationArgument
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreApplicationFunction remaining)
                  (lambda unrestricted new_coreApplicationFunction : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreApplicationArgument remaining)
                        (lambda unrestricted new_coreApplicationArgument : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (coreWorkChoose
                              full
                              (lambda unrestricted force : Nat .
                                (workReduceCoreApplication
                                  new_coreApplicationFunction
                                  new_coreApplicationArgument
                                  remaining))
                              (lambda unrestricted force : Nat .
                                (workApplyCoreFunctionOnce
                                  new_coreApplicationFunction
                                  new_coreApplicationArgument
                                  remaining)))))))))))))
        (branch
          CoreNaturalArithmetic
          coreArithmeticOperation
          coreArithmeticLeft
          coreArithmeticRight
          ih_coreArithmeticLeft
          ih_coreArithmeticRight
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreArithmeticLeft remaining)
                  (lambda unrestricted new_coreArithmeticLeft : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreArithmeticRight remaining)
                        (lambda unrestricted new_coreArithmeticRight : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (workReduceCoreArithmetic
                              coreArithmeticOperation
                              new_coreArithmeticLeft
                              new_coreArithmeticRight
                              remaining)))))))))))
        (branch
          CoreNaturalSuccessor
          coreNaturalPredecessor
          ih_coreNaturalPredecessor
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreNaturalPredecessor remaining)
                  (lambda unrestricted new_coreNaturalPredecessor : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (workReduceCoreNaturalSuccessor new_coreNaturalPredecessor remaining))))))))
        (branch
          CoreByte
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreByte)
                  remaining)))))
        (branch
          CoreByteLiteral
          coreByteValue
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreByteLiteral coreByteValue)
                  remaining)))))
        (branch
          CoreBytes
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreBytes)
                  remaining)))))
        (branch
          CoreBytesLiteral
          coreBytesValue
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreBytesLiteral coreBytesValue)
                  remaining)))))
        (branch
          CorePrimitiveTerm
          corePrimitive
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CorePrimitiveTerm corePrimitive)
                  remaining)))))
        (branch
          CoreTermSequenceEnd
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (constructor
                  CoreWorkResult
                  CoreWorkCompleted
                  (constructor CoreTerm CoreTermSequenceEnd)
                  remaining)))))
        (branch
          CoreTermSequenceNext
          coreTermSequenceHead
          coreTermSequenceTail
          ih_coreTermSequenceHead
          ih_coreTermSequenceTail
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreTermSequenceHead remaining)
                  (lambda unrestricted new_coreTermSequenceHead : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreTermSequenceTail remaining)
                        (lambda unrestricted new_coreTermSequenceTail : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (constructor
                              CoreWorkResult
                              CoreWorkCompleted
                              (constructor
                                CoreTerm
                                CoreTermSequenceNext
                                new_coreTermSequenceHead
                                new_coreTermSequenceTail)
                              remaining)))))))))))
        (branch
          CoreFamilyApplication
          coreFamilyName
          coreFamilyArguments
          ih_coreFamilyArguments
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreFamilyArguments remaining)
                  (lambda unrestricted new_coreFamilyArguments : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (constructor
                        CoreWorkResult
                        CoreWorkCompleted
                        (constructor
                          CoreTerm
                          CoreFamilyApplication
                          coreFamilyName
                          new_coreFamilyArguments)
                        remaining))))))))
        (branch
          CoreConstructorApplication
          coreConstructorFamilyName
          coreConstructorName
          coreConstructorArguments
          ih_coreConstructorArguments
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreConstructorArguments remaining)
                  (lambda unrestricted new_coreConstructorArguments : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (constructor
                        CoreWorkResult
                        CoreWorkCompleted
                        (constructor
                          CoreTerm
                          CoreConstructorApplication
                          coreConstructorFamilyName
                          coreConstructorName
                          new_coreConstructorArguments)
                        remaining))))))))
        (branch
          CoreEliminatorBranch
          coreBranchConstructorName
          coreBranchBinderCount
          coreBranchBody
          ih_coreBranchBody
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreBranchBody remaining)
                  (lambda unrestricted new_coreBranchBody : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (constructor
                        CoreWorkResult
                        CoreWorkCompleted
                        (constructor
                          CoreTerm
                          CoreEliminatorBranch
                          coreBranchConstructorName
                          coreBranchBinderCount
                          new_coreBranchBody)
                        remaining))))))))
        (branch
          CoreEliminator
          coreEliminatedFamilyName
          coreEliminatorMotive
          coreEliminatorScrutinee
          coreEliminatorBranches
          ih_coreEliminatorMotive
          ih_coreEliminatorScrutinee
          ih_coreEliminatorBranches
          .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (coreWorkCharge
              coreWorkOne
              budget
              (lambda unrestricted remaining : (family NormalizationBudget) .
                (coreWorkBind
                  (ih_coreEliminatorMotive remaining)
                  (lambda unrestricted new_coreEliminatorMotive : (family CoreTerm) .
                    (lambda unrestricted remaining : (family NormalizationBudget) .
                      (coreWorkBind
                        (ih_coreEliminatorScrutinee remaining)
                        (lambda unrestricted new_coreEliminatorScrutinee : (family CoreTerm) .
                          (lambda unrestricted remaining : (family NormalizationBudget) .
                            (coreWorkBind
                              (ih_coreEliminatorBranches remaining)
                              (lambda unrestricted new_coreEliminatorBranches : (family CoreTerm) .
                                (lambda unrestricted remaining : (family NormalizationBudget) .
                                  (coreWorkChoose
                                    full
                                    (lambda unrestricted force : Nat .
                                      (workReduceCoreGenericEliminator
                                        coreEliminatedFamilyName
                                        new_coreEliminatorMotive
                                        new_coreEliminatorScrutinee
                                        new_coreEliminatorBranches
                                        remaining))
                                    (lambda unrestricted force : Nat .
                                      (constructor
                                        CoreWorkResult
                                        CoreWorkCompleted
                                        (constructor
                                        CoreTerm
                                        CoreEliminator
                                        coreEliminatedFamilyName
                                        new_coreEliminatorMotive
                                        new_coreEliminatorScrutinee
                                        new_coreEliminatorBranches)
                                        remaining)))))))))))))))))))

def workReduceCoreRounds =
  (lambda unrestricted full : Nat .
    (lambda unrestricted rounds : Nat .
      (nat-eliminate
        (lambda unrestricted remaining : Nat .
          (pi unrestricted term : (family CoreTerm) .
            (pi unrestricted budget : (family NormalizationBudget) . (family CoreReductionResult))))
        (lambda unrestricted term : (family CoreTerm) .
          (lambda unrestricted budget : (family NormalizationBudget) .
            (constructor CoreReductionResult CoreReductionExhausted term zero)))
        (lambda unrestricted predecessor : Nat .
          (lambda unrestricted induction : (pi unrestricted term : (family CoreTerm) . (pi unrestricted budget : (family NormalizationBudget) . (family CoreReductionResult))) .
            (lambda unrestricted term : (family CoreTerm) .
              (lambda unrestricted budget : (family NormalizationBudget) .
                (eliminate
                  CoreWorkResult
                  (lambda unrestricted current : (family CoreWorkResult) .
                    (family CoreReductionResult))
                  (workNormalizeCoreOne full term budget)
                  (branch
                    CoreWorkCompleted
                    reduced
                    remaining
                    .
                    (app
                      (nat-eliminate
                        (lambda unrestricted equal : Nat .
                          (pi unrestricted force : Nat . (family CoreReductionResult)))
                        (lambda unrestricted force : Nat .
                          (countCoreReductionRound (induction reduced remaining)))
                        (lambda unrestricted predecessor : Nat .
                          (lambda unrestricted ignored : (pi unrestricted force : Nat . (family CoreReductionResult)) .
                            (lambda unrestricted force : Nat .
                              (constructor
                                CoreReductionResult
                                CoreReductionCompleted
                                reduced
                                (succ zero)))))
                        (coreTermEqual term reduced))
                      zero))
                  (branch
                    CoreWorkExhausted
                    remaining
                    .
                    (constructor CoreReductionResult CoreReductionExhausted term (succ zero))))))))
        rounds)))

def workNormalizeCoreWithLimit =
  (lambda unrestricted full : Nat .
    (lambda unrestricted rounds : Nat .
      (lambda unrestricted limit : (family ModelWord32) .
        (lambda unrestricted term : (family CoreTerm) .
          (workReduceCoreRounds
            full
            rounds
            term
            (Compiler.NormalizationBudget/normalizationBudget limit))))))

def normalizeCoreTypeWithWorkBudget =
  (workNormalizeCoreWithLimit zero)

def normalizeCoreTypeWithBudget =
  (lambda unrestricted rounds : Nat .
    (normalizeCoreTypeWithWorkBudget rounds coreNormalizationDefaultWork))

-- Continue only with a completed normal form. Resource exhaustion is distinct
-- from an inferred type mismatch and never supplies a residual to admission.
def withCoreNormalization =
  (lambda unrestricted budget : Nat .
    (lambda unrestricted term : (family CoreTerm) .
      (lambda unrestricted continuation : (pi unrestricted normal : (family CoreTerm) . (family CoreInferenceResult)) .
        (eliminate
          CoreReductionResult
          (lambda unrestricted result : (family CoreReductionResult) . (family CoreInferenceResult))
          (normalizeCoreTypeWithBudget budget term)
          (branch CoreReductionCompleted normal rounds . (continuation normal))
          (branch
            CoreReductionExhausted
            residual
            rounds
            .
            (constructor
              CoreInferenceResult
              CoreInferenceFailed
              coreNormalizationResourceFailureCode))))))

def inferNormalizedCoreTypeWithBudget =
  (lambda unrestricted budget : Nat .
    (lambda unrestricted term : (family CoreTerm) .
      (withCoreNormalization
        budget
        term
        (lambda unrestricted normal : (family CoreTerm) .
          (constructor CoreInferenceResult CoreInferred normal)))))

def shiftTypeLookup :
  (pi unrestricted result : (family TypeLookupResult) . (family TypeLookupResult)) =
  (lambda unrestricted result : (family TypeLookupResult) .
    (eliminate
      TypeLookupResult
      (lambda unrestricted value : (family TypeLookupResult) . (family TypeLookupResult))
      result
      (branch
        TypeFound
        variableType
        .
        (constructor TypeLookupResult TypeFound (shiftCoreBy (succ zero) variableType)))
      (branch TypeNotFound index . (constructor TypeLookupResult TypeNotFound (succ index)))))

def lookupTypeWithShift :
  (pi unrestricted context : (family TypeContext) .
    (pi unrestricted index : Nat .
      (pi unrestricted amount : Nat .
        (pi unrestricted originalIndex : Nat . (family TypeLookupResult))))) =
  (lambda unrestricted context : (family TypeContext) .
    (eliminate
      TypeContext
      (lambda unrestricted value : (family TypeContext) .
        (pi unrestricted index : Nat .
          (pi unrestricted amount : Nat .
            (pi unrestricted originalIndex : Nat . (family TypeLookupResult)))))
      context
      (branch
        EmptyTypeContext
        .
        (lambda unrestricted index : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted originalIndex : Nat .
              (constructor TypeLookupResult TypeNotFound originalIndex)))))
      (branch
        TypeContextBinding
        bindingType
        outerContext
        ih_outerContext
        .
        (lambda unrestricted index : Nat .
          (lambda unrestricted amount : Nat .
            (lambda unrestricted originalIndex : Nat .
              (app
                (nat-eliminate
                  (lambda unrestricted value : Nat .
                    (pi unrestricted ignored : Nat . (family TypeLookupResult)))
                  (lambda unrestricted ignored : Nat .
                    (constructor TypeLookupResult TypeFound (shiftCoreBy amount bindingType)))
                  (lambda unrestricted predecessor : Nat .
                    (lambda unrestricted induction : (pi unrestricted ignored : Nat . (family TypeLookupResult)) .
                      (lambda unrestricted ignored : Nat .
                        (ih_outerContext predecessor (succ amount) originalIndex))))
                  index)
                zero)))))))

def lookupType :
  (pi unrestricted context : (family TypeContext) .
    (pi unrestricted index : Nat . (family TypeLookupResult))) =
  (lambda unrestricted context : (family TypeContext) .
    (lambda unrestricted index : Nat . (lookupTypeWithShift context index (succ zero) index)))

def inspectUniverse : (pi unrestricted term : (family CoreTerm) . (family UniverseInspection)) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family UniverseInspection))
      term
      (branch CoreUniverse level . (constructor UniverseInspection IsUniverse level))
      (branch CoreNatural . (constructor UniverseInspection NotUniverse))
      (branch CoreNaturalLiteral value . (constructor UniverseInspection NotUniverse))
      (branch CoreBound index . (constructor UniverseInspection NotUniverse))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (constructor UniverseInspection NotUniverse))
      (branch CoreByte . (constructor UniverseInspection NotUniverse))
      (branch CoreByteLiteral value . (constructor UniverseInspection NotUniverse))
      (branch CoreBytes . (constructor UniverseInspection NotUniverse))
      (branch CoreBytesLiteral value . (constructor UniverseInspection NotUniverse))
      (branch CorePrimitiveTerm primitive . (constructor UniverseInspection NotUniverse))
      (branch CoreTermSequenceEnd . (constructor UniverseInspection NotUniverse))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor UniverseInspection NotUniverse))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor UniverseInspection NotUniverse))))

def inspectPi : (pi unrestricted term : (family CoreTerm) . (family PiInspection)) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family PiInspection))
      term
      (branch CoreUniverse level . (constructor PiInspection NotPi))
      (branch CoreNatural . (constructor PiInspection NotPi))
      (branch CoreNaturalLiteral value . (constructor PiInspection NotPi))
      (branch CoreBound index . (constructor PiInspection NotPi))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor PiInspection IsPi multiplicity domain codomain))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor PiInspection NotPi))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (constructor PiInspection NotPi))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (constructor PiInspection NotPi))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (constructor PiInspection NotPi))
      (branch CoreNaturalSuccessor predecessor ih_predecessor . (constructor PiInspection NotPi))
      (branch CoreByte . (constructor PiInspection NotPi))
      (branch CoreByteLiteral value . (constructor PiInspection NotPi))
      (branch CoreBytes . (constructor PiInspection NotPi))
      (branch CoreBytesLiteral value . (constructor PiInspection NotPi))
      (branch CorePrimitiveTerm primitive . (constructor PiInspection NotPi))
      (branch CoreTermSequenceEnd . (constructor PiInspection NotPi))
      (branch CoreTermSequenceNext head tail ih_head ih_tail . (constructor PiInspection NotPi))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor PiInspection NotPi))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor PiInspection NotPi))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor PiInspection NotPi))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor PiInspection NotPi))))

def coreFamilyInferenceFailureCode =
  (succ
    (succ (succ (succ (succ (succ (succ (succ (succ (succ (succ (succ (succ (succ zero))))))))))))))

def inferNaturalSuccessorType :
  (pi unrestricted predecessorResult : (family CoreInferenceResult) . (family CoreInferenceResult)) =
  (lambda unrestricted predecessorResult : (family CoreInferenceResult) .
    (eliminate
      CoreInferenceResult
      (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
      predecessorResult
      (branch
        CoreInferred
        predecessorType
        .
        (nat-eliminate
          (lambda unrestricted matched : Nat . (family CoreInferenceResult))
          (constructor
            CoreInferenceResult
            CoreInferenceFailed
            (succ (succ (succ (succ (succ (succ (succ zero))))))))
          (lambda unrestricted predecessor : Nat .
            (lambda unrestricted induction : (family CoreInferenceResult) .
              (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreNatural))))
          (coreTermEqual predecessorType (constructor CoreTerm CoreNatural))))
      (branch CoreInferenceFailed code . (constructor CoreInferenceResult CoreInferenceFailed code))))

def inferUniversePair :
  (pi unrestricted domainInspection : (family UniverseInspection) .
    (pi unrestricted codomainInspection : (family UniverseInspection) .
      (family CoreInferenceResult))) =
  (lambda unrestricted domainInspection : (family UniverseInspection) .
    (lambda unrestricted codomainInspection : (family UniverseInspection) .
      (eliminate
        UniverseInspection
        (lambda unrestricted inspection : (family UniverseInspection) .
          (family CoreInferenceResult))
        domainInspection
        (branch
          IsUniverse
          domainLevel
          .
          (eliminate
            UniverseInspection
            (lambda unrestricted inspection : (family UniverseInspection) .
              (family CoreInferenceResult))
            codomainInspection
            (branch
              IsUniverse
              codomainLevel
              .
              (constructor
                CoreInferenceResult
                CoreInferred
                (constructor CoreTerm CoreUniverse (naturalMaximum domainLevel codomainLevel))))
            (branch
              NotUniverse
              .
              (constructor CoreInferenceResult CoreInferenceFailed (succ (succ (succ zero)))))))
        (branch
          NotUniverse
          .
          (constructor CoreInferenceResult CoreInferenceFailed (succ (succ zero)))))))

def inferPiType :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domainResult : (family CoreInferenceResult) .
      (pi unrestricted codomainResult : (family CoreInferenceResult) . (family CoreInferenceResult)))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domainResult : (family CoreInferenceResult) .
      (lambda unrestricted codomainResult : (family CoreInferenceResult) .
        (eliminate
          CoreInferenceResult
          (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
          domainResult
          (branch
            CoreInferred
            domainType
            .
            (eliminate
              CoreInferenceResult
              (lambda unrestricted result : (family CoreInferenceResult) .
                (family CoreInferenceResult))
              codomainResult
              (branch
                CoreInferred
                codomainType
                .
                (inferUniversePair (inspectUniverse domainType) (inspectUniverse codomainType)))
              (branch
                CoreInferenceFailed
                code
                .
                (constructor CoreInferenceResult CoreInferenceFailed code))))
          (branch
            CoreInferenceFailed
            code
            .
            (constructor CoreInferenceResult CoreInferenceFailed code))))))

def inferLambdaBody :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domain : (family CoreTerm) .
      (pi unrestricted bodyResult : (family CoreInferenceResult) . (family CoreInferenceResult)))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domain : (family CoreTerm) .
      (lambda unrestricted bodyResult : (family CoreInferenceResult) .
        (eliminate
          CoreInferenceResult
          (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
          bodyResult
          (branch
            CoreInferred
            bodyType
            .
            (constructor
              CoreInferenceResult
              CoreInferred
              (constructor CoreTerm CorePi multiplicity domain bodyType)))
          (branch
            CoreInferenceFailed
            code
            .
            (constructor CoreInferenceResult CoreInferenceFailed code))))))

def inferLambdaFromUniverse :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domain : (family CoreTerm) .
      (pi unrestricted inspection : (family UniverseInspection) .
        (pi unrestricted bodyResult : (family CoreInferenceResult) . (family CoreInferenceResult))))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domain : (family CoreTerm) .
      (lambda unrestricted inspection : (family UniverseInspection) .
        (lambda unrestricted bodyResult : (family CoreInferenceResult) .
          (eliminate
            UniverseInspection
            (lambda unrestricted value : (family UniverseInspection) . (family CoreInferenceResult))
            inspection
            (branch IsUniverse level . (inferLambdaBody multiplicity domain bodyResult))
            (branch
              NotUniverse
              .
              (constructor CoreInferenceResult CoreInferenceFailed (succ (succ (succ (succ zero)))))))))))

def inferLambdaType :
  (pi unrestricted multiplicity : (family CoreMultiplicity) .
    (pi unrestricted domain : (family CoreTerm) .
      (pi unrestricted domainResult : (family CoreInferenceResult) .
        (pi unrestricted bodyResult : (family CoreInferenceResult) . (family CoreInferenceResult))))) =
  (lambda unrestricted multiplicity : (family CoreMultiplicity) .
    (lambda unrestricted domain : (family CoreTerm) .
      (lambda unrestricted domainResult : (family CoreInferenceResult) .
        (lambda unrestricted bodyResult : (family CoreInferenceResult) .
          (eliminate
            CoreInferenceResult
            (lambda unrestricted result : (family CoreInferenceResult) .
              (family CoreInferenceResult))
            domainResult
            (branch
              CoreInferred
              domainType
              .
              (inferLambdaFromUniverse multiplicity domain (inspectUniverse domainType) bodyResult))
            (branch
              CoreInferenceFailed
              code
              .
              (constructor CoreInferenceResult CoreInferenceFailed code)))))))

def inferApplicationNormalizedDomain =
  (lambda unrestricted budget : Nat .
    (lambda unrestricted argument : (family CoreTerm) .
      (lambda unrestricted codomain : (family CoreTerm) .
        (lambda unrestricted argumentType : (family CoreTerm) .
          (lambda unrestricted domain : (family CoreTerm) .
            (app
              (nat-eliminate
                (lambda unrestricted equal : Nat .
                  (pi unrestricted trigger : Nat . (family CoreInferenceResult)))
                (lambda unrestricted trigger : Nat .
                  (constructor CoreInferenceResult CoreInferenceFailed (byte-to-nat (byte 6))))
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (pi unrestricted trigger : Nat . (family CoreInferenceResult)) .
                    (lambda unrestricted trigger : Nat .
                      (inferNormalizedCoreTypeWithBudget
                        budget
                        (substituteCoreTop argument codomain)))))
                (coreTermEqual argumentType domain))
              zero))))))

-- The budget bounds each requested normal form, not aggregate inference work.
def inferApplicationArgumentWithBudget =
  (lambda unrestricted budget : Nat .
    (lambda unrestricted argument : (family CoreTerm) .
      (lambda unrestricted domain : (family CoreTerm) .
        (lambda unrestricted codomain : (family CoreTerm) .
          (lambda unrestricted argumentResult : (family CoreInferenceResult) .
            (eliminate
              CoreInferenceResult
              (lambda unrestricted result : (family CoreInferenceResult) .
                (family CoreInferenceResult))
              argumentResult
              (branch
                CoreInferred
                argumentType
                .
                (withCoreNormalization
                  budget
                  argumentType
                  (lambda unrestricted normalArgumentType : (family CoreTerm) .
                    (withCoreNormalization
                      budget
                      domain
                      (inferApplicationNormalizedDomain budget argument codomain normalArgumentType)))))
              (branch
                CoreInferenceFailed
                code
                .
                (constructor CoreInferenceResult CoreInferenceFailed code))))))))

def inferApplicationArgument =
  (inferApplicationArgumentWithBudget coreNormalizationDefaultRounds)

def inferApplicationPi :
  (pi unrestricted argument : (family CoreTerm) .
    (pi unrestricted inspection : (family PiInspection) .
      (pi unrestricted argumentResult : (family CoreInferenceResult) . (family CoreInferenceResult)))) =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted inspection : (family PiInspection) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (eliminate
          PiInspection
          (lambda unrestricted value : (family PiInspection) . (family CoreInferenceResult))
          inspection
          (branch
            IsPi
            multiplicity
            domain
            codomain
            .
            (inferApplicationArgument argument domain codomain argumentResult))
          (branch
            NotPi
            .
            (constructor
              CoreInferenceResult
              CoreInferenceFailed
              (succ (succ (succ (succ (succ zero)))))))))))

def inferApplicationType :
  (pi unrestricted argument : (family CoreTerm) .
    (pi unrestricted functionResult : (family CoreInferenceResult) .
      (pi unrestricted argumentResult : (family CoreInferenceResult) . (family CoreInferenceResult)))) =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (eliminate
          CoreInferenceResult
          (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
          functionResult
          (branch
            CoreInferred
            functionType
            .
            (withCoreNormalization
              coreNormalizationDefaultRounds
              functionType
              (lambda unrestricted normalFunctionType : (family CoreTerm) .
                (inferApplicationPi argument (inspectPi normalFunctionType) argumentResult))))
          (branch
            CoreInferenceFailed
            code
            .
            (constructor CoreInferenceResult CoreInferenceFailed code))))))

def extendCoreInferenceFunctionInspection =
  (lambda unrestricted inspection : (family CoreFunctionInspection) .
    (lambda unrestricted argument : (family CoreTerm) .
      (eliminate
        CoreFunctionInspection
        (lambda unrestricted value : (family CoreFunctionInspection) .
          (family CoreFunctionInspection))
        inspection
        (branch CoreFunctionLambda body . (constructor CoreFunctionInspection CoreFunctionOther))
        (branch
          CoreFunctionPrimitive
          primitive
          .
          (constructor CoreFunctionInspection CoreFunctionAppliedPrimitive primitive argument))
        (branch
          CoreFunctionAppliedPrimitive
          primitive
          first
          .
          (constructor
            CoreFunctionInspection
            CoreFunctionAppliedPrimitive2
            primitive
            first
            argument))
        (branch
          CoreFunctionAppliedPrimitive2
          primitive
          first
          second
          .
          (constructor
            CoreFunctionInspection
            CoreFunctionAppliedPrimitive3
            primitive
            first
            second
            argument))
        (branch
          CoreFunctionAppliedPrimitive3
          primitive
          first
          second
          third
          .
          (constructor CoreFunctionInspection CoreFunctionOther))
        (branch CoreFunctionOther . (constructor CoreFunctionInspection CoreFunctionOther)))))

def inspectCoreInferenceFunction =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family CoreFunctionInspection))
      term
      (branch CoreUniverse level . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreNatural . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreNaturalLiteral value . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreBound index . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor CoreFunctionInspection CoreFunctionLambda body))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (extendCoreInferenceFunctionInspection ih_function argument))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreByte . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreByteLiteral value . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreBytes . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch CoreBytesLiteral value . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (constructor CoreFunctionInspection CoreFunctionPrimitive primitive))
      (branch CoreTermSequenceEnd . (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor CoreFunctionInspection CoreFunctionOther))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (constructor CoreFunctionInspection CoreFunctionOther))))

def corePrimitiveMatches =
  (lambda unrestricted left : (family CorePrimitive) .
    (lambda unrestricted right : (family CorePrimitive) .
      (naturalEqual (corePrimitiveCode left) (corePrimitiveCode right))))

def coreEffectRowValid =
  (lambda unrestricted row : (family CoreTerm) .
    (eliminate
      CoreFunctionInspection
      (lambda unrestricted inspection : (family CoreFunctionInspection) . Nat)
      (inspectCoreInferenceFunction row)
      (branch CoreFunctionLambda body . zero)
      (branch CoreFunctionPrimitive primitive . zero)
      (branch
        CoreFunctionAppliedPrimitive
        primitive
        effect
        .
        (nat-eliminate
          (lambda unrestricted matched : Nat . Nat)
          zero
          (lambda unrestricted predecessor : Nat .
            (lambda unrestricted induction : Nat .
              (eliminate
                CoreFunctionInspection
                (lambda unrestricted effectInspection : (family CoreFunctionInspection) . Nat)
                (inspectCoreInferenceFunction effect)
                (branch CoreFunctionLambda body . zero)
                (branch
                  CoreFunctionPrimitive
                  effectPrimitive
                  .
                  (corePrimitiveMatches effectPrimitive (constructor CorePrimitive CoreFileEffect)))
                (branch CoreFunctionAppliedPrimitive ignored first . zero)
                (branch CoreFunctionAppliedPrimitive2 ignored first second . zero)
                (branch CoreFunctionAppliedPrimitive3 ignored first second third . zero)
                (branch CoreFunctionOther . zero))))
          (corePrimitiveMatches primitive (constructor CorePrimitive CoreEffects))))
      (branch CoreFunctionAppliedPrimitive2 primitive first second . zero)
      (branch CoreFunctionAppliedPrimitive3 primitive first second third . zero)
      (branch CoreFunctionOther . zero)))

def inferCoreEffectHead =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted argumentResult : (family CoreInferenceResult) .
      (eliminate
        CoreInferenceResult
        (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
        argumentResult
        (branch
          CoreInferred
          effectType
          .
          (eliminate
            UniverseInspection
            (lambda unrestricted inspection : (family UniverseInspection) .
              (family CoreInferenceResult))
            (inspectUniverse effectType)
            (branch
              IsUniverse
              level
              .
              (nat-eliminate
                (lambda unrestricted valid : Nat . (family CoreInferenceResult))
                (constructor
                  CoreInferenceResult
                  CoreInferenceFailed
                  (succ (succ (succ (succ (succ (succ zero)))))))
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (family CoreInferenceResult) .
                    (constructor
                      CoreInferenceResult
                      CoreInferred
                      (constructor CoreTerm CoreUniverse zero))))
                (coreEffectRowValid effects)))
            (branch
              NotUniverse
              .
              (constructor
                CoreInferenceResult
                CoreInferenceFailed
                (succ (succ (succ (succ (succ (succ zero))))))))))
        (branch
          CoreInferenceFailed
          code
          .
          (constructor CoreInferenceResult CoreInferenceFailed code)))))

def inferCoreReturnApplication =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted valueResult : (family CoreInferenceResult) .
        (eliminate
          CoreInferenceResult
          (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
          functionResult
          (branch
            CoreInferred
            marker
            .
            (eliminate
              CoreInferenceResult
              (lambda unrestricted result : (family CoreInferenceResult) .
                (family CoreInferenceResult))
              valueResult
              (branch
                CoreInferred
                valueType
                .
                (constructor
                  CoreInferenceResult
                  CoreInferred
                  (coreComputationType effects valueType)))
              (branch
                CoreInferenceFailed
                code
                .
                (constructor CoreInferenceResult CoreInferenceFailed code))))
          (branch
            CoreInferenceFailed
            code
            .
            (constructor CoreInferenceResult CoreInferenceFailed code))))))

def inferCoreBindResultType =
  (lambda unrestricted functionResult : (family CoreInferenceResult) .
    (lambda unrestricted resultTypeResult : (family CoreInferenceResult) .
      (eliminate
        CoreInferenceResult
        (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
        functionResult
        (branch
          CoreInferred
          marker
          .
          (eliminate
            CoreInferenceResult
            (lambda unrestricted result : (family CoreInferenceResult) .
              (family CoreInferenceResult))
            resultTypeResult
            (branch
              CoreInferred
              resultUniverse
              .
              (eliminate
                UniverseInspection
                (lambda unrestricted inspection : (family UniverseInspection) .
                  (family CoreInferenceResult))
                (inspectUniverse resultUniverse)
                (branch
                  IsUniverse
                  level
                  .
                  (constructor
                    CoreInferenceResult
                    CoreInferred
                    (constructor CoreTerm CoreUniverse zero)))
                (branch
                  NotUniverse
                  .
                  (constructor
                    CoreInferenceResult
                    CoreInferenceFailed
                    (succ (succ (succ (succ (succ (succ zero))))))))))
            (branch
              CoreInferenceFailed
              code
              .
              (constructor CoreInferenceResult CoreInferenceFailed code))))
        (branch
          CoreInferenceFailed
          code
          .
          (constructor CoreInferenceResult CoreInferenceFailed code)))))

def coreBindContinuationType =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted resultType : (family CoreTerm) .
      (lambda unrestricted inputType : (family CoreTerm) .
        (constructor
          CoreTerm
          CorePi
          coreUnrestricted
          (constructor
            CoreTerm
            CorePi
            coreUnrestricted
            inputType
            (coreComputationType
              (shiftCoreBy (succ zero) effects)
              (shiftCoreBy (succ zero) resultType)))
          (coreComputationType
            (shiftCoreBy (succ zero) effects)
            (shiftCoreBy (succ zero) resultType))))))

def coreEffectInferenceFailure =
  (constructor
    CoreInferenceResult
    CoreInferenceFailed
    (succ (succ (succ (succ (succ (succ zero)))))))

def coreInferredBindContinuation =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted resultType : (family CoreTerm) .
      (lambda unrestricted inputType : (family CoreTerm) .
        (constructor
          CoreInferenceResult
          CoreInferred
          (coreBindContinuationType effects resultType inputType)))))

def inferCoreBindInspection =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted resultType : (family CoreTerm) .
      (lambda unrestricted inspection : (family CoreFunctionInspection) .
        (eliminate
          CoreFunctionInspection
          (lambda unrestricted value : (family CoreFunctionInspection) .
            (family CoreInferenceResult))
          inspection
          (branch CoreFunctionLambda body . coreEffectInferenceFailure)
          (branch CoreFunctionPrimitive primitive . coreEffectInferenceFailure)
          (branch CoreFunctionAppliedPrimitive primitive first . coreEffectInferenceFailure)
          (branch
            CoreFunctionAppliedPrimitive2
            primitive
            inputEffects
            inputType
            .
            (nat-eliminate
              (lambda unrestricted valid : Nat . (family CoreInferenceResult))
              coreEffectInferenceFailure
              (lambda unrestricted predecessor : Nat .
                (lambda unrestricted induction : (family CoreInferenceResult) .
                  (coreInferredBindContinuation effects resultType inputType)))
              (coreNaturalAnd
                (corePrimitiveMatches primitive (constructor CorePrimitive CoreComputation))
                (coreNaturalAnd (coreEffectRowValid effects) (coreEffectRowValid inputEffects)))))
          (branch
            CoreFunctionAppliedPrimitive3
            primitive
            first
            second
            third
            .
            coreEffectInferenceFailure)
          (branch CoreFunctionOther . coreEffectInferenceFailure)))))

def inferCoreBindInputResult =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted resultType : (family CoreTerm) .
      (lambda unrestricted inputResult : (family CoreInferenceResult) .
        (eliminate
          CoreInferenceResult
          (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
          inputResult
          (branch
            CoreInferred
            inputComputationType
            .
            (inferCoreBindInspection
              effects
              resultType
              (inspectCoreInferenceFunction inputComputationType)))
          (branch
            CoreInferenceFailed
            code
            .
            (constructor CoreInferenceResult CoreInferenceFailed code))))))

def inferCoreBindInput =
  (lambda unrestricted effects : (family CoreTerm) .
    (lambda unrestricted resultType : (family CoreTerm) .
      (lambda unrestricted functionResult : (family CoreInferenceResult) .
        (lambda unrestricted inputResult : (family CoreInferenceResult) .
          (eliminate
            CoreInferenceResult
            (lambda unrestricted result : (family CoreInferenceResult) .
              (family CoreInferenceResult))
            functionResult
            (branch CoreInferred marker . (inferCoreBindInputResult effects resultType inputResult))
            (branch
              CoreInferenceFailed
              code
              .
              (constructor CoreInferenceResult CoreInferenceFailed code)))))))

def inferCoreApplicationDefault =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (inferApplicationType argument functionResult argumentResult))))

def inferCorePrimitiveApplication =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (lambda unrestricted primitive : (family CorePrimitive) .
          (nat-eliminate
            (lambda unrestricted special : Nat . (family CoreInferenceResult))
            (inferCoreApplicationDefault argument functionResult argumentResult)
            (lambda unrestricted predecessor : Nat .
              (lambda unrestricted induction : (family CoreInferenceResult) .
                (inferCoreEffectHead argument argumentResult)))
            (nat-eliminate
              (lambda unrestricted returnMatch : Nat . Nat)
              (corePrimitiveMatches primitive (constructor CorePrimitive CoreBind))
              (lambda unrestricted predecessor : Nat .
                (lambda unrestricted induction : Nat . (succ zero)))
              (corePrimitiveMatches primitive (constructor CorePrimitive CoreReturn))))))))

def inferCoreAppliedPrimitiveApplication =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (lambda unrestricted primitive : (family CorePrimitive) .
          (lambda unrestricted effects : (family CoreTerm) .
            (nat-eliminate
              (lambda unrestricted isReturn : Nat . (family CoreInferenceResult))
              (nat-eliminate
                (lambda unrestricted isBind : Nat . (family CoreInferenceResult))
                (inferCoreApplicationDefault argument functionResult argumentResult)
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (family CoreInferenceResult) .
                    (inferCoreBindResultType functionResult argumentResult)))
                (corePrimitiveMatches primitive (constructor CorePrimitive CoreBind)))
              (lambda unrestricted predecessor : Nat .
                (lambda unrestricted induction : (family CoreInferenceResult) .
                  (inferCoreReturnApplication effects functionResult argumentResult)))
              (corePrimitiveMatches primitive (constructor CorePrimitive CoreReturn))))))))

def inferCoreAppliedPrimitive2Application =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (lambda unrestricted primitive : (family CorePrimitive) .
          (lambda unrestricted effects : (family CoreTerm) .
            (lambda unrestricted resultType : (family CoreTerm) .
              (nat-eliminate
                (lambda unrestricted isBind : Nat . (family CoreInferenceResult))
                (inferCoreApplicationDefault argument functionResult argumentResult)
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (family CoreInferenceResult) .
                    (inferCoreBindInput effects resultType functionResult argumentResult)))
                (corePrimitiveMatches primitive (constructor CorePrimitive CoreBind)))))))))

def inferCoreApplicationInspection =
  (lambda unrestricted argument : (family CoreTerm) .
    (lambda unrestricted functionResult : (family CoreInferenceResult) .
      (lambda unrestricted argumentResult : (family CoreInferenceResult) .
        (lambda unrestricted inspection : (family CoreFunctionInspection) .
          (eliminate
            CoreFunctionInspection
            (lambda unrestricted inspection : (family CoreFunctionInspection) .
              (family CoreInferenceResult))
            inspection
            (branch
              CoreFunctionLambda
              body
              .
              (inferCoreApplicationDefault argument functionResult argumentResult))
            (branch
              CoreFunctionPrimitive
              primitive
              .
              (inferCorePrimitiveApplication argument functionResult argumentResult primitive))
            (branch
              CoreFunctionAppliedPrimitive
              primitive
              effects
              .
              (inferCoreAppliedPrimitiveApplication
                argument
                functionResult
                argumentResult
                primitive
                effects))
            (branch
              CoreFunctionAppliedPrimitive2
              primitive
              effects
              resultType
              .
              (inferCoreAppliedPrimitive2Application
                argument
                functionResult
                argumentResult
                primitive
                effects
                resultType))
            (branch
              CoreFunctionAppliedPrimitive3
              primitive
              first
              second
              third
              .
              (inferCoreApplicationDefault argument functionResult argumentResult))
            (branch
              CoreFunctionOther
              .
              (inferCoreApplicationDefault argument functionResult argumentResult)))))))

def inferCoreApplicationWithEffects =
  (lambda unrestricted function : (family CoreTerm) .
    (lambda unrestricted argument : (family CoreTerm) .
      (lambda unrestricted functionResult : (family CoreInferenceResult) .
        (lambda unrestricted argumentResult : (family CoreInferenceResult) .
          (inferCoreApplicationInspection
            argument
            functionResult
            argumentResult
            (inspectCoreInferenceFunction function))))))

def inferCoreEliminatorApplicationResult =
  (lambda unrestricted motive : (family CoreTerm) .
    (lambda unrestricted scrutinee : (family CoreTerm) .
      (lambda unrestricted applicationResult : (family CoreInferenceResult) .
        (eliminate
          CoreInferenceResult
          (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
          applicationResult
          (branch
            CoreInferred
            motiveApplicationUniverse
            .
            (inferNormalizedCoreTypeWithBudget
              coreNormalizationDefaultRounds
              (constructor CoreTerm CoreApplication motive scrutinee)))
          (branch
            CoreInferenceFailed
            code
            .
            (constructor CoreInferenceResult CoreInferenceFailed code))))))

def inferCoreEliminatorResult =
  (lambda unrestricted motive : (family CoreTerm) .
    (lambda unrestricted scrutinee : (family CoreTerm) .
      (lambda unrestricted motiveResult : (family CoreInferenceResult) .
        (lambda unrestricted scrutineeResult : (family CoreInferenceResult) .
          (inferCoreEliminatorApplicationResult
            motive
            scrutinee
            (inferCoreApplicationWithEffects motive scrutinee motiveResult scrutineeResult))))))

def coreNaturalMagnitudeFailureCode =
  (succ coreFamilyInferenceFailureCode)

def inferCoreNaturalMagnitude =
  (lambda unrestricted digits : Bytes .
    (eliminate
      NaturalMagnitudeResult
      (lambda unrestricted result : (family NaturalMagnitudeResult) . (family CoreInferenceResult))
      (Compiler.NaturalMagnitude/magnitudeDecodeCanonical digits)
      (branch
        NaturalMagnitudeAccepted
        valid
        .
        (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreNatural)))
      (branch
        NaturalMagnitudeRejected
        failure
        .
        (constructor CoreInferenceResult CoreInferenceFailed coreNaturalMagnitudeFailureCode))))

def inferCoreArithmeticInspection =
  (lambda unrestricted inspection : (family CoreArithmeticInspection) .
    (eliminate
      CoreArithmeticInspection
      (lambda unrestricted current : (family CoreArithmeticInspection) .
        (family CoreInferenceResult))
      inspection
      (branch CoreArithmeticValue digits . (inferCoreNaturalMagnitude digits))
      (branch
        CoreArithmeticNeutral
        .
        (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreNatural)))
      (branch
        CoreArithmeticRejected
        failure
        .
        (constructor CoreInferenceResult CoreInferenceFailed coreNaturalMagnitudeFailureCode))))

def inferCoreNormalizedArithmetic =
  (lambda unrestricted budget : Nat .
    (lambda unrestricted operation : (family CoreNaturalOperation) .
      (lambda unrestricted left : (family CoreTerm) .
        (lambda unrestricted right : (family CoreTerm) .
          (withCoreNormalization
            budget
            left
            (lambda unrestricted normalLeft : (family CoreTerm) .
              (withCoreNormalization
                budget
                right
                (lambda unrestricted normalRight : (family CoreTerm) .
                  (inferCoreArithmeticInspection
                    (inspectCoreArithmetic operation normalLeft normalRight))))))))))

-- Operand witnesses establish Nat typing. The proof predicate consumes the
-- same checked normal forms directly, without constructing an inference result.
def coreArithmeticAdmissionRight =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted rightResult : (family CoreReductionResult) .
        (eliminate
          CoreReductionResult
          (lambda unrestricted result : (family CoreReductionResult) . Nat)
          rightResult
          (branch
            CoreReductionCompleted
            right
            rounds
            .
            (eliminate
              CoreArithmeticInspection
              (lambda unrestricted inspection : (family CoreArithmeticInspection) . Nat)
              (inspectCoreArithmetic operation left right)
              (branch CoreArithmeticValue digits . (succ zero))
              (branch CoreArithmeticNeutral . (succ zero))
              (branch CoreArithmeticRejected failure . zero)))
          (branch CoreReductionExhausted residual rounds . zero)))))

def coreArithmeticAdmissible =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (eliminate
          CoreReductionResult
          (lambda unrestricted result : (family CoreReductionResult) . Nat)
          (normalizeCoreTypeWithBudget coreNormalizationDefaultRounds left)
          (branch
            CoreReductionCompleted
            normalLeft
            rounds
            .
            (coreArithmeticAdmissionRight
              operation
              normalLeft
              (normalizeCoreTypeWithBudget coreNormalizationDefaultRounds right)))
          (branch CoreReductionExhausted residual rounds . zero)))))

def inferCoreArithmeticOperands =
  (lambda unrestricted operation : (family CoreNaturalOperation) .
    (lambda unrestricted left : (family CoreTerm) .
      (lambda unrestricted right : (family CoreTerm) .
        (lambda unrestricted leftResult : (family CoreInferenceResult) .
          (lambda unrestricted rightResult : (family CoreInferenceResult) .
            (eliminate
              CoreInferenceResult
              (lambda unrestricted current : (family CoreInferenceResult) .
                (family CoreInferenceResult))
              (inferNaturalSuccessorType leftResult)
              (branch
                CoreInferred
                leftType
                .
                (eliminate
                  CoreInferenceResult
                  (lambda unrestricted current : (family CoreInferenceResult) .
                    (family CoreInferenceResult))
                  (inferNaturalSuccessorType rightResult)
                  (branch
                    CoreInferred
                    rightType
                    .
                    (inferCoreNormalizedArithmetic
                      coreNormalizationDefaultRounds
                      operation
                      left
                      right))
                  (branch
                    CoreInferenceFailed
                    code
                    .
                    (constructor CoreInferenceResult CoreInferenceFailed code))))
              (branch
                CoreInferenceFailed
                code
                .
                (constructor CoreInferenceResult CoreInferenceFailed code))))))))

def finishInferCoreLetBody =
  (lambda unrestricted value : (family CoreTerm) .
    (lambda unrestricted bodyResult : (family CoreInferenceResult) .
      (eliminate
        CoreInferenceResult
        (lambda unrestricted result : (family CoreInferenceResult) . (family CoreInferenceResult))
        bodyResult
        (branch
          CoreInferred
          bodyType
          .
          (constructor CoreInferenceResult CoreInferred (substituteCoreTop value bodyType)))
        (branch
          CoreInferenceFailed
          code
          .
          (constructor CoreInferenceResult CoreInferenceFailed code)))))

def finishInferCoreLetValue =
  (lambda unrestricted annotation : (family CoreTerm) .
    (lambda unrestricted value : (family CoreTerm) .
      (lambda unrestricted valueResult : (family CoreInferenceResult) .
        (lambda unrestricted bodyResult : (family CoreInferenceResult) .
          (eliminate
            CoreInferenceResult
            (lambda unrestricted result : (family CoreInferenceResult) .
              (family CoreInferenceResult))
            valueResult
            (branch
              CoreInferred
              valueType
              .
              (nat-eliminate
                (lambda unrestricted matches : Nat . (family CoreInferenceResult))
                (constructor
                  CoreInferenceResult
                  CoreInferenceFailed
                  (succ (succ (succ (succ (succ zero))))))
                (lambda unrestricted predecessor : Nat .
                  (lambda unrestricted induction : (family CoreInferenceResult) .
                    (finishInferCoreLetBody value bodyResult)))
                (coreTermEqual (normalizeCoreType valueType) (normalizeCoreType annotation))))
            (branch
              CoreInferenceFailed
              code
              .
              (constructor CoreInferenceResult CoreInferenceFailed code)))))))

def finishInferCoreLetAnnotation =
  (lambda unrestricted annotation : (family CoreTerm) .
    (lambda unrestricted value : (family CoreTerm) .
      (lambda unrestricted annotationResult : (family CoreInferenceResult) .
        (lambda unrestricted valueResult : (family CoreInferenceResult) .
          (lambda unrestricted bodyResult : (family CoreInferenceResult) .
            (eliminate
              CoreInferenceResult
              (lambda unrestricted result : (family CoreInferenceResult) .
                (family CoreInferenceResult))
              annotationResult
              (branch
                CoreInferred
                annotationType
                .
                (eliminate
                  UniverseInspection
                  (lambda unrestricted inspection : (family UniverseInspection) .
                    (family CoreInferenceResult))
                  (inspectUniverse (normalizeCoreType annotationType))
                  (branch
                    IsUniverse
                    level
                    .
                    (finishInferCoreLetValue annotation value valueResult bodyResult))
                  (branch
                    NotUniverse
                    .
                    (constructor
                      CoreInferenceResult
                      CoreInferenceFailed
                      (succ (succ (succ (succ zero))))))))
              (branch
                CoreInferenceFailed
                code
                .
                (constructor CoreInferenceResult CoreInferenceFailed code))))))))

def inferCore :
  (pi unrestricted term : (family CoreTerm) .
    (pi unrestricted context : (family TypeContext) . (family CoreInferenceResult))) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) .
        (pi unrestricted context : (family TypeContext) . (family CoreInferenceResult)))
      term
      (branch
        CoreUniverse
        level
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor
            CoreInferenceResult
            CoreInferred
            (constructor CoreTerm CoreUniverse (succ level)))))
      (branch
        CoreNatural
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreUniverse zero))))
      (branch
        CoreNaturalLiteral
        value
        .
        (lambda unrestricted context : (family TypeContext) . (inferCoreNaturalMagnitude value)))
      (branch
        CoreBound
        index
        .
        (lambda unrestricted context : (family TypeContext) .
          (eliminate
            TypeLookupResult
            (lambda unrestricted result : (family TypeLookupResult) . (family CoreInferenceResult))
            (lookupType context index)
            (branch
              TypeFound
              variableType
              .
              (constructor CoreInferenceResult CoreInferred variableType))
            (branch
              TypeNotFound
              missingIndex
              .
              (constructor CoreInferenceResult CoreInferenceFailed (succ zero))))))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (lambda unrestricted context : (family TypeContext) .
          (inferPiType
            multiplicity
            (ih_domain context)
            (ih_codomain (constructor TypeContext TypeContextBinding domain context)))))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (lambda unrestricted context : (family TypeContext) .
          (inferLambdaType
            multiplicity
            domain
            (ih_domain context)
            (ih_body (constructor TypeContext TypeContextBinding domain context)))))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (lambda unrestricted context : (family TypeContext) .
          (finishInferCoreLetAnnotation
            annotation
            value
            (ih_annotation context)
            (ih_value context)
            (ih_body (constructor TypeContext TypeContextBinding annotation context)))))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted context : (family TypeContext) .
          (inferCoreApplicationWithEffects
            function
            argument
            (ih_function context)
            (ih_argument context))))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (lambda unrestricted context : (family TypeContext) .
          (inferCoreArithmeticOperands
            operation
            function
            argument
            (ih_function context)
            (ih_argument context))))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (lambda unrestricted context : (family TypeContext) .
          (inferNaturalSuccessorType (ih_predecessor context))))
      (branch
        CoreByte
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreUniverse zero))))
      (branch
        CoreByteLiteral
        value
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreByte))))
      (branch
        CoreBytes
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreUniverse zero))))
      (branch
        CoreBytesLiteral
        value
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferred (constructor CoreTerm CoreBytes))))
      (branch
        CorePrimitiveTerm
        primitive
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferred (corePrimitiveType primitive))))
      (branch
        CoreTermSequenceEnd
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferenceFailed coreFamilyInferenceFailureCode)))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferenceFailed coreFamilyInferenceFailureCode)))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferenceFailed coreFamilyInferenceFailureCode)))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferenceFailed coreFamilyInferenceFailureCode)))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferenceFailed coreFamilyInferenceFailureCode)))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (lambda unrestricted context : (family TypeContext) .
          (constructor CoreInferenceResult CoreInferenceFailed coreFamilyInferenceFailureCode)))))

def inferClosedCore : (pi unrestricted term : (family CoreTerm) . (family CoreInferenceResult)) =
  (lambda unrestricted term : (family CoreTerm) .
    (inferCore term (constructor TypeContext EmptyTypeContext)))

def reduceCoreApplication :
  (pi unrestricted function : (family CoreTerm) .
    (pi unrestricted argument : (family CoreTerm) . (family CoreTerm))) =
  (lambda unrestricted function : (family CoreTerm) .
    (lambda unrestricted argument : (family CoreTerm) .
      (eliminate
        CoreFunctionInspection
        (lambda unrestricted inspection : (family CoreFunctionInspection) . (family CoreTerm))
        (inspectCoreFunction function)
        (branch CoreFunctionLambda body . (substituteCoreTop argument body))
        (branch CoreFunctionPrimitive primitive . (reduceDirectCorePrimitive primitive argument))
        (branch
          CoreFunctionAppliedPrimitive
          primitive
          left
          .
          (reduceAppliedCorePrimitive primitive left argument))
        (branch
          CoreFunctionAppliedPrimitive2
          primitive
          first
          second
          .
          (corePrimitiveApplication3 primitive first second argument))
        (branch
          CoreFunctionAppliedPrimitive3
          primitive
          first
          second
          third
          .
          (reduceAppliedCoreEliminator primitive first second third argument))
        (branch CoreFunctionOther . (constructor CoreTerm CoreApplication function argument)))))

def betaReduceOne : (pi unrestricted term : (family CoreTerm) . (family CoreTerm)) =
  (lambda unrestricted term : (family CoreTerm) .
    (eliminate
      CoreTerm
      (lambda unrestricted value : (family CoreTerm) . (family CoreTerm))
      term
      (branch CoreUniverse level . (constructor CoreTerm CoreUniverse level))
      (branch CoreNatural . (constructor CoreTerm CoreNatural))
      (branch CoreNaturalLiteral value . (constructor CoreTerm CoreNaturalLiteral value))
      (branch CoreBound index . (constructor CoreTerm CoreBound index))
      (branch
        CorePi
        multiplicity
        domain
        codomain
        ih_domain
        ih_codomain
        .
        (constructor CoreTerm CorePi multiplicity ih_domain ih_codomain))
      (branch
        CoreLambda
        multiplicity
        domain
        body
        ih_domain
        ih_body
        .
        (constructor CoreTerm CoreLambda multiplicity ih_domain ih_body))
      (branch
        CoreLet
        multiplicity
        annotation
        value
        body
        ih_annotation
        ih_value
        ih_body
        .
        (substituteCoreTop ih_value ih_body))
      (branch
        CoreApplication
        function
        argument
        ih_function
        ih_argument
        .
        (reduceCoreApplication ih_function ih_argument))
      (branch
        CoreNaturalArithmetic
        operation
        function
        argument
        ih_function
        ih_argument
        .
        (reduceCoreArithmetic operation ih_function ih_argument))
      (branch
        CoreNaturalSuccessor
        predecessor
        ih_predecessor
        .
        (reduceCoreNaturalSuccessor ih_predecessor))
      (branch CoreByte . (constructor CoreTerm CoreByte))
      (branch CoreByteLiteral value . (constructor CoreTerm CoreByteLiteral value))
      (branch CoreBytes . (constructor CoreTerm CoreBytes))
      (branch CoreBytesLiteral value . (constructor CoreTerm CoreBytesLiteral value))
      (branch CorePrimitiveTerm primitive . (constructor CoreTerm CorePrimitiveTerm primitive))
      (branch CoreTermSequenceEnd . (constructor CoreTerm CoreTermSequenceEnd))
      (branch
        CoreTermSequenceNext
        head
        tail
        ih_head
        ih_tail
        .
        (constructor CoreTerm CoreTermSequenceNext ih_head ih_tail))
      (branch
        CoreFamilyApplication
        familyName
        arguments
        ih_arguments
        .
        (constructor CoreTerm CoreFamilyApplication familyName ih_arguments))
      (branch
        CoreConstructorApplication
        familyName
        constructorName
        arguments
        ih_arguments
        .
        (constructor CoreTerm CoreConstructorApplication familyName constructorName ih_arguments))
      (branch
        CoreEliminatorBranch
        constructorName
        binderCount
        body
        ih_body
        .
        (constructor CoreTerm CoreEliminatorBranch constructorName binderCount ih_body))
      (branch
        CoreEliminator
        familyName
        motive
        scrutinee
        branches
        ih_motive
        ih_scrutinee
        ih_branches
        .
        (reduceCoreGenericEliminator familyName ih_motive ih_scrutinee ih_branches))))

def betaNormalizeWithWorkBudget =
  (workNormalizeCoreWithLimit (succ zero))

def betaNormalizeCheckedWithFuel =
  (lambda unrestricted rounds : Nat .
    (betaNormalizeWithWorkBudget rounds coreNormalizationDefaultWork))

-- Compatibility projection: this historical API returns the residual on
-- exhaustion. New admission paths must consume CoreReductionResult instead.
def betaNormalizeWithFuel =
  (lambda unrestricted fuel : Nat .
    (lambda unrestricted term : (family CoreTerm) .
      (eliminate
        CoreReductionResult
        (lambda unrestricted result : (family CoreReductionResult) . (family CoreTerm))
        (betaNormalizeCheckedWithFuel fuel term)
        (branch CoreReductionCompleted normal rounds . normal)
        (branch CoreReductionExhausted residual rounds . residual))))

The compiler supplied declaration spans and resolved links from this source snapshot. This page does not assert that this file belongs to a checked closure.