nadia-polikarpova / synquid Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
Changing a line in the "list replicate" example on the ComCom website from:
replicate :: n: Nat -> x: a -> {List a | len _v == n}
to:
replicate :: x: a -> {List a | len _v == 4}
we see the following error:
/var/www/comcom/tmp/Synquid/0719913783814785/Synquid.sq:29: Error:
Cannot match shape 'Bool'
with shape '_'
when checking neq :: X1:_ -> X0:_ -> _
in
\x .
match neq ?? ?? with
If you instead use:
replicate :: x: a -> {List a | len _v == 3}
the following result is produced:
replicate = \x . Cons x (Cons x (Cons x Nil))
From my trivial investigation it appears that the simplifyContraint'
function does not contain a case for one of the types being an LetT _ _ AnyT
which I presume would constitute an empty constraint. This is me just guessing because it looks like simplifyContraint'
already handles the AnyT
case and that is the only RType whose pretty-printed shape could match "_" while also not being AnyT
.
Setting up Synquid environment is painful and time consuming.
So, I made a docker image for those who have troubling compile Synquid from source code. Feel free to use it.
https://hub.docker.com/repository/docker/yinengy/synquid
Usage:
docker run --name synquid -it yinengy/synquid
synquid <your_program_filename>
I asked Synquid (via 'try online') a question that is a variation on the replicate problem, given below. I got this error (truncated for brevity):
/var/www/comcom/tmp/Synquid/9586857029030353/Synquid.sq:29: Error:
Cannot match shape 'List (A4)'
with shape 'Int'
when checking...
The way I read this error is as if synquid is synthesizing something that is not type correct, and then fail because of it. Therefore I believe this would be a bug in synquid. I'm not sure whether synquid should be able to give me sufficiently strong refinements for this particular input, but I do expect synquid's output to be either a solution or a more reasonable error message.
Not sure if and how you would like to see bugs like these reported, let me know or just take your liberties in editing this issue. Thanks for the amazing work in building Synquid!
-- Type synonym for natural numbers (_v denotes the "value variable")
type Nat = {Int | _v >= 0}
-- List data type: just like in Haskell
data List a where
Nil :: List a
Cons :: x: a -> xs: List a -> List a
-- Measures define recursive properties of datatypes, which we can mention in refinements;
-- this measure is also marked as a termination metric for recursive calls
termination measure len :: List a -> {Int | _v >= 0} where
Nil -> 0
Cons x xs -> 1 + len xs
-- Synquid composes programs from component functions;
-- here are some standard integer components we might need
one :: {Int | _v == 1}
minus :: x: Int -> {Int | _v == (0 - x)}
plus :: x: Int -> y: Int -> {Int | _v == x + y}
leq :: x: Int -> y: Int -> {Bool | _v == (x <= y)}
-- Our synthesis goal: a function that returns 'n' copies of 'x'
replicate :: n: Nat -> x: a -> {List a | len _v == n}
replicate = ??
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.