#+TITLE: Sol Examples * Running From the repository root, with Nix: #+BEGIN_SRC sh nix develop -c dune exec sol -- examples/family.sol #+END_SRC Or enter the shell once and run them all: #+BEGIN_SRC sh nix develop dune build for f in examples/*.sol; do echo "== $f"; dune exec sol -- "$f"; done #+END_SRC Without a file argument, =dune exec sol= starts a REPL: declarations accumulate, =Query expression: ...= runs immediately, one statement per line. * The files - =family.sol= :: relations, facts, a rule, joins through shared variables, decidable denial with =:not=, and the =World= scoped negation form. - =arithmetic.sol= :: =Plus= and =Times= evaluating forward and solving backward through the rationals; minimal shape, where =1/2 + 1/2= is the integer =1=. - =recursion.sol= :: structural recursion admitted by the decrease checker extracted from Rocq, and Even/Odd mutual recursion under a lexicographic measure. - =constraints.sol= :: membership is not generation: residuation, interval propagation, finite ranges enumerating, contradictions answering no, and explicit bounded generation with =Between=. - =quantifiers.sol= :: universals over infinite domains proven or refuted symbolically, including the specification's own true and false examples and the =Plus= identity; finite quantifiers simply run. - =integrity.sol= :: schemas as membership: primitive domains, a refinement, and a foreign key as a criterion. The comments at the bottom show facts that make admission reject the whole program; uncomment one and run again to see it happen. * Reading the answers Each query prints one line per answer: variable bindings in Sol notation, =yes.= for a closed query that holds, =no.= for one that does not. An answer conditioned on open membership prints its residual constraints after the bindings, as the propositions they are.