GithubHelp home page GithubHelp logo

Comments (3)

ranjitjhala avatar ranjitjhala commented on July 3, 2024

Hi @hafizhmakmur,

Excellent question! (I should add this example or similar to the tutorial!)
The crux of the matter is: what is the information produced by the respective terms:

null elts

and

length elts == 0

The LH "prelude" defines specifications for some functions, it says that the type of:

length :: xs:[a] -> {v:Int | 0 <= v && v = len xs}

so the guard tells LH that in that case len elts == 0

BUT the specification for null is not present in the prelude, because, we didn't add it, so LH uses the "default" unrefined specification which is:

null :: [a] -> Bool

so the information in the guard is just True (which is not enough information to validate the "sanitization" at the refinement-level.)

However there is nothing special about null -- we left it out just because there are lots of functions and we only have partial coverage. You can, either write your own specification as:

assume null :: xs:[a] -> {b:Bool | b <=> (len xs == 0)}

If you want to use the null from the Prelude OR you can write your own null e.g.

{-@ null :: xs:[a] -> {b:Bool | b <=> (len xs == 0) } @-}
null :: [a] -> Bool
null [] = True
null (_:_) = False

and if you do either of the above, then your version of testList with null should also be verified by LH.

Does that make sense?

from liquidhaskell-tutorial.

ranjitjhala avatar ranjitjhala commented on July 3, 2024

Btw, the reason it says "cannot build measure from haskell function" is you can only define measure for code that you write yourself, not that which was defined outside in an imported module (because LH doesn't even have access to that code.)

from liquidhaskell-tutorial.

hafizhmakmur avatar hafizhmakmur commented on July 3, 2024

@ranjitjhala Thank you very much! Looks like I miss the assume function and it looks like it's exactly what I need! Is there any comprehensive list of functions that are already defined by default in Liquid Haskell. I think it'd really be helping to have it :D .

from liquidhaskell-tutorial.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.