40 likes | 172 Views
Separation Logic Prover. Goal. Assertion Language Assert :: Formula Formula Formula :: ( pureF ‘|’ spaF ) | Formula / Formula pureF :: term / term | true spaF :: sterm * sterm term :: exp relop exp | id( explist ) sterm :: exp exp | id( explist ) | emp
E N D
Goal • Assertion Language • Assert :: Formula Formula • Formula :: (pureF ‘|’ spaF) | Formula \/ Formula • pureF :: term /\ term | true • spaF :: sterm * sterm • term :: exp relop exp | id(explist) • sterm :: exp exp | id(explist) | emp • Example • p=q | head -> v * head+4->p * lseg(q,NULL) • true | list(head) * emp • Proof given assertion and generate Coq checkable proof term
Status • Demo • list_alloclist_dealloclist_insert • function call • proof term of a small step in prover • Combine with Simplex Prover • Embedded “data structure” • lseg list clist • more… • Single assumption frame inference • Proof term generation • Coq library • Coding …
Difficulties • User-defined data structure • hard to discover inductive axiom from definition • e.g. lseg(p,q)*lseg(q,r) lseg(p,r) • Multi assumption frame inference • (A\/B) -> (C\/D) • what is a “frame” in this case?