Comments (6)
cc @Garogolun -- you had expressed interest in this
from chalk.
My hope was that we could model this without touching the core solver. Roughly speaking my idea was to build on the notion of external types/traits that @lqd added in #86.
Let's posit that we have a External(Type)
predicate that is true if the given type is external, and that we have a special OpenWorld
domain goal (along with the existing, special CannotProve
domain goal).
Then, during lowering, for each external trait like Iterator
, maybe we define a program clause like this one:
forall<T> {
Implemented(T: Iterator) :-
OpenWorld,
External(T),
CannotProve
}
Now if we go to prove String: Iterator
, we will neither fail nor succeed, but get back an ambiguos result (same with Not { String: Iterator }
).
from chalk.
@Garogolun plans to hack on this!
from chalk.
cc @Garogolun -- I haven't heard from you, I think @sunjay is going to take a few steps here though.
from chalk.
OK, so. @sunjay, in terms of background reading, I would recommend RFC 1023, which covers the basic idea and rationale here.
It appears that we have already a field external
that marks structs or traits:
We need to add a new kind of goal (actually, maybe two) that is like IsLocal(Ty)
and IsLocal(TraitRef)
. Presumably that means adding variants to DomainGoal
:
And then we need to add some rules into lowering for proving
For some struct S that is not marked as external, we would have:
forall<T> { IsLocal(S<T>). }
(Actually, we need a #[fundamental]
tag too, but let's ignore that for now.)
For some trait ref like T: Trait
, if the trait is not external, then there is a rule:
forall<T> {
IsLocal(T: Trait)
}
If the trait is marked external, then it is local only if the types are local:
forall<T> {
IsLocal(T: Trait) :- IsLocal(T)
}
We'll have to play with these rules, I haven't captured the full subtleties, but it's a start. =)
from chalk.
@nikomatsakis I think this is completely done now. π π
from chalk.
Related Issues (20)
- CI Publish job using Mac runner HOT 2
- When Rust 1.55 hits stable, replace `ControlFlow` with std version
- Recursive solver reports ambiguity HOT 7
- Idea: rework how SLG solver uses the environment
- Auto traits are not handled for generic closures HOT 8
- Consider removing unused field
- Clean up coherence chapter in the Chalk book HOT 1
- Ambiguity through unrelated env clauses because of implied bounds HOT 1
- reconcile SLG/recursive solver's attempts to merge multiple results
- book: hard to read mermaid diagram in dark themes
- Lowered command panics with auto trait HOT 1
- Recursive solver hangs on cyclic traits HOT 3
- mdbook-mermaid needs updating
- Unable to deduce projection types of dyn types from supertrait bounds
- ICE: negative subgoal had delayed_subgoals HOT 2
- any progress and roadmapοΌ HOT 1
- Automatic releases have been failing for a couple of months
- Branch protection prevents automatic releases from updating the version number on the `master` branch
- Recursive Solver fails to solve recursive associated type with GAT
- Fails to solve some existential clause 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 chalk.