Native certificates for RAM primitives #
A NativeCertificate records arbitrary input-dependent time and space bounds, including the
encoded output size, for an actual finite native multi-tape machine. Model.NativePrimitives
collects these certificates for the scalar obligations of a RAM model. Configuration and all
operands are encoded runtime inputs; a single machine handles all of them for each fixed symbol.
Constants may depend on the symbol, and hence on a fixed finite source program. Symbols themselves
are not encoded inputs: this is not a uniform interpreter for arbitrary programs.
The semantic Model remains independent of finite encodings. In particular, this interface does
not require an exact real RAM to admit a bit representation. It also supplies neither a memory
representation nor a whole-machine simulation. Loads/stores still require charged lookup/update;
control, initialization and output require their own certificates. Deriving an input-only bound
from a configuration-and-input bound additionally requires charged, computable configuration
selection and an input-fit guarantee, rather than instance-dependent width advice.
Main definitions #
NativeCertificate: native implementation with arbitrary resource bounds.Model.Encoding: selectable encodings of values, addresses and configuration.Model.checkedConstant,Model.checkedOp: include the result admissibility check.Model.NativePrimitives,Model.NativePrimitives.IsPolynomial: scalar obligations, including move and control-label validation, and their polynomiality predicate.
Main results #
NativeCertificate.nonempty_iff_isComputable: arbitrary-bound certificates exist exactly for native computable functions.NativeCertificate.isComputable: forget the resource bounds.NativeCertificate.polyTime: obtain polynomial time under separate polynomial bounds.NativeCertificate.comp: compose certificates with input-dependent resource accounting.
References #
An actual native implementation, with bounds also charging its encoded output length.
- time : α → ℕ
Input-dependent time bound, up to a constant factor and additive constant.
- space : α → ℕ
Input-dependent work space and encoded output bound, up to constants.
- computes : Turing.MultiTapeTM.ComputableTidilyInO f encIn encOut self.time self.space
One finite machine implements the function on every encoded input.
Instances For
Forgetting resource bounds retains native computability.
Derive the existing native polynomial-time predicate, for use by its compositional calculus.
Compose implementations, charging the second bound at the first result.
Instances For
Composing polynomial certificates preserves polynomiality in the original input encoding.
Package exact native bounds, including the running time in the space allowance to charge encoded output length. No polynomial hypothesis is needed.
Instances For
Every native polynomial-time proof supplies a certificate with polynomial bounds. The space bound includes the running time so that it also bounds the emitted output.
Select resource bounds from an existing polynomial-time implementation proof.
Instances For
Bounds selected by ofPolyTime are polynomial in the encoded input length.
Finite bit representations are separate from the semantic model. Configuration encoding is chosen explicitly; in particular, unary and binary widths have different resource costs.
Encoding of register and memory values.
Encoding of memory addresses.
Encoding of runtime model parameters, including any word width.
Instances For
A fixed operation's result, including the admissibility check performed by Data.put.
A native implementation can reject overflow without materializing the unchecked result.
Instances For
An ALU instruction stores exactly the checked operation result, preserving faults.
Scalar certificates needed by a fixed-program RAM simulation. Memory lookup/update and finite-program dispatch are additional obligations. There is no uniform symbol dispatcher here.
- constant (c : M.Const) : NativeCertificate (M.checkedConstant c) enc.config (Turing.MultiTapeTM.encOption enc.value)
Literal symbols are fixed; configuration varies over every encoded input.
- operation (op : M.operations.Op) : NativeCertificate (M.checkedOp op) (Turing.MultiTapeTM.encPair enc.config (Turing.MultiTapeTM.encPi enc.value)) (Turing.MultiTapeTM.encOption enc.value)
Operation symbols are fixed; configuration and all operands are runtime inputs.
- test (t : M.tests.Op) : NativeCertificate (fun (p : M.Config × (Fin (M.tests.Arity t) → M.Value)) => M.evalTest p.1 t p.2) (Turing.MultiTapeTM.encPair enc.config (Turing.MultiTapeTM.encPi enc.value)) (Turing.MultiTapeTM.encOption Turing.MultiTapeTM.encBool)
Tests preserve the distinction between fault, false and true.
- address : NativeCertificate (fun (p : M.Config × M.Value) => M.address p.1 p.2) (Turing.MultiTapeTM.encPair enc.config enc.value) (Turing.MultiTapeTM.encOption enc.address)
Address extraction can fault independently of move validation.
- validMove : NativeCertificate (fun (p : M.Config × M.Value) => M.validMove p.1 p.2) (Turing.MultiTapeTM.encPair enc.config enc.value) Turing.MultiTapeTM.encBool
Copy/load/store/halt validate existing values through this predicate.
- validPC : NativeCertificate (fun (p : M.Config × ℕ) => M.validPC p.1 p.2) (Turing.MultiTapeTM.encPair enc.config Turing.MultiTapeTM.encNat) Turing.MultiTapeTM.encBool
Current and continuing control labels both require validation.
Instances For
All six primitive certificates in a bundle have polynomial time and space bounds.
- constant (c : M.Const) : (N.constant c).IsPolynomial
Every literal symbol's certificate has polynomial time and space bounds.
- operation (op : M.operations.Op) : (N.operation op).IsPolynomial
Every ALU operation symbol's certificate has polynomial time and space bounds.
- test (t : M.tests.Op) : (N.test t).IsPolynomial
Every test symbol's certificate has polynomial time and space bounds.
- address : N.address.IsPolynomial
The address extraction certificate has polynomial time and space bounds.
- validMove : N.validMove.IsPolynomial
The move validation certificate has polynomial time and space bounds.
- validPC : N.validPC.IsPolynomial
The control-label validation certificate has polynomial time and space bounds.