Positive coverage: prove_wc / trait implied bound
trait implied bound| Line | Coverage | Source |
|---|---|---|
| 117 | 12 | (ti in decls.trait_invariants()) |
| 118 | N/A | (let (env, subst) = env.existential_substitution(&ti.binder)) |
| 119 | N/A | (let ti = ti.binder.instantiate_with(&subst).unwrap()) |
| 120 | 4 | (prove_via(decls, env, assumptions, &ti.where_clause, trait_ref) => c) |
| 121 | 3 | (prove_after(decls, c, assumptions, &ti.trait_ref) => c) |
| ──────── ("trait implied bound") | ||
| 123 | 1 | (prove_wc(decls, env, assumptions, Predicate::IsImplemented(trait_ref)) => c.pop_subst(&subst)) |
1 test exercised this rule:
Source location: crates/formality-rust/src/prove/prove/test/eq_partial_eq.rs:25
#[test]
fn eq_implies_partial_eq() {
let assumptions: Wcs = Wcs::t();
let goal: Wc = term("for<T> if {Eq(T)} PartialEq(T)");
let constraints = prove(decls(), (), assumptions, goal);
constraints.assert_ok(
expect!["{Constraints { env: Env { variables: [], bias: Soundness, pending: [], allow_pending_outlives: false }, known_true: true, substitution: {} }}"]);
}
Proof tree
prove_wc_list (some)prove_wc_list.rs:31prove_wc (forall)prove_wc.rs:38prove_wc (implies)prove_wc.rs:44prove_wc (trait implied bound)prove_wc.rs:122prove_via (predicate-congruence-axiom)prove_via.rs:32prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_eq (existential)prove_eq.rs:65prove_existential_var_eq (existential-universal)prove_eq.rs:143
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (some)prove_wc_list.rs:31prove_wc (assumption - predicate)prove_wc.rs:51prove_via (predicate-congruence-axiom)prove_via.rs:32prove_wc_list (some)prove_wc_list.rs:31prove_wc (eq)prove_wc.rs:128prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24
prove_after (prove_after)prove_after.rs:20prove_wc_list (none)prove_wc_list.rs:24