## TPTP Axioms File: SWV013-0.ax

```%------------------------------------------------------------------------------
% File     : SWV013-0 : TPTP v7.5.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      :

%------------------------------------------------------------------------------
%----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))) )).

%------------------------------------------------------------------------------
```