Comments (3)
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.
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.
@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)
- Regarding reverse in Ch 8: Sets HOT 2
- How to workaround using Stack for building html HOT 7
- apparent typo in tutorial under "Testing Values: Booleans and Propositions"
- Can't even get started because of build issues HOT 5
- there is an extra ")" at the end of this line
- Numbering the exercises HOT 1
- Question about Chapter 5.3: delmin HOT 2
- Links to subsections don't work for me HOT 2
- Syntax of refinement types HOT 4
- Chapter 8 exercise "reverse" HOT 8
- Instructions for running LiquidHaskell HOT 2
- Figures 1.4 and 1.5 in Chapter 12
- Chapter 12 Exercise InsertRight HOT 4
- Current HEAD of main fails to build HOT 4
- Liquid Type Mismatch on Initial Build HOT 2
- Passing -fdefer-type-errors to GHC causes confusing errors from LH HOT 3
- Text description of "null" in Chapter 6 is reversed HOT 1
- Link is no longer available HOT 1
- Trouble with Chapter 11 HOT 3
- About Lemmas and other questions HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from liquidhaskell-tutorial.