Constraint Solver and Program Theory¶
QVR_PROGRAM_PROTOCOL is the panproto protocol over which QVR programs
are schemas. extract_program_schema walks a compiled environment and
emits a panproto Schema.
program_theory
¶
Program Theory: a panproto protocol for the resolved (post-compilation) DSL.
The QVR_PROGRAM_PROTOCOL protocol describes the static structure of
a compiled .qvr program as a panproto panproto.Schema: every object,
space, morphism, and output the program declares, together with the
checked computation and effect graph the QIEC elaboration produced for
it. This sits one layer above the syntactic qvr protocol compiled
from the in-tree QVR grammar: the syntactic protocol carries the AST as
parsed, while this protocol carries the AST after the resolution layer
(_resolve_type, _resolve_space) and the kernel check have run.
Why have it
Once two programs share this protocol, panproto's structural diff,
auto-lens-generation, and breaking-change detection apply to compiled
programs as a whole. Two .qvr files that compile to structurally
equivalent programs produce equal Schemas; two that diverge surface
their divergence through panproto.diff_schemas.
Vertex kinds
Top-level container:
program
the root vertex; one per compiled module.
Discrete objects (mirrors quivers.core.objects):
finset product_set coproduct_set free_monoid empty_set
Continuous spaces (mirrors quivers.continuous.spaces):
euclidean simplex positive_reals product_space
Top-level declarations:
object_decl space_decl morphism_decl
kernel_decl discretize_decl embed_decl output_decl
Kernel declarations (mirrors quivers.qiec.module):
effect_decl operation instance_decl handler_decl
handler_clause computation_decl computation_parameter
program_entry program_parameter program_site
Edge kinds
decl
program -> *_decl: each declaration, source or kernel, is a child
of the root program.
binds_to
object_decl -> set_object / space_decl -> space.
component
product_set | coproduct_set -> set_object;
product_space -> space: structural recursion into composite types.
domain / codomain
morphism_decl | kernel_decl | discretize_decl | embed_decl ->
set_object | space.
output
program -> output_decl.
operation
effect_decl -> operation; handler_clause -> operation: the
operations an interface declares and the one a clause answers.
instance_of
instance_decl -> effect_decl: the interface an instance applies.
handles
handler_decl -> effect_decl.
clause
handler_decl -> handler_clause.
parameter
computation_decl -> computation_parameter;
program_entry -> program_parameter.
row
computation_decl -> instance_decl: the instances a computation's
declared row names.
calls
computation_decl | handler_clause -> computation_decl: the
computations a body calls.
performs
computation_decl | handler_clause -> instance_decl: the instances
a body performs requests on.
installs
computation_decl | handler_clause -> handler_decl: the handlers a
body installs.
entry
program -> program_entry.
body
program_entry -> computation_decl.
site
program_entry -> program_site.
random / score
program_entry -> instance_decl: the lexical instances the entry's
samples and scores address.
Constraint sorts carry the per-vertex scalar metadata: name,
cardinality, dim, low, high, family, modality,
morphism_kind, replicate, n_bins, and for kernel vertices
identity, type, effects, role, site_kind, grade,
implementation, total, batch, event, and gap.
QVR_PROGRAM_PROTOCOL
module-attribute
¶
QVR_PROGRAM_PROTOCOL: Protocol = panproto.define_protocol({'name': 'qvr_program', 'schema_theory': 'ThBratSchema', 'instance_theory': 'ThBratInstance', 'edge_rules': _EDGE_RULES, 'obj_kinds': _OBJECT_KINDS, 'constraint_sorts': _CONSTRAINT_SORTS})
Panproto protocol for a compiled QVR program.
extract_program_schema writes schemas in this protocol. The vertex
kinds, edge rules, and constraint sorts are the ones the module
docstring lists.
QVR_DEDUCTION_PROTOCOL
module-attribute
¶
QVR_DEDUCTION_PROTOCOL: Protocol = panproto.define_protocol({'name': 'qvr_deduction', 'schema_theory': 'ThBratSchema', 'instance_theory': 'ThBratInstance', 'edge_rules': _DEDUCTION_EDGE_RULES, 'obj_kinds': _DEDUCTION_OBJECT_KINDS, 'constraint_sorts': _DEDUCTION_CONSTRAINT_SORTS})
Panproto protocol for a weighted deductive system.
Vertex kinds:
* deduction_system: the top-level declaration.
* deduction_atom: an atom of the item algebra.
* deduction_rule: a named sequent-style inference rule.
* deduction_premise: one premise pattern of a rule.
* deduction_conclusion: a rule's conclusion pattern.
Edges:
* decl: system :math:\to rule.
* atom: system :math:\to atom.
* premise: rule :math:\to premise.
* conclusion: rule :math:\to conclusion.
Constraint sorts carry the system's semiring, start, depth, and
each pattern's textual form. Schema morphisms over this protocol
correspond to specializations of deduction systems
(e.g., :math:\mathsf{CCG} \subset \mathsf{Lambek} \subset \mathsf{MultimodalLambek}).
extract_program_schema
¶
extract_program_schema(compiler: Compiler) -> Schema
Produce a panproto.Schema for a compiled program.
Walks the compiler's resolved environment (objects, spaces, morphisms)
and its checked kernel module (effects, instances, handlers,
computations, and program entry points) and emits a graph of
vertices and edges in the QVR_PROGRAM_PROTOCOL protocol. The
returned schema validates against that protocol and is suitable for
panproto.diff_schemas, panproto.auto_generate_lens, and the rest
of panproto's schema-level operations.
| PARAMETER | DESCRIPTION |
|---|---|
compiler
|
A
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Schema
|
A program-level Schema in the |
Source code in src/quivers/dsl/program_theory.py
872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 | |
extract_deduction_schema
¶
extract_deduction_schema(compiler: Compiler) -> Schema
Produce a panproto.Schema for the compiler's
deduction-system environment.
Walks the compiler's _deductions registry and emits one
panproto vertex per deduction system, one per rule, one per
atom, and per-premise / per-conclusion pattern vertices. The
returned schema validates against
QVR_DEDUCTION_PROTOCOL and is suitable for
panproto.diff_schemas and
panproto.auto_generate_lens operations over deduction
systems.
| PARAMETER | DESCRIPTION |
|---|---|
compiler
|
A compiler whose
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Schema
|
A schema in the |