TPTP Axioms File: SWV013-0.ax
%------------------------------------------------------------------------------
% File : SWV013-0 : TPTP v9.0.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 ( 4 unt; 3 nHn; 9 RR)
% Number of literals : 21 ( 8 equ; 9 neg)
% Maximal clause size : 3 ( 1 avg)
% Maximal term depth : 5 ( 2 avg)
% Number of predicates : 2 ( 1 usr; 0 prp; 1-2 aty)
% Number of functors : 4 ( 4 usr; 1 con; 0-2 aty)
% Number of variables : 38 ( 9 sgn)
% 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))) ) ).
%------------------------------------------------------------------------------