Negative coverage: prove_wc_list / some / premise prove_wc(decls, env, assumptions, wc0) => c
Premise at line 29. Observed failure causes: failed_judgment.
some| Line | Coverage | Source |
|---|---|---|
| 29 | 36 | (prove_wc(decls, env, assumptions, wc0) => c) |
| 30 | 2 | (prove_after(decls, c, assumptions, wcs1) => c) |
| ──────── ("some") | ||
| 32 | 137 | (prove_wc_list(decls, env, assumptions, Cons(wc0, wcs1)) => c) |
36 tests failed proving this premise:
Source location: crates/formality-rust/src/prove/prove/test/adt_wf.rs:44
#[test]
fn not_well_formed_adt() {
let assumptions: Wcs = Wcs::t();
let goal: Parameter = term("X<u64>");
prove(
decls(),
Env::default(),
assumptions,
Relation::WellFormed(goal),
)
.assert_err(expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: u64 = u32, via: Foo(u64), assumptions: {Foo(u64)}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u64, via: Foo(u64), assumptions: {Foo(u64)}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: Foo(u64), assumptions: {Foo(u64)}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]]);
}
Failed proof tree
prove failedadt_wf.rs:38ruleadt_wf.rs:38prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "parameter well formed"prove_wc.rs:161prove_wf failedprove_wf.rs:14rule "ADT"prove_wf.rs:67prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "positive impl"prove_wc.rs:81prove failedprove_wc.rs:81ruleprove_wc.rs:81prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "trait implied bound"prove_wc.rs:117 (failed: empty_collection)
Source location: crates/formality-rust/src/prove/prove/test/eq_assumptions.rs:41
#[test]
fn test_normalize_assoc_ty_existential0() {
test_prove(
Program::empty(),
term("exists<A> {} => {for<T> if { <T as Iterator>::Item = u32 } <A as Iterator>::Item = u32}"),
).assert_err(
expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: <?ty_0 as Iterator>::Item = u32, via: <!ty_1 as Iterator>::Item = u32, assumptions: {<!ty_1 as Iterator>::Item = u32}, env: Env { variables: [?ty_0, !ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_1)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_1)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
the rule "normalize-via-impl" at (prove_normalize.rs) failed because
expression evaluated to an empty collection: `decls.alias_eq_decls(&a.name)`
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: <!ty_0 as Iterator>::Item = <?ty_1 as Iterator>::Item, via: <!ty_0 as Iterator>::Item = u32, assumptions: {<!ty_0 as Iterator>::Item = u32}, env: Env { variables: [?ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: !ty_0 = ?ty_1, via: <!ty_0 as Iterator>::Item = u32, assumptions: {<!ty_0 as Iterator>::Item = u32}, env: Env { variables: [?ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_0)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: ?ty_1, via: <!ty_0 as Iterator>::Item = u32, assumptions: {<!ty_0 as Iterator>::Item = u32}, env: Env { variables: [?ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: u32 = <?ty_1 as Iterator>::Item, via: <!ty_0 as Iterator>::Item = u32, assumptions: {<!ty_0 as Iterator>::Item = u32}, env: Env { variables: [?ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_0)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_0)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
the rule "normalize-via-impl" at (prove_normalize.rs) failed because
expression evaluated to an empty collection: `decls.alias_eq_decls(&a.name)`
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: ?ty_1 = !ty_0, via: <!ty_0 as Iterator>::Item = u32, assumptions: {<!ty_0 as Iterator>::Item = u32}, env: Env { variables: [?ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_0)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: ?ty_1, via: <!ty_0 as Iterator>::Item = u32, assumptions: {<!ty_0 as Iterator>::Item = u32}, env: Env { variables: [?ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_0)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_0)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
the rule "normalize-via-impl" at (prove_normalize.rs) failed because
expression evaluated to an empty collection: `decls.alias_eq_decls(&a.name)`"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "forall"prove_wc.rs:37prove_wc failedprove_wc.rs:23rule "implies"prove_wc.rs:43prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55rule "axiom-l"prove_normalize.rs:96prove_syntactically_eq failedprove_normalize.rs:133rule "alias"prove_normalize.rs:164prove_syntactically_eq failedprove_normalize.rs:133rule "symmetric"prove_normalize.rs:146prove_syntactically_eq failedprove_normalize.rs:133rule "existential-nonvar"prove_normalize.rs:170prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "symmetric"prove_normalize.rs:146prove_syntactically_eq failedprove_normalize.rs:133rule "alias"prove_normalize.rs:164prove_syntactically_eq failedprove_normalize.rs:133rule "existential-nonvar"prove_normalize.rs:170prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "normalize-via-impl"prove_normalize.rs:39 (failed: empty_collection)
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:71prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "alias"prove_eq.rs:58prove failedprove_eq.rs:58ruleprove_eq.rs:58prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "existential"prove_eq.rs:64prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "normalize-l"prove_eq.rs:71prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55rule "axiom-l"prove_normalize.rs:96prove_syntactically_eq failedprove_normalize.rs:133rule "alias"prove_normalize.rs:164prove_syntactically_eq failedprove_normalize.rs:133rule "symmetric"prove_normalize.rs:146prove_syntactically_eq failedprove_normalize.rs:133rule "existential-nonvar"prove_normalize.rs:170prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "symmetric"prove_normalize.rs:146prove_syntactically_eq failedprove_normalize.rs:133rule "alias"prove_normalize.rs:164prove_syntactically_eq failedprove_normalize.rs:133rule "existential-nonvar"prove_normalize.rs:170prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "normalize-via-impl"prove_normalize.rs:39 (failed: empty_collection)
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "alias"prove_eq.rs:58prove failedprove_eq.rs:58ruleprove_eq.rs:58prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "existential"prove_eq.rs:64prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55rule "axiom-l"prove_normalize.rs:96prove_syntactically_eq failedprove_normalize.rs:133rule "alias"prove_normalize.rs:164prove_syntactically_eq failedprove_normalize.rs:133rule "symmetric"prove_normalize.rs:146prove_syntactically_eq failedprove_normalize.rs:133rule "existential-nonvar"prove_normalize.rs:170prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "symmetric"prove_normalize.rs:146prove_syntactically_eq failedprove_normalize.rs:133rule "alias"prove_normalize.rs:164prove_syntactically_eq failedprove_normalize.rs:133rule "existential-nonvar"prove_normalize.rs:170prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:96 (failed: if_let)rule "existential-universal"prove_eq.rs:142 (failed: if_false)
rule "normalize-via-impl"prove_normalize.rs:39 (failed: empty_collection)
Source location: crates/formality-rust/src/prove/prove/test/eq_partial_eq.rs:33
#[test]
fn not_partial_eq_implies_eq() {
let goal: Wc = term("for<T> if {PartialEq(T)} Eq(T)");
prove(decls(), (), (), goal)
.assert_err(
expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Eq(!ty_1), via: PartialEq(!ty_1), assumptions: {PartialEq(!ty_1)}, env: Env { variables: [!ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Eq(!ty_1), via: PartialEq(?ty_2), assumptions: {PartialEq(!ty_1)}, env: Env { variables: [!ty_1, ?ty_2], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedeq_partial_eq.rs:32ruleeq_partial_eq.rs:32prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "forall"prove_wc.rs:37prove_wc failedprove_wc.rs:23rule "implies"prove_wc.rs:43prove_wc failedprove_wc.rs:23rule "assumption - predicate"prove_wc.rs:50prove_via failedprove_via.rs:9
rule "trait implied bound"prove_wc.rs:120prove_via failedprove_via.rs:9
Source location: crates/formality-rust/src/prove/prove/test/eq_partial_eq.rs:44
#[test]
fn universals_not_eq() {
let goal: Wc = term("for<T, U> if {Eq(T)} PartialEq(U)");
prove(decls(), (), (), goal)
.assert_err(
expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: PartialEq(!ty_2), via: Eq(!ty_1), assumptions: {Eq(!ty_1)}, env: Env { variables: [!ty_1, !ty_2], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: !ty_0 = !ty_1, via: Eq(!ty_0), assumptions: {Eq(!ty_0)}, env: Env { variables: [!ty_0, !ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Eq(!ty_0), assumptions: {Eq(!ty_0)}, env: Env { variables: [!ty_0, !ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_1, via: Eq(!ty_0), assumptions: {Eq(!ty_0)}, env: Env { variables: [!ty_0, !ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Eq(!ty_1), via: PartialEq(?ty_2), assumptions: {Eq(!ty_0)}, env: Env { variables: [!ty_0, !ty_1, ?ty_2], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedeq_partial_eq.rs:43ruleeq_partial_eq.rs:43prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "forall"prove_wc.rs:37prove_wc failedprove_wc.rs:23rule "implies"prove_wc.rs:43prove_wc failedprove_wc.rs:23rule "assumption - predicate"prove_wc.rs:50prove_via failedprove_via.rs:9
rule "trait implied bound"prove_wc.rs:121prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - predicate"prove_wc.rs:50prove_via failedprove_via.rs:9rule "predicate-congruence-axiom"prove_via.rs:31prove failedprove_via.rs:31ruleprove_via.rs:31prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "trait implied bound"prove_wc.rs:120prove_via failedprove_via.rs:9
Source location: crates/formality-rust/src/prove/prove/test/is_local.rs:11
#[test]
fn test_forall_not_local() {
test_prove(Program::empty(), term("{} => {for<T> @IsLocal(Debug(T))}")).assert_err(expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: !ty_1, assumptions: {}, env: Env { variables: [!ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "local trait" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_trait_id(&goal.trait_id)`
decls = program([], 222)
&goal.trait_id = Debug"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "forall"prove_wc.rs:37prove_wc failedprove_wc.rs:23rule "trait ref is local"prove_wc.rs:148is_local_trait_ref failedis_local.rs:201rule "local parameter"is_local.rs:219is_local_parameter failedis_local.rs:279rule "local parameter"is_local.rs:291prove_normalize failedprove_normalize.rs:19
rule "local trait"is_local.rs:211 (failed: if_false)
Source location: crates/formality-rust/src/prove/prove/test/magic_copy.rs:25
#[test]
fn all_t_not_magic() {
test_prove(decls(), term("{} => {for<T> Magic(T)}")).assert_err(
expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: !ty_0 = u32, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Magic(!ty_0), via: Copy(?ty_1), assumptions: {}, env: Env { variables: [!ty_0, ?ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Magic(!ty_1), via: Copy(?ty_2), assumptions: {}, env: Env { variables: [!ty_1, ?ty_2], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "forall"prove_wc.rs:37prove_wc failedprove_wc.rs:23rule "positive impl"prove_wc.rs:88prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "positive impl"prove_wc.rs:81prove failedprove_wc.rs:81ruleprove_wc.rs:81prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "trait implied bound"prove_wc.rs:121prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "trait implied bound"prove_wc.rs:120prove_via failedprove_via.rs:9
rule "trait implied bound"prove_wc.rs:120prove_via failedprove_via.rs:9
Source location: crates/formality-rust/src/prove/prove/test/magic_copy.rs:40
#[test]
fn all_t_not_copy() {
test_prove(decls(), term("{} => {for<T> Copy(T)}")).assert_err(
expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: !ty_0 = u32, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: !ty_0 = u32, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: Copy(!ty_0), assumptions: {Copy(!ty_0)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Magic(!ty_0), via: Copy(?ty_1), assumptions: {}, env: Env { variables: [!ty_0, ?ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "forall"prove_wc.rs:37prove_wc failedprove_wc.rs:23rule "positive impl"prove_wc.rs:81prove failedprove_wc.rs:81ruleprove_wc.rs:81prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "trait implied bound"prove_wc.rs:121prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "positive impl"prove_wc.rs:88prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "positive impl"prove_wc.rs:81prove failedprove_wc.rs:81ruleprove_wc.rs:81prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "assumption - relation"prove_wc.rs:56prove_via failedprove_via.rs:9
rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19rule "normalize-via-assumption"prove_normalize.rs:33prove_normalize_via failedprove_normalize.rs:55
rule "trait implied bound"prove_wc.rs:120prove_via failedprove_via.rs:9
Source location: crates/formality-rust/src/prove/prove/test/occurs_check.rs:24
#[test]
fn direct_cycle() {
test_prove(decls(), term("exists<A> {} => {A = Vec<A>}")).assert_err(expect![[r#"
failed at (proven_set.rs) because
`?ty_0` occurs in `Vec<?ty_0>`
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: ?ty_0, assumptions: {}, env: Env { variables: [?ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: Vec<?ty_0>, assumptions: {}, env: Env { variables: [?ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "existential"prove_eq.rs:64prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:97equate_variable failedprove_eq.rs:97ruleproven_set.rs:57 (failed: inapplicable)
rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19
Source location: crates/formality-rust/src/prove/prove/test/occurs_check.rs:48
#[test]
fn indirect_cycle_1() {
test_prove(decls(), term("exists<A, B> {} => {A = Vec<B>, B = A}")).assert_err(expect![[r#"
failed at (proven_set.rs) because
`?ty_0` occurs in `Vec<?ty_0>`
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: ?ty_0, assumptions: {}, env: Env { variables: [?ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: Vec<?ty_0>, assumptions: {}, env: Env { variables: [?ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:30prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "existential"prove_eq.rs:64prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:97equate_variable failedprove_eq.rs:97ruleproven_set.rs:57 (failed: inapplicable)
rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19
Source location: crates/formality-rust/src/prove/prove/test/occurs_check.rs:60
#[test]
fn indirect_cycle_2() {
test_prove(decls(), term("exists<A, B> {} => {B = A, A = Vec<B>}")).assert_err(expect![[r#"
failed at (proven_set.rs) because
`?ty_0` occurs in `Vec<?ty_0>`
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: ?ty_0, assumptions: {}, env: Env { variables: [?ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: Vec<?ty_0>, assumptions: {}, env: Env { variables: [?ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Failed proof tree
prove failedtest_util.rs:60ruletest_util.rs:60prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:30prove_after failedprove_after.rs:8rule "prove_after"prove_after.rs:19prove failedprove_after.rs:19ruleprove_after.rs:19prove_wc_list failedprove_wc_list.rs:11rule "some"prove_wc_list.rs:29prove_wc failedprove_wc.rs:23rule "eq"prove_wc.rs:127prove_eq failedprove_eq.rs:25rule "existential"prove_eq.rs:64prove_existential_var_eq failedprove_eq.rs:78rule "existential-nonvar"prove_eq.rs:97equate_variable failedprove_eq.rs:97ruleproven_set.rs:57 (failed: inapplicable)
rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19
rule "symmetric"prove_eq.rs:40prove_eq failedprove_eq.rs:25rule "normalize-l"prove_eq.rs:70prove_normalize failedprove_normalize.rs:19
Source location: crates/formality-rust/src/prove/prove/test/universes.rs:14
#[test]
fn exists_u_for_t() {
let decls = Program::empty();
test_prove(decls, term("exists<U> {} => {for<T> T = U}")).assert_err(expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: !ty_1, assumptions: {}, env: Env { variables: [?ty_0, !ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "existential-nonvar" at (prove_eq.rs) failed because
pattern `None` did not match value `Some(!ty_1)`
the rule "existential-universal" at (prove_eq.rs) failed because
condition evaluated to false: `env.universe(p) < env.universe(v)`
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: ?ty_0, assumptions: {}, env: Env { variables: [?ty_0, !ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }"#]]);
}
Proof trees omitted for the remaining 26 tests.
Source location: tests/basic_tests.rs:34
#[test]
fn hello_world_fail() {
FormalityTest::new(crates![crate Foo {
trait Foo<T> where T: Bar<Self> {}
trait Bar<T> where T: Baz {}
trait Baz {}
}]).err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: @ WellFormedTraitRef(Bar(!ty_0, !ty_1)), via: Bar(!ty_0, !ty_1), assumptions: {Bar(!ty_0, !ty_1)}, env: Env { variables: [!ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Baz(!ty_1), via: Bar(!ty_0, !ty_1), assumptions: {Bar(!ty_0, !ty_1)}, env: Env { variables: [!ty_1, !ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Source location: tests/basic_tests.rs:85
#[test]
fn basic_where_clauses_fail() {
FormalityTest::new(crates![crate core {
#![feature(non_lifetime_binders)]
trait A<T> where T: B { }
trait B { }
trait WellFormed where for<T> u32: A<T> { }
}]).err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: @ WellFormedTraitRef(A(u32, !ty_1)), via: A(u32, ?ty_2), assumptions: {for <ty> A(u32, ^ty0_0)}, env: Env { variables: [!ty_1, ?ty_2], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: B(!ty_0), via: A(u32, ?ty_1), assumptions: {for <ty> A(u32, ^ty0_0)}, env: Env { variables: [!ty_0, ?ty_1], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Source location: tests/borrowck.rs:453
fn foo() -> Datum {
exists<'r0, 'r1> {
let x: Datum = Datum { value: 0 _ u32 };
let r: &'r0 Datum = &'r1 x;
let y: Datum = *r;
return y;
}
}
Source location: tests/borrowck.rs:1112
fn foo() -> Datum {
exists<'r0, 'r1> {
let x: Datum = Datum { value: 0 _ u32 };
let r: &mut 'r0 Datum = &mut 'r1 x;
let y: Datum = *r;
return y;
}
}
Source location: tests/borrowck.rs:2170
fn foo<'a, 'b>(v1: &'a u32) -> &'b u32 {
exists<'r0> {
let v2: &'r0 u32 = v1;
return v2;
}
}
Source location: tests/borrowck.rs:2192
fn foo<'a, 'b>(v1: &'a u32, v2: &'b u32) -> () {
let output: &'b u32 = v2;
loop {
output = v1;
}
}
Source location: tests/borrowck.rs:2249
fn foo<'a, 'b, 'c>(v1: &'a u32) -> &'c u32
where
'a: 'b,
{
return v1;
}
Source location: tests/borrowck.rs:2881
fn foo<'a, 'b>(a: &'a u32) -> &'b u32 {
let r: &'b u32 = identity::<&'b u32>(a);
return r;
}
Source location: tests/coherence_orphan.rs:12
#[test]
fn neg_CoreTrait_for_CoreStruct_in_Foo() {
FormalityTest::new(crates![crate core {
trait CoreTrait {}
struct CoreStruct {}
},
crate foo {
impl !CoreTrait for CoreStruct {}
}]).err(expect_test::expect![[r#"
the rule "fundamental rigid type" at (is_local.rs) failed because
condition evaluated to false: `is_fundamental(decls, name)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } }, crate foo { impl ! CoreTrait for CoreStruct {} }], 222)
name = (adt CoreStruct)
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: CoreStruct, assumptions: {}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "local rigid type" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_adt_id(a)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } }, crate foo { impl ! CoreTrait for CoreStruct {} }], 222)
a = CoreStruct
the rule "local trait" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_trait_id(&goal.trait_id)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } }, crate foo { impl ! CoreTrait for CoreStruct {} }], 222)
&goal.trait_id = CoreTrait"#]])
}
Source location: tests/coherence_orphan.rs:47
#[test]
fn mirror_CoreStruct() {
FormalityTest::new(crates![crate core {
trait CoreTrait {}
struct CoreStruct {}
trait Mirror {
type Assoc : [];
}
impl<T> Mirror for T {
type Assoc = T;
}
},
crate foo {
impl CoreTrait for <CoreStruct as Mirror>::Assoc {}
}]).err(expect_test::expect![[r#"
the rule "fundamental rigid type" at (is_local.rs) failed because
condition evaluated to false: `is_fundamental(decls, name)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } trait Mirror <ty> { type Assoc : [] ; } impl <ty> Mirror for ^ty0_0 { type Assoc = ^ty1_0 ; } }, crate foo { impl CoreTrait for <CoreStruct as Mirror>::Assoc { } }], 222)
name = (adt CoreStruct)
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: CoreStruct, assumptions: {}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "local rigid type" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_adt_id(a)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } trait Mirror <ty> { type Assoc : [] ; } impl <ty> Mirror for ^ty0_0 { type Assoc = ^ty1_0 ; } }, crate foo { impl CoreTrait for <CoreStruct as Mirror>::Assoc { } }], 222)
a = CoreStruct
the rule "local trait" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_trait_id(&goal.trait_id)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } trait Mirror <ty> { type Assoc : [] ; } impl <ty> Mirror for ^ty0_0 { type Assoc = ^ty1_0 ; } }, crate foo { impl CoreTrait for <CoreStruct as Mirror>::Assoc { } }], 222)
&goal.trait_id = CoreTrait"#]])
}
Source location: tests/coherence_orphan.rs:109
#[test]
fn uncovered_T() {
FormalityTest::new(crates![crate core {
trait CoreTrait<T> {}
},
crate foo {
struct FooStruct {}
impl<T> CoreTrait<FooStruct> for T {}
}]).err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: !ty_0, assumptions: {}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: !ty_0, assumptions: {}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "local trait" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_trait_id(&goal.trait_id)`
decls = program([crate core { trait CoreTrait <ty, ty> { } }, crate foo { struct FooStruct { } impl <ty> CoreTrait <FooStruct> for ^ty0_0 { } }], 222)
&goal.trait_id = CoreTrait"#]])
}
Source location: tests/coherence_orphan.rs:136
#[test]
fn alias_to_unit() {
FormalityTest::new(crates![crate core {
trait CoreTrait {}
trait Unit {
type Assoc : [];
}
impl<T> Unit for T {
type Assoc = ();
}
},
crate foo {
struct FooStruct {}
impl CoreTrait for <FooStruct as Unit>::Assoc {}
}]).err(expect_test::expect![[r#"
the rule "fundamental rigid type" at (is_local.rs) failed because
condition evaluated to false: `is_fundamental(decls, name)`
decls = program([crate core { trait CoreTrait <ty> { } trait Unit <ty> { type Assoc : [] ; } impl <ty> Unit for ^ty0_0 { type Assoc = () ; } }, crate foo { struct FooStruct { } impl CoreTrait for <FooStruct as Unit>::Assoc { } }], 222)
name = tuple(0)
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: (), assumptions: {}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "local trait" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_trait_id(&goal.trait_id)`
decls = program([crate core { trait CoreTrait <ty> { } trait Unit <ty> { type Assoc : [] ; } impl <ty> Unit for ^ty0_0 { type Assoc = () ; } }, crate foo { struct FooStruct { } impl CoreTrait for <FooStruct as Unit>::Assoc { } }], 222)
&goal.trait_id = CoreTrait"#]])
}
Source location: tests/coherence_orphan.rs:158
#[test]
fn CoreTrait_for_CoreStruct_in_Foo() {
FormalityTest::new(crates![crate core {
trait CoreTrait {}
struct CoreStruct {}
},
crate foo {
impl CoreTrait for CoreStruct {}
}]).err(expect_test::expect![[r#"
the rule "fundamental rigid type" at (is_local.rs) failed because
condition evaluated to false: `is_fundamental(decls, name)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } }, crate foo { impl CoreTrait for CoreStruct { } }], 222)
name = (adt CoreStruct)
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: CoreStruct, assumptions: {}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "local rigid type" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_adt_id(a)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } }, crate foo { impl CoreTrait for CoreStruct { } }], 222)
a = CoreStruct
the rule "local trait" at (is_local.rs) failed because
condition evaluated to false: `decls.is_local_trait_id(&goal.trait_id)`
decls = program([crate core { trait CoreTrait <ty> { } struct CoreStruct { } }, crate foo { impl CoreTrait for CoreStruct { } }], 222)
&goal.trait_id = CoreTrait"#]])
}
Source location: tests/consts.rs:32
#[test]
fn mismatch() {
FormalityTest::new(crates![crate Foo {
trait Foo<const C> where type_of_const C is bool {}
impl Foo<u32(42)> for u32 {}
}]).err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: u32, assumptions: {}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:19:1: no applicable rules for prove_normalize { p: bool, assumptions: {}, env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Source location: tests/consts.rs:68
#[test]
fn generic_mismatch() {
FormalityTest::new(crates![crate Foo {
trait Foo<const C> where type_of_const C is bool {}
// Here, the impl is assuming C is u32, which mismatches the trait bound.
impl<const C> Foo<C> for u32 where type_of_const C is u32 {}
}]).err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Foo(u32, !const_0), via: @ ConstHasType(!const_0 , u32), assumptions: {@ ConstHasType(!const_0 , u32)}, env: Env { variables: [!const_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: u32 = bool, via: @ ConstHasType(!const_0 , u32), assumptions: {@ ConstHasType(!const_0 , u32)}, env: Env { variables: [!const_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: @ ConstHasType(!const_0 , u32), assumptions: {@ ConstHasType(!const_0 , u32)}, env: Env { variables: [!const_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: bool, via: @ ConstHasType(!const_0 , u32), assumptions: {@ ConstHasType(!const_0 , u32)}, env: Env { variables: [!const_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_const_has_type.rs:11:1: no applicable rules for prove_const_has_type { constant: !const_0, assumptions: {@ ConstHasType(!const_0 , u32)}, env: Env { variables: [!const_0], bias: Soundness, pending: [], allow_pending_outlives: false }, decls: program([crate core { trait Copy <ty> { } impl Copy for () { } impl Copy for u8 { } impl Copy for u16 { } impl Copy for u32 { } impl Copy for u64 { } impl Copy for i8 { } impl Copy for i16 { } impl Copy for i32 { } impl Copy for i64 { } impl Copy for bool { } impl Copy for usize { } impl Copy for isize { } impl <lt, ty> Copy for &^lt0_0 ^ty0_1 { } trait Drop <ty> { } trait Derefable <ty> { type Target : [] ; } impl <lt, ty> Derefable for &^lt0_0 ^ty0_1 where ^ty0_1 : ^lt0_0 { type Target = ^ty1_1 ; } impl <lt, ty> Derefable for &mut ^lt0_0 ^ty0_1 where ^ty0_1 : ^lt0_0 { type Target = ^ty1_1 ; } }, crate Foo { trait Foo <ty, const> where type_of_const ^const0_1 is bool { } impl <const> Foo <^const0_0> for u32 where type_of_const ^const0_0 is u32 { } }], 222) }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Source location: tests/drop.rs:99
#[test]
fn drop_impl_extra_where_clause() {
FormalityTest::new(crates![
crate Foo {
trait Clone {}
struct MyStruct<T> {
value: T,
}
impl<T> Drop for MyStruct<T> where T: Clone {}
}
])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Clone(!ty_0), via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Source location: tests/drop.rs:121
#[test]
fn drop_impl_concrete_type_param() {
FormalityTest::new(crates![
crate Foo {
struct MyStruct<T> {
value: T,
}
impl Drop for MyStruct<u32> {}
}
])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: MyStruct<!ty_0> = MyStruct<u32>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: MyStruct<!ty_0>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: !ty_0 = u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: MyStruct<u32>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: u32 = !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_normalize.rs:55:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Source location: tests/mir_typeck.rs:147
fn foo (b: bool) -> u32 {
if b {
return 1 _ u32;
} else {
return false;
}
}
Source location: tests/mir_typeck.rs:266
fn foo() -> () {
let s2: S2<S1>;
}
Source location: tests/mir_typeck.rs:300
fn bar(v1: ()) -> () {
let v0: () = foo(v1);
return v0;
}
Source location: tests/mir_typeck.rs:360
fn bar(v1: u32) -> u32 {
let v0: u32 = identity::<bool>(v1);
return v0;
}
Source location: tests/mir_typeck.rs:421
fn foo (v1: ()) -> u32 {
return v1;
}
Source location: tests/mir_typeck.rs:630
fn foo (v1: u32) -> u32 {
let v2: Dummy = Dummy { value: false };
return v1;
}
Source location: tests/references.rs:13
Source location: tests/well_formed_trait_ref.rs:37
#[test]
fn missing_dependent_where_clause() {
FormalityTest::new(crates![crate foo {
trait Trait1 {}
trait Trait2 {}
struct S1<T> where T: Trait1 {
dummy: T,
}
struct S2<T> where S1<T> : Trait2 {
dummy: T,
}
}])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: @ WellFormedTraitRef(Trait2(S1<!ty_0>)), via: Trait2(S1<!ty_0>), assumptions: {Trait2(S1<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove/prove/prove_via.rs:9:1: no applicable rules for prove_via { goal: Trait1(!ty_0), via: Trait2(S1<!ty_0>), assumptions: {Trait2(S1<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}