Skip to content

Commit 83358a6

Browse files
authored
fix a number of duplicate qid (#2782)
1 parent a8751f2 commit 83358a6

4 files changed

Lines changed: 26 additions & 15 deletions

File tree

source/vir/src/assoc_types_to_air.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//! (View::V (Vec A)) == (Seq (View::V A))
1212
1313
use crate::ast::{AssocTypeImpl, AssocTypeImplX, Trait};
14+
use crate::ast_util::path_as_friendly_rust_name;
1415
use crate::context::Ctx;
1516
use crate::def::QID_ASSOC_TYPE_IMPL;
1617
use crate::sst_to_air::typ_to_ids;
@@ -50,7 +51,7 @@ pub fn assoc_type_impls_to_air(ctx: &Ctx, assocs: &Vec<AssocTypeImpl>) -> Comman
5051
for assoc in assocs {
5152
let AssocTypeImplX {
5253
name,
53-
impl_path: _,
54+
impl_path,
5455
typ_params,
5556
typ_bounds,
5657
trait_path,
@@ -86,7 +87,13 @@ pub fn assoc_type_impls_to_air(ctx: &Ctx, assocs: &Vec<AssocTypeImpl>) -> Comman
8687
let projection = ident_apply(&projector, &args);
8788
let typ_id = typ_to_ids(ctx, &typ)[index].clone();
8889
let eq = mk_eq(&projection, &typ_id);
89-
let qname = format!("{}_{}_{}", projector, QID_ASSOC_TYPE_IMPL, decoration);
90+
let qname = format!(
91+
"{}_{}_{}_{}",
92+
projector,
93+
path_as_friendly_rust_name(impl_path),
94+
QID_ASSOC_TYPE_IMPL,
95+
decoration
96+
);
9097
let mut trigs = vec![projection];
9198
for extra_trigger_term in extra_trigger_terms.iter() {
9299
trigs.push(crate::sst_to_air::typ_to_id(ctx, extra_trigger_term));

source/vir/src/prelude.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ pub(crate) fn prelude_nodes(name_ctxt: &NameCtxt, config: PreludeConfig) -> Vec<
262262
(has_type ([mut_ref_future] m) t)
263263
)
264264
:pattern ((has_type m (MUTREF d t)) ([mut_ref_future] m))
265-
:qid prelude_mut_ref_current_has_type
266-
:skolemid skolem_prelude_mut_ref_current_has_type
265+
:qid prelude_mut_ref_future_has_type
266+
:skolemid skolem_prelude_mut_ref_future_has_type
267267
)))
268268
(axiom (forall ((m [Poly]) (d [decoration]) (t [typ]) (arg [Poly])) (!
269269
(=>
@@ -475,8 +475,8 @@ pub(crate) fn prelude_nodes(name_ctxt: &NameCtxt, config: PreludeConfig) -> Vec<
475475
(= x ([box_int] ([unbox_int] x)))
476476
)
477477
:pattern (([has_type] x ([type_id_float] bits)))
478-
:qid prelude_box_unbox_sint
479-
:skolemid skolem_prelude_box_unbox_sint
478+
:qid prelude_box_unbox_float
479+
:skolemid skolem_prelude_box_unbox_float
480480
)))
481481
(axiom (forall ((x [Poly])) (!
482482
(=>
@@ -680,8 +680,8 @@ pub(crate) fn prelude_nodes(name_ctxt: &NameCtxt, config: PreludeConfig) -> Vec<
680680
([has_type] ([box_int] x) ([type_id_float] bits))
681681
)
682682
:pattern (([has_type] ([box_int] x) ([type_id_float] bits)))
683-
:qid prelude_has_type_sint
684-
:skolemid skolem_prelude_has_type_sint
683+
:qid prelude_has_type_float
684+
:skolemid skolem_prelude_has_type_float
685685
)))
686686
(axiom (forall ((x Int)) (!
687687
(=>
@@ -743,8 +743,8 @@ pub(crate) fn prelude_nodes(name_ctxt: &NameCtxt, config: PreludeConfig) -> Vec<
743743
([u_inv] bits ([unbox_int] x))
744744
)
745745
:pattern (([has_type] x ([type_id_float] bits)))
746-
:qid prelude_unbox_sint
747-
:skolemid skolem_prelude_unbox_sint
746+
:qid prelude_unbox_float
747+
:skolemid skolem_prelude_unbox_float
748748
)))
749749

750750
// With smt.arith.nl=false, Z3 sometimes fails to prove obvious formulas

source/vir/src/resolve_axioms.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ pub fn resolve_decoration_axiom(dec: &TypDecoration) -> Node {
207207
([resolved] d t x)
208208
)
209209
:pattern (([resolved] ([decorate_box] d1 t1 d) t x))
210-
:qid prelude_resolved_tracked_decoration
211-
:skolemid skolem_prelude_resolved_tracked_decoration
210+
:qid prelude_resolved_box_decoration
211+
:skolemid skolem_prelude_resolved_box_decoration
212212
)))
213213
)
214214
}

source/vir/src/sst_to_air_func.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ pub(crate) fn func_def_args(ctx: &Ctx, typ_params: &Idents, params: &Pars) -> Ve
115115
fn func_def_quant(
116116
ctx: &Ctx,
117117
name: &Ident,
118+
qid_name: &Ident,
118119
is_trait_default_ensures: bool,
119120
typ_params: &Idents,
120121
typ_args: &Typs,
@@ -144,7 +145,7 @@ fn func_def_quant(
144145
trigs.push(crate::sst_to_air::typ_to_id(ctx, extra_trigger_term));
145146
}
146147
Ok(mk_bind_expr(
147-
&func_bind_trig(ctx, name.to_string(), typ_params, params, &trigs, opts),
148+
&func_bind_trig(ctx, qid_name.to_string(), typ_params, params, &trigs, opts),
148149
&f_imply,
149150
))
150151
}
@@ -382,8 +383,8 @@ fn func_body_to_air(
382383
let rec_f_def = ident_apply(&rec_f, &args_def);
383384
let eq_zero = mk_eq(&rec_f_fuel, &rec_f_zero);
384385
let eq_body = mk_eq(&rec_f_succ, &body_expr);
385-
let name_zero = format!("{}_fuel_to_zero", fun_to_air_ident(&ctx.name_ctxt, &name));
386-
let name_body = format!("{}_fuel_to_body", fun_to_air_ident(&ctx.name_ctxt, &name));
386+
let name_zero = format!("{}_fuel_to_zero", fun_to_air_ident(&ctx.name_ctxt, &rec_name));
387+
let name_body = format!("{}_fuel_to_body", fun_to_air_ident(&ctx.name_ctxt, &rec_name));
387388
let opts = Some(FuncBindOpts { add_fuel: true, add_default_ensures: false });
388389
let bind_zero = func_bind(ctx, name_zero, &typ_params, pars, &rec_f_fuel, opts);
389390
let bind_body = func_bind(ctx, name_body, &typ_params, pars, &rec_f_succ, opts);
@@ -403,6 +404,7 @@ fn func_body_to_air(
403404
let e_forall = func_def_quant(
404405
ctx,
405406
&suffix_global_id(&fun_to_air_ident(&ctx.name_ctxt, &name)),
407+
&suffix_global_id(&fun_to_air_ident(&ctx.name_ctxt, &rec_name)),
406408
false,
407409
&impl_typ_params,
408410
&typ_args,
@@ -519,6 +521,7 @@ fn req_ens_to_air(
519521
let e_forall = func_def_quant(
520522
ctx,
521523
&name,
524+
&name,
522525
is_trait_default_ensures,
523526
&typ_params,
524527
&typ_args,
@@ -873,6 +876,7 @@ pub fn func_axioms_to_air(
873876
let e_forall = func_def_quant(
874877
ctx,
875878
&suffix_global_id(&fun_to_air_ident(&ctx.name_ctxt, &f_trait)),
879+
&suffix_global_id(&fun_to_air_ident(&ctx.name_ctxt, &function.x.name)),
876880
false,
877881
&typ_params,
878882
&trait_typ_args,

0 commit comments

Comments
 (0)