%------------------------------------------------------------------------------ % File : SWV013-0 : TPTP v7.2.0. Released v5.2.0. % Domain : Software Verification % Axioms : Lists in Separation Logic % Version : [Nav11] axioms. % English : Axioms for proving entailments between separation logic formulas % with list predicates. % Refs : [BCO05] Berdine et al. (2005), Symbolic Execution with Separat % : [RN11] Rybalchenko & Navarro Perez (2011), Separation Logic + % : [Nav11] Navarro Perez (2011), Email to Geoff Sutcliffe % Source : [Nav11] % Names : SepLogicLists [Nav11] % Status : Satisfiable % Syntax : Number of clauses : 11 ( 3 non-Horn; 4 unit; 9 RR) % Number of atoms : 21 ( 8 equality) % Maximal clause size : 3 ( 2 average) % Number of predicates : 2 ( 0 propositional; 1-2 arity) % Number of functors : 4 ( 1 constant; 0-2 arity) % Number of variables : 38 ( 9 singleton) % Maximal term depth : 5 ( 2 average) % SPC : % Comments : %------------------------------------------------------------------------------ %----S * T * Sigma = T * S * Sigma. cnf(associative_commutative,axiom, ( sep(S, sep(T, Sigma)) = sep(T, sep(S, Sigma)) )). %----lseg(X, X) * Sigma = Sigma. cnf(normalization,axiom, ( sep(lseg(X, X), Sigma) = Sigma )). %----next(nil, Y) * Sigma --> bot. cnf(wellformedness_1,axiom, ( ~ heap(sep(next(nil, Y), Sigma)) )). %----lseg(nil, Y) * Sigma --> Y = nil. cnf(wellformedness_2,axiom, ( ~ heap(sep(lseg(nil, Y), Sigma)) | Y = nil )). %----next(X, Y) * next(X, Z) * Sigma --> bot. cnf(wellformedness_3,axiom, ( ~ heap(sep(next(X, Y), sep(next(X, Z), Sigma))) )). %----next(X, Y) * lseg(X, Z) * Sigma --> X = Z. cnf(wellformedness_4,axiom, ( ~ heap(sep(next(X, Y), sep(lseg(X, Z), Sigma))) | X = Z )). %----lseg(X, Y) * lseg(X, Z) * Sigma --> X = Y, X = Z. cnf(wellformedness_5,axiom, ( ~ heap(sep(lseg(X, Y), sep(lseg(X, Z), Sigma))) | X = Y | X = Z )). %----next(X, Z) * Sigma --> X = Z, lseg(X, Z) * Sigma. (REDUNDANT: U2 + NORM) %cnf(unfolding_1,axiom, % ( ~ heap(sep(next(X, Z), Sigma)) % | X = Z % | heap(sep(lseg(X, Z), Sigma)) )). %----next(X, Y) * lseg(Y, Z) * Sigma --> X = Y, lseg(X, Z) * Sigma. cnf(unfolding_2,axiom, ( ~ heap(sep(next(X, Y), sep(lseg(Y, Z), Sigma))) | X = Y | heap(sep(lseg(X, Z), Sigma)) )). %----lseg(X, Y) * lseg(Y, nil) * Sigma --> lseg(X, nil) * Sigma. cnf(unfolding_3,axiom, ( ~ heap(sep(lseg(X, Y), sep(lseg(Y, nil), Sigma))) | heap(sep(lseg(X, nil), Sigma)) )). %----lseg(X, Y) * lseg(Y, Z) * next(Z, W) * Sigma --> %---- lseg(X, Z) * next(Z, W) * Sigma. cnf(unfolding_4,axiom, ( ~ heap(sep(lseg(X, Y), sep(lseg(Y, Z), sep(next(Z, W), Sigma)))) | heap(sep(lseg(X, Z), sep(next(Z, W), Sigma))) )). %----lseg(X, Y) * lseg(Y, Z) * lseg(Z, W) * Sigma --> %---- Z = W, lseg(X, Z) * lseg(Z, W) * Sigma. cnf(unfolding_5,axiom, ( ~ heap(sep(lseg(X, Y), sep(lseg(Y, Z), sep(lseg(Z, W), Sigma)))) | Z = W | heap(sep(lseg(X, Z), sep(lseg(Z, W), Sigma))) )). %------------------------------------------------------------------------------