Comments (2)
Thanks for the report!
This is an issue with metafunctions and reduction relations as well, it turns out. After talking over a few approaches with @rfindler, we're thinking this should be a syntax error to the effect that appropriate length constraints should be added to the ellipses in the conclusion. (As opposed to automatically imposing the constraints on the match.)
Here's a minimized example:
(define-language L0)
(define-judgment-form L0
#:mode (J I I)
[(J number_1 number_2) ...
----------------------------------
(J (number_1 ...) (number_2 ...))]
[----------------------
(J number_1 number_2)])
(judgment-holds (J (1 2) (3)))
Implementation notes:
The error is coming from inside term, when it tries to assemble ellipses with different lengths. The relevant bindings are created with bind-pattern-names, using the names/ellipses results from rewrite-side-conditions/check-errs. It seems like the best way to cope with this is to check for ellipsis variables that are guaranteed to have the same length in rewrite-side-conditions, preserve that information, and pass it in as an extra argument to term-let/error-name, which can add some appropriate expansion-phase bindings. Term can then check that two variables under the same ellipsis have the appropriate constraints, and raise an error if they're not there.
from redex.
That sounds like an excellent way of fixing this.
from redex.
Related Issues (20)
- Feature request: tag-with-names for apply-reduction-relation* HOT 2
- test-->>∃ #:steps n passes test if n > than the number of actual reduction steps for a term. HOT 4
- `traces` doesn't draw arrows after "fix layout" HOT 5
- `stepper` doesn't display whole term... unless I *narrow* its box?
- Feature Request: `stepper` with judgment-form use rule names
- Feature request: adjust font for `stepper` HOT 3
- Redex rejects literals at different ellipsis depths in binding form declarations HOT 1
- Generating random expressions sometimes results in an infinite loop
- where/error failures give no information about source of error HOT 6
- where/error failures don't tell you what failed to match
- using judgment-holds within define-relation HOT 1
- Redex's reduction graph windows sneakily hide part of term reductions HOT 1
- where/error doesn't report errors sometimes HOT 8
- define-metafunction does not check type signature on LHS HOT 3
- Docs missing a word I can't fill in. HOT 1
- `derivation/ps` always causes an error by calling a non-existent method HOT 1
- Default rendering font changed between Racket v8.8 and v8.9? HOT 4
- Redex PDF output contains a wrong font, while Racket REPL renders the correct font HOT 2
- Reduce space between rendered rules of a judgement form HOT 3
- `traces/ps` doesn't render arrows 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 redex.