Skip to content

Commit ae38718

Browse files
committed
Revert parts of "add comments"
I didn't mean to push these changes. This reverts commit 75ae1aa.
1 parent 75ae1aa commit ae38718

File tree

9 files changed

+37
-44
lines changed

9 files changed

+37
-44
lines changed

crates/formality-check/src/coherence.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ impl Check<'_> {
4646
let a = env.instantiate_universally(&impl_a.binder);
4747
let trait_ref = a.trait_ref();
4848

49-
self.prove_is_local_trait_ref(&env.with_coherence_mode(true), &a.where_clauses, trait_ref)
49+
self.prove_goal(
50+
&env.with_coherence_mode(true),
51+
&a.where_clauses,
52+
trait_ref.is_local(),
53+
)
5054
}
5155

5256
#[tracing::instrument(level = "Debug", skip(self))]

crates/formality-check/src/lib.rs

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ use formality_rust::{
88
grammar::{Crate, CrateItem, Program},
99
prove::ToWcs,
1010
};
11-
use formality_types::{
12-
cast::Upcast,
13-
grammar::{Fallible, Substitution, TraitRef, Wcs},
14-
};
11+
use formality_types::grammar::{Fallible, Substitution, Wcs};
1512

1613
/// Check all crates in the program. The crates must be in dependency order
1714
/// such that any prefix of the crates is a complete program.
@@ -101,27 +98,7 @@ impl Check<'_> {
10198
return Ok(());
10299
}
103100

104-
bail!("failed to prove {goal:?} given {assumptions:?}; got {cs:?}")
105-
}
106-
107-
fn prove_is_local_trait_ref(
108-
&self,
109-
env: &Env,
110-
assumptions: impl ToWcs,
111-
goal: impl Upcast<TraitRef>,
112-
) -> Fallible<()> {
113-
let goal: TraitRef = goal.upcast();
114-
let assumptions: Wcs = assumptions.to_wcs();
115-
116-
assert!(env.only_universal_variables());
117-
assert!(env.encloses((&assumptions, &goal)));
118-
119-
let cs = formality_prove::prove_is_local_trait_ref(self.decls, env, &assumptions, &goal);
120-
if cs.iter().any(|c| c.unconditionally_true()) {
121-
return Ok(());
122-
}
123-
124-
bail!("failed to prove {goal:?} is local, given {assumptions:?}; got {cs:?}")
101+
bail!("failed to prove {goal:?} given {assumptions:?}, got {cs:?}")
125102
}
126103

127104
fn prove_not_goal(&self, env: &Env, assumptions: impl ToWcs, goal: impl ToWcs) -> Fallible<()> {

crates/formality-prove/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ mod prove;
66

77
pub use decls::*;
88
pub use prove::prove;
9-
pub use prove::prove_is_local_trait_ref;
109
pub use prove::Env;
1110

1211
#[cfg(test)]

crates/formality-prove/src/prove.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
mod combinators;
21
mod constraints;
32
mod env;
43
mod is_local;
@@ -9,6 +8,7 @@ mod prove_normalize;
98
mod prove_via;
109
mod prove_wc;
1110
mod prove_wc_list;
11+
mod combinators;
1212

1313
pub use constraints::Constraints;
1414
use formality_types::{cast::Upcast, collections::Set, grammar::Wcs, set, visit::Visit};
@@ -19,8 +19,6 @@ use crate::decls::Decls;
1919
pub use self::env::Env;
2020
use self::prove_wc_list::prove_wc_list;
2121

22-
pub use is_local::prove_is_local_trait_ref;
23-
2422
/// Top-level entry point for proving things; other rules recurse to this one.
2523
pub fn prove(
2624
decls: impl Upcast<Decls>,

crates/formality-prove/src/prove/is_local.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ use crate::{
4242
pub fn may_be_remote(decls: Decls, env: Env, assumptions: Wcs, goal: TraitRef) -> Set<Constraints> {
4343
assert!(env.is_in_coherence_mode());
4444

45-
let c = prove_is_local_trait_ref(decls, &env, assumptions, goal);
45+
let c = is_local_trait_ref(decls, &env, assumptions, goal);
4646

4747
if c.is_empty() {
4848
// Cannot possibly be local, so always remote.
@@ -59,7 +59,7 @@ pub fn may_be_remote(decls: Decls, env: Env, assumptions: Wcs, goal: TraitRef) -
5959
}
6060

6161
judgment_fn! {
62-
pub fn prove_is_local_trait_ref(
62+
pub fn is_local_trait_ref(
6363
decls: Decls,
6464
env: Env,
6565
assumptions: Wcs,
@@ -70,7 +70,7 @@ judgment_fn! {
7070
(
7171
(if decls.is_local_trait_id(&goal.trait_id))
7272
--- ("local trait")
73-
(prove_is_local_trait_ref(decls, env, _assumptions, goal) => Constraints::none(env))
73+
(is_local_trait_ref(decls, env, _assumptions, goal) => Constraints::none(env))
7474
)
7575

7676
(
@@ -80,7 +80,7 @@ judgment_fn! {
8080
(let goal = c1.substitution().apply(&goal))
8181
(for_all(&decls, &env, &assumptions, &goal.parameters[..i], &not_downstream) => c2)
8282
--- ("local parameter")
83-
(prove_is_local_trait_ref(decls, env, assumptions, goal) => c1.seq(c2))
83+
(is_local_trait_ref(decls, env, assumptions, goal) => c1.seq(c2))
8484
)
8585
}
8686
}

crates/formality-prove/src/prove/prove_wc.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ use formality_types::{
66
use crate::{
77
decls::Decls,
88
prove::{
9-
env::Env, is_local::may_be_remote, prove, prove_after::prove_after, prove_eq::prove_eq,
9+
env::Env,
10+
is_local::{is_local_trait_ref, may_be_remote},
11+
prove,
12+
prove_after::prove_after,
13+
prove_eq::prove_eq,
1014
prove_via::prove_via,
1115
},
1216
};
@@ -96,5 +100,11 @@ judgment_fn! {
96100
----------------------------- ("trait well formed")
97101
(prove_wc(decls, env, assumptions, Predicate::WellFormedTraitRef(trait_ref)) => c)
98102
)
103+
104+
(
105+
(is_local_trait_ref(decls, env, assumptions, trait_ref) => c)
106+
----------------------------- ("trait ref is local")
107+
(prove_wc(decls, env, assumptions, Predicate::IsLocal(trait_ref)) => c)
108+
)
99109
}
100110
}

crates/formality-prove/src/test.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ use std::sync::Arc;
33
use formality_macros::term;
44
use formality_types::{
55
collections::Set,
6-
grammar::{Binder, TraitRef, Wcs},
6+
grammar::{Binder, Wcs},
77
};
88

99
use crate::{
1010
decls::Decls,
1111
prove::{prove, Constraints, Env},
12-
prove_is_local_trait_ref,
1312
};
1413

1514
mod eq_assumptions;
@@ -32,8 +31,6 @@ enum TestAssertion {
3231
Exists(Binder<Arc<TestAssertion>>),
3332
#[grammar($v0 => $v1)]
3433
Prove(Wcs, Wcs),
35-
#[grammar($v0 => @IsLocal($v1))]
36-
IsLocal(Wcs, TraitRef),
3734
}
3835

3936
/// `t` represents some set of existential bindings combined with (assumptions, goals).
@@ -63,10 +60,6 @@ fn test_prove(decls: Decls, mut assertion: Arc<TestAssertion>) -> Set<Constraint
6360
return prove(decls, env, assumptions, goals);
6461
}
6562

66-
TestAssertion::IsLocal(assumptions, goal) => {
67-
return prove_is_local_trait_ref(decls, env, assumptions, goal);
68-
}
69-
7063
TestAssertion::CoherenceMode(assertion1) => {
7164
env = env.with_coherence_mode(true);
7265
assertion = assertion1.clone();

crates/formality-types/src/grammar/formulas.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ pub enum Predicate {
2424

2525
#[grammar(@WellFormedTraitRef($v0))]
2626
WellFormedTraitRef(TraitRef),
27+
28+
#[grammar(@IsLocal($v0))]
29+
IsLocal(TraitRef),
2730
}
2831

2932
/// A coinductive predicate is one that can be proven via a cycle.
@@ -75,6 +78,7 @@ pub enum Skeleton {
7578
NotImplemented(TraitId),
7679
WellFormed,
7780
WellFormedTraitRef(TraitId),
81+
IsLocal(TraitId),
7882

7983
Equals,
8084
Sub,
@@ -107,6 +111,10 @@ impl Predicate {
107111
Skeleton::WellFormedTraitRef(trait_id.clone()),
108112
parameters.clone(),
109113
),
114+
Predicate::IsLocal(TraitRef {
115+
trait_id,
116+
parameters,
117+
}) => (Skeleton::IsLocal(trait_id.clone()), parameters.clone()),
110118
}
111119
}
112120
}
@@ -119,6 +127,10 @@ impl TraitRef {
119127
pub fn well_formed(&self) -> Predicate {
120128
Predicate::WellFormedTraitRef(self.clone())
121129
}
130+
131+
pub fn is_local(&self) -> Predicate {
132+
Predicate::IsLocal(self.clone())
133+
}
122134
}
123135

124136
/// Relations are built-in goals which are implemented in custom Rust logic.

tests/coherence.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ fn test_orphan_basic() {
183183
Err(
184184
Error {
185185
context: "orphan_check(impl <> CoreTrait < > for (rigid (adt CoreStruct)) where [] { })",
186-
source: "failed to prove CoreTrait((rigid (adt CoreStruct))) is local, given {}; got {}",
186+
source: "failed to prove {@ IsLocal(CoreTrait((rigid (adt CoreStruct))))} given {}, got {}",
187187
},
188188
)
189189
"#]]

0 commit comments

Comments
 (0)