Skip to content

Commit 45c754f

Browse files
committed
inline PR into WcData
This change inlines the `PR` enum into the `WcData` enum. The comment on `PR` "we need to come up with a better name for this" indicates this type is not encoding some deeper logical idea. This change passing all tests indicates that the type is also not necessary.
1 parent 915661b commit 45c754f

File tree

6 files changed

+30
-50
lines changed

6 files changed

+30
-50
lines changed

crates/formality-prove/src/decls.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use formality_core::{set, Set, Upcast};
22
use formality_macros::term;
33
use formality_types::grammar::{
44
AdtId, AliasName, AliasTy, Binder, Parameter, Predicate, Relation, TraitId, TraitRef, Ty, Wc,
5-
Wcs, PR,
5+
Wcs,
66
};
77

88
#[term]
@@ -175,13 +175,14 @@ impl TraitDecl {
175175

176176
fn is_supertrait(self_var: &Parameter, wc: &Wc) -> bool {
177177
match wc.data() {
178-
formality_types::grammar::WcData::PR(PR::Predicate(Predicate::IsImplemented(
178+
formality_types::grammar::WcData::Predicate(Predicate::IsImplemented(
179179
trait_ref,
180-
))) => trait_ref.parameters[0] == *self_var,
181-
formality_types::grammar::WcData::PR(PR::Relation(Relation::Outlives(a, _))) => {
180+
)) => trait_ref.parameters[0] == *self_var,
181+
formality_types::grammar::WcData::Relation(Relation::Outlives(a, _)) => {
182182
*a == *self_var
183183
}
184-
formality_types::grammar::WcData::PR(_) => false,
184+
formality_types::grammar::WcData::Predicate(_) => false,
185+
formality_types::grammar::WcData::Relation(_) => false,
185186
formality_types::grammar::WcData::ForAll(binder) => {
186187
is_supertrait(self_var, binder.peek())
187188
}

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use formality_core::judgment_fn;
2-
use formality_types::grammar::{WcData, Wcs, PR};
2+
use formality_types::grammar::{WcData, Wcs};
33

44
use crate::{
55
decls::Decls,
@@ -12,26 +12,26 @@ judgment_fn! {
1212
env: Env,
1313
assumptions: Wcs,
1414
via: WcData,
15-
goal: PR,
15+
goal: WcData,
1616
) => Constraints {
1717
debug(goal, via, assumptions, env, decls)
1818

1919
(
20-
(let (skel_c, parameters_c) = predicate.debone())
21-
(let (skel_g, parameters_g) = goal.debone())
20+
(let (skel_c, parameters_c) = pred_1.debone())
21+
(let (skel_g, parameters_g) = pred_2.debone())
2222
(if skel_c == skel_g)!
2323
(prove(decls, env, assumptions, Wcs::all_eq(parameters_c, parameters_g)) => c)
2424
----------------------------- ("predicate-congruence-axiom")
25-
(prove_via(decls, env, assumptions, PR::Predicate(predicate), goal) => c)
25+
(prove_via(decls, env, assumptions, WcData::Predicate(pred_1), WcData::Predicate(pred_2)) => c)
2626
)
2727

2828
(
29-
(let (skel_c, parameters_c) = relation.debone())
30-
(let (skel_g, parameters_g) = goal.debone())
29+
(let (skel_c, parameters_c) = rel_1.debone())
30+
(let (skel_g, parameters_g) = rel_2.debone())
3131
(if skel_c == skel_g)
3232
(if parameters_c == parameters_g)! // for relations, we require 100% match
3333
----------------------------- ("relation-axiom")
34-
(prove_via(_decls, env, _assumptions, PR::Relation(relation), goal) => Constraints::none(env))
34+
(prove_via(_decls, env, _assumptions, WcData::Relation(rel_1), WcData::Relation(rel_2)) => Constraints::none(env))
3535
)
3636

3737
(

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,13 @@ judgment_fn! {
4343
(&assumptions => a)!
4444
(prove_via(&decls, &env, &assumptions, a, &goal) => c)
4545
----------------------------- ("assumption")
46-
(prove_wc(decls, env, assumptions, WcData::PR(goal)) => c)
46+
(prove_wc(decls, env, assumptions, WcData::Predicate(goal)) => c)
47+
)
48+
(
49+
(&assumptions => a)!
50+
(prove_via(&decls, &env, &assumptions, a, &goal) => c)
51+
----------------------------- ("assumption")
52+
(prove_wc(decls, env, assumptions, WcData::Relation(goal)) => c)
4753
)
4854

4955
(

crates/formality-rust/src/prove.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::grammar::{
77
use formality_core::{seq, Set, To, Upcast, Upcasted};
88
use formality_prove as prove;
99
use formality_types::grammar::{
10-
AdtId, AliasTy, Binder, BoundVar, ParameterKind, Predicate, Relation, TraitId, Ty, Wc, Wcs, PR,
10+
AdtId, AliasTy, Binder, BoundVar, ParameterKind, Predicate, Relation, TraitId, Ty, Wc, Wcs,
1111
};
1212

1313
impl Program {
@@ -357,7 +357,6 @@ macro_rules! upcast_to_wcs {
357357
upcast_to_wcs! {
358358
Wc,
359359
Wcs,
360-
PR,
361360
Predicate,
362361
Relation,
363362
}

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

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use formality_core::term;
22

3-
use formality_core::cast_impl;
43
use formality_core::To;
54
use formality_core::Upcast;
65

@@ -210,26 +209,6 @@ impl TraitId {
210209
}
211210
}
212211

213-
/// "PR" == Predicate or Relation
214-
///
215-
/// We need a better name for this lol.
216-
#[term]
217-
pub enum PR {
218-
#[cast]
219-
Relation(Relation),
220-
#[cast]
221-
Predicate(Predicate),
222-
}
223-
224-
impl PR {
225-
pub fn debone(&self) -> (Skeleton, Vec<Parameter>) {
226-
match self {
227-
PR::Predicate(v) => v.debone(),
228-
PR::Relation(v) => v.debone(),
229-
}
230-
}
231-
}
232-
233212
pub trait Debone {
234213
fn debone(&self) -> (Skeleton, Vec<Parameter>);
235214
}
@@ -244,10 +223,5 @@ macro_rules! debone_impl {
244223
};
245224
}
246225

247-
debone_impl!(PR);
248226
debone_impl!(Predicate);
249227
debone_impl!(Relation);
250-
251-
// Transitive casting impls:
252-
253-
cast_impl!((TraitRef) <: (Predicate) <: (PR));

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ use formality_core::{
44
cast_impl, set, term, Cons, DowncastFrom, DowncastTo, Set, Upcast, UpcastFrom, Upcasted,
55
};
66

7-
use crate::grammar::PR;
8-
97
use super::{Binder, BoundVar, Parameter, Predicate, Relation, TraitRef};
108

119
#[term($set)]
@@ -124,7 +122,10 @@ impl Wc {
124122
#[term]
125123
pub enum WcData {
126124
#[cast]
127-
PR(PR),
125+
Relation(Relation),
126+
127+
#[cast]
128+
Predicate(Predicate),
128129

129130
#[grammar(for $v0)]
130131
ForAll(Binder<Wc>),
@@ -155,10 +156,10 @@ impl DowncastFrom<Wc> for WcData {
155156

156157
// ---
157158

158-
cast_impl!((PR) <: (WcData) <: (Wc));
159-
cast_impl!((Relation) <: (PR) <: (Wc));
160-
cast_impl!((Predicate) <: (PR) <: (Wc));
161-
cast_impl!((TraitRef) <: (PR) <: (Wc));
159+
cast_impl!((TraitRef) <: (Predicate) <: (WcData));
160+
cast_impl!((Relation) <: (WcData) <: (Wc));
161+
cast_impl!((Predicate) <: (WcData) <: (Wc));
162+
cast_impl!((TraitRef) <: (WcData) <: (Wc));
162163

163164
impl UpcastFrom<Wc> for Wcs {
164165
fn upcast_from(term: Wc) -> Self {
@@ -176,7 +177,6 @@ impl DowncastTo<Wc> for Wcs {
176177
}
177178
}
178179

179-
cast_impl!((PR) <: (Wc) <: (Wcs));
180180
cast_impl!((Relation) <: (Wc) <: (Wcs));
181181
cast_impl!((Predicate) <: (Wc) <: (Wcs));
182182
cast_impl!((TraitRef) <: (Wc) <: (Wcs));

0 commit comments

Comments
 (0)