Comments (3)
After discussing with @msooseth we came up with a more restricted case checking algorithm that should be decidable and very fast (even cases with 1000's of variables should be checkable in under a second).
The restrictions on the form of expressions that are allowable in a case would be:
- We allow arbitrary combinations of arbitrary expressions connected with or, and and negation
- The variables in a given expression in the case tree may only be used in that expression or it's negation. So if
f(x,y,z)
is an expression (e.g.x**2+y < z
), thenx
,y
, andz
cannot be used anywhere else, except in the same form (i.e.x**2+y < z
), or its negation (i.ex**2+y >= z
).
This restriction works becase it allows us to abstract the expressions into a pure sat problem, and ensures that there are no connections between the variables in different expressions that would force abstraction refinement.
In order to implement this, we need to:
- Introduce a typechecking stage that ensures the expressions in the case tree match the above restrictions
- Introduce an SAT based consistency checking pass that actually checks that the expressions are all distinct and total
from act.
The consistency checking routine remains as described in the first comment, the restrictions simply ensure that it can always be easily solved.
from act.
Completed with #157.
from act.
Related Issues (20)
- SMT: Detect Collisions in Mapping Assignments
- Rounding Error Analysis HOT 1
- hevm: unexpected counterexample HOT 2
- hevm: handle contracts with boolean mappings HOT 1
- Choose one style of accessing records
- Move `Time t` from `TEntry` to `TStorageItem`
- cff backend
- Syntax: change rewrite arrow to `<-`
- Typechecker: two behaviours with the same name should be rejected HOT 1
- Typechecker: bad error message when referencing an undeclared storage var HOT 1
- Support building outside of nix
- act hevm fails to prove Pass claim when Payable keyword is missing HOT 3
- Solver timeout when attempting to prove mint(Pass) HOT 4
- Structured Interface Definitions In JSON Output
- ActBook: Hevm section seems outdated HOT 2
- Automatically generate getter specs
- Unify the approach of integer bounds assertions
- Unexpcted type checking error HOT 1
- Failure to build Act executable HOT 1
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 act.