Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Judgment prove_wc at crates/formality-rust/src/prove/prove/prove/prove_wc.rs:23

Signature:

prove_wc(_decls: Program, env: Env, assumptions: Wcs, goal: Wc,) => Constraints

The number on each rule’s conclusion is positive coverage; the number on each premise is negative coverage. Click a number to browse the tests.

forall
LineCoverageSource
35N/A(let (env, subst) = env.universal_substitution(binder))
36N/A(let p1 = binder.instantiate_with(&subst).unwrap())
378(prove_wc(decls, env, assumptions, p1) => c)
──────── ("forall")
3912(prove_wc(decls, env, assumptions, WcData::ForAll(binder)) => c.pop_subst(&subst))
implies
LineCoverageSource
433(prove_wc(decls, env, (assumptions, p1), p2) => c)
──────── ("implies")
454(prove_wc(decls, env, assumptions, WcData::Implies(p1, p2)) => c)
assumption - predicate
LineCoverageSource
49(a in assumptions)
5010(prove_via(decls, env, assumptions, a, goal) => c)
──────── ("assumption - predicate")
5213(prove_wc(decls, env, assumptions, WcData::Predicate(goal)) => c)
assumption - relation
LineCoverageSource
55(a in assumptions)
5612(prove_via(decls, env, assumptions, a, goal) => c)
──────── ("assumption - relation")
584(prove_wc(decls, env, assumptions, WcData::Relation(goal)) => c)
positive impl
LineCoverageSource
65(i in decls.impl_decls(&trait_ref.trait_id))
68N/A(let (env, subst) = env.existential_substitution(&i.binder))
69N/A(let i = i.binder.instantiate_with(&subst).unwrap())
73N/A(let t = decls.trait_decl(&i.trait_ref.trait_id).binder.instantiate_with(&i.trait_ref.parameters).unwrap())
80N/A(let co_assumptions = (assumptions, trait_ref))
816(prove(decls, env, co_assumptions, Wcs::all_eq(&trait_ref.parameters, &i.trait_ref.parameters)) => c)
821(prove_after(decls, c, co_assumptions, &i.where_clause) => c)
884(prove_after(decls, c, assumptions, &t.where_clause) => c)
──────── ("positive impl")
90119(prove_wc(decls, env, assumptions, Predicate::IsImplemented(trait_ref)) => c.pop_subst(&subst))
coherence / remote impl
LineCoverageSource
94(if env.bias() == Bias::Completeness)
95(may_be_remote(decls, env, assumptions, trait_ref) => c)
──────── ("coherence / remote impl")
97(prove_wc(decls, env, assumptions, Predicate::IsImplemented(trait_ref)) => c)
negative impl
LineCoverageSource
101(i in decls.neg_impl_decls(&trait_ref.trait_id))
102N/A(let (env, subst) = env.existential_substitution(&i.binder))
103N/A(let i = i.binder.instantiate_with(&subst).unwrap())
104(prove(decls, env, assumptions, Wcs::all_eq(&trait_ref.parameters, &i.trait_ref.parameters)) => c)
105(prove_after(decls, c, assumptions, &i.where_clause) => c)
──────── ("negative impl")
1073(prove_wc(decls, env, assumptions, Predicate::NotImplemented(trait_ref)) => c.pop_subst(&subst))
alias eq
LineCoverageSource
111(prove_eq(decls, env, assumptions, alias_ty, ty) => c)
──────── ("alias eq")
1131(prove_wc(decls, env, assumptions, Predicate::AliasEq(alias_ty, ty)) => c)
trait implied bound
LineCoverageSource
11712(ti in decls.trait_invariants())
118N/A(let (env, subst) = env.existential_substitution(&ti.binder))
119N/A(let ti = ti.binder.instantiate_with(&subst).unwrap())
1204(prove_via(decls, env, assumptions, &ti.where_clause, trait_ref) => c)
1213(prove_after(decls, c, assumptions, &ti.trait_ref) => c)
──────── ("trait implied bound")
1231(prove_wc(decls, env, assumptions, Predicate::IsImplemented(trait_ref)) => c.pop_subst(&subst))
eq
LineCoverageSource
12714(prove_eq(decls, env, assumptions, a, b) => c)
──────── ("eq")
129131(prove_wc(decls, env, assumptions, Relation::Equals(a, b)) => c)
subtype
LineCoverageSource
1335(prove_sub(decls, env, assumptions, a, b) => c)
──────── ("subtype")
13567(prove_wc(decls, env, assumptions, WcData::Relation(Relation::Sub(a, b))) => c)
trait well formed
LineCoverageSource
1391(for_all(decls, env, assumptions, &trait_ref.parameters, &prove_wf) => c)
140N/A(let t = decls.trait_decl(&trait_ref.trait_id))
141N/A(let t = t.binder.instantiate_with(&trait_ref.parameters).unwrap())
1422(prove_after(decls, c, assumptions, &t.where_clause) => c)
──────── ("trait well formed")
14419(prove_wc(decls, env, assumptions, Predicate::WellFormedTraitRef(trait_ref)) => c)
trait ref is local
LineCoverageSource
1486(is_local_trait_ref(decls, env, assumptions, trait_ref) => c)
──────── ("trait ref is local")
150111(prove_wc(decls, env, assumptions, Predicate::IsLocal(trait_ref)) => c)
outlives
LineCoverageSource
1544(prove_outlives(decls, env, assumptions, a, b) => c)
──────── ("outlives")
15696(prove_wc(decls, env, assumptions, Relation::Outlives(a, b)) => c)
parameter well formed
LineCoverageSource
1613(prove_wf(decls, env, assumptions, p) => c)
──────── ("parameter well formed")
163104(prove_wc(decls, env, assumptions, Relation::WellFormed(p)) => c)
const has ty
LineCoverageSource
1671(prove_const_has_type(decls, env, assumptions, constant) => (ty_constant, c))
1681(prove_after(decls, c, assumptions, Relation::equals(ty_constant, ty)) => c)
──────── ("const has ty")
1703(prove_wc(decls, env, assumptions, Predicate::ConstHasType(constant, ty)) => c)