↑ Up

Drodi---4.1.1.UNS-CRf.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : Drodi---4.1.1
% Problem  : SWC081-1 : TPTP v9.3.1. Released v2.4.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : drodi -timeout(300) /export/starexec/sandbox/benchmark/theBenchmark.p

% Computer : n019.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8046.5625MB
% OS       : Linux 6.8.0-71-generic
% CPULimit : 300s
% WCLimit  : 300s
% DateTime : Thu Sep 24 02:39:53 PM UTC 2026

% Result   : Unsatisfiable 12.69s 2.07s
% Output   : CNFRefutation 12.69s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :    7
%            Number of leaves      :   32
% Syntax   : Number of formulae    :  107 (  21 unt;  16 def)
%            Number of atoms       :  274 (  31 equ)
%            Maximal formula atoms :    6 (   2 avg)
%            Number of connectives :  313 ( 146   ~; 151   |;   0   &)
%                                         (  16 <=>;   0  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   11 (   3 avg)
%            Maximal term depth    :    3 (   1 avg)
%            Number of predicates  :   22 (  20 usr;  17 prp; 0-2 aty)
%            Number of functors    :    8 (   8 usr;   6 con; 0-2 aty)
%            Number of variables   :   41 (  41   !;   0   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(f8,axiom,
    ssList(nil),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f51,axiom,
    ! [U,V] : ssList(skaf45(U,V)),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f74,axiom,
    ! [U] :
      ( app(nil,U) = U
      | ~ ssList(U) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f115,axiom,
    ! [U,V] :
      ( ~ ssList(U)
      | ~ ssList(V)
      | ~ neq(U,V)
      | U != V ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f132,axiom,
    ! [U,V] :
      ( app(V,skaf45(U,V)) = U
      | ~ ssList(U)
      | ~ ssList(V)
      | ~ frontsegP(U,V) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f173,axiom,
    ! [U,V,W,X] :
      ( segmentP(X,V)
      | ~ ssList(X)
      | ~ ssList(V)
      | ~ ssList(U)
      | ~ ssList(W)
      | app(app(U,V),W) != X ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f188,negated_conjecture,
    ssList(sk3),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f189,negated_conjecture,
    ssList(sk4),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f190,negated_conjecture,
    sk2 = sk4,
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f191,negated_conjecture,
    sk1 = sk3,
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f192,negated_conjecture,
    neq(sk2,nil),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f193,negated_conjecture,
    ! [A] :
      ( ~ segmentP(sk1,A)
      | ~ segmentP(sk2,A)
      | ~ neq(A,nil)
      | ~ ssList(A) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f194,negated_conjecture,
    ( nil = sk4
    | ssList(sk5) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f196,negated_conjecture,
    ( nil = sk4
    | neq(sk5,nil) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f197,negated_conjecture,
    ( nil = sk4
    | frontsegP(sk4,sk5) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f198,negated_conjecture,
    ( nil = sk4
    | frontsegP(sk3,sk5) ),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p') ).

fof(f209,plain,
    ssList(nil),
    inference(cnf_transformation,[status(thm)],[f8]) ).

fof(f252,plain,
    ! [X0,X1] : ssList(skaf45(X0,X1)),
    inference(cnf_transformation,[status(thm)],[f51]) ).

fof(f276,plain,
    ! [X0] :
      ( app(nil,X0) = X0
      | ~ ssList(X0) ),
    inference(cnf_transformation,[status(thm)],[f74]) ).

fof(f322,plain,
    ! [U] :
      ( ~ ssList(U)
      | ! [V] :
          ( ~ ssList(V)
          | ~ neq(U,V)
          | U != V ) ),
    inference(miniscoping,[status(thm)],[f115]) ).

fof(f323,plain,
    ! [X0,X1] :
      ( ~ ssList(X0)
      | ~ ssList(X1)
      | ~ neq(X0,X1)
      | X0 != X1 ),
    inference(cnf_transformation,[status(thm)],[f322]) ).

fof(f346,plain,
    ! [X0,X1] :
      ( app(X1,skaf45(X0,X1)) = X0
      | ~ ssList(X0)
      | ~ ssList(X1)
      | ~ frontsegP(X0,X1) ),
    inference(cnf_transformation,[status(thm)],[f132]) ).

fof(f407,plain,
    ! [V,X] :
      ( segmentP(X,V)
      | ~ ssList(X)
      | ~ ssList(V)
      | ! [U] :
          ( ~ ssList(U)
          | ! [W] :
              ( ~ ssList(W)
              | app(app(U,V),W) != X ) ) ),
    inference(miniscoping,[status(thm)],[f173]) ).

fof(f408,plain,
    ! [X0,X1,X2,X3] :
      ( segmentP(X3,X1)
      | ~ ssList(X3)
      | ~ ssList(X1)
      | ~ ssList(X0)
      | ~ ssList(X2)
      | app(app(X0,X1),X2) != X3 ),
    inference(cnf_transformation,[status(thm)],[f407]) ).

fof(f434,plain,
    ssList(sk3),
    inference(cnf_transformation,[status(thm)],[f188]) ).

fof(f435,plain,
    ssList(sk4),
    inference(cnf_transformation,[status(thm)],[f189]) ).

fof(f436,plain,
    sk2 = sk4,
    inference(cnf_transformation,[status(thm)],[f190]) ).

fof(f437,plain,
    sk1 = sk3,
    inference(cnf_transformation,[status(thm)],[f191]) ).

fof(f438,plain,
    neq(sk2,nil),
    inference(cnf_transformation,[status(thm)],[f192]) ).

fof(f439,plain,
    ! [X0] :
      ( ~ segmentP(sk1,X0)
      | ~ segmentP(sk2,X0)
      | ~ neq(X0,nil)
      | ~ ssList(X0) ),
    inference(cnf_transformation,[status(thm)],[f193]) ).

fof(f440,plain,
    ( nil = sk4
    | ssList(sk5) ),
    inference(cnf_transformation,[status(thm)],[f194]) ).

fof(f442,plain,
    ( nil = sk4
    | neq(sk5,nil) ),
    inference(cnf_transformation,[status(thm)],[f196]) ).

fof(f443,plain,
    ( nil = sk4
    | frontsegP(sk4,sk5) ),
    inference(cnf_transformation,[status(thm)],[f197]) ).

fof(f444,plain,
    ( nil = sk4
    | frontsegP(sk3,sk5) ),
    inference(cnf_transformation,[status(thm)],[f198]) ).

fof(f455,definition,
    ( sQ2_spl
  <=> ssList(sk5) ),
    introduced(definition,[new_symbols(definition,[sQ2_spl])],[split_symbol_definition]) ).

fof(f456,plain,
    ( ~ sQ2_spl
    | ssList(sk5) ),
    inference(component_clause,[status(thm)],[f455]) ).

fof(f458,definition,
    ( sQ3_spl
  <=> nil = sk4 ),
    introduced(definition,[new_symbols(definition,[sQ3_spl])],[split_symbol_definition]) ).

fof(f459,plain,
    ( ~ sQ3_spl
    | nil = sk4 ),
    inference(component_clause,[status(thm)],[f458]) ).

fof(f461,plain,
    ( sQ3_spl
    | sQ2_spl ),
    inference(split_clause,[status(thm)],[f440,f455,f458]) ).

fof(f466,definition,
    ( sQ5_spl
  <=> neq(sk5,nil) ),
    introduced(definition,[new_symbols(definition,[sQ5_spl])],[split_symbol_definition]) ).

fof(f469,plain,
    ( sQ3_spl
    | sQ5_spl ),
    inference(split_clause,[status(thm)],[f442,f466,f458]) ).

fof(f470,definition,
    ( sQ6_spl
  <=> frontsegP(sk4,sk5) ),
    introduced(definition,[new_symbols(definition,[sQ6_spl])],[split_symbol_definition]) ).

fof(f471,plain,
    ( ~ sQ6_spl
    | frontsegP(sk4,sk5) ),
    inference(component_clause,[status(thm)],[f470]) ).

fof(f473,plain,
    ( sQ3_spl
    | sQ6_spl ),
    inference(split_clause,[status(thm)],[f443,f470,f458]) ).

fof(f474,definition,
    ( sQ7_spl
  <=> frontsegP(sk3,sk5) ),
    introduced(definition,[new_symbols(definition,[sQ7_spl])],[split_symbol_definition]) ).

fof(f475,plain,
    ( ~ sQ7_spl
    | frontsegP(sk3,sk5) ),
    inference(component_clause,[status(thm)],[f474]) ).

fof(f477,plain,
    ( sQ3_spl
    | sQ7_spl ),
    inference(split_clause,[status(thm)],[f444,f474,f458]) ).

fof(f488,plain,
    ! [X1] :
      ( ~ ssList(X1)
      | ~ ssList(X1)
      | ~ neq(X1,X1) ),
    inference(destructive_equality_resolution,[status(thm)],[f323]) ).

fof(f489,plain,
    ! [X0] :
      ( ~ ssList(X0)
      | ~ neq(X0,X0) ),
    inference(duplicate_literals_removal,[status(thm)],[f488]) ).

fof(f499,plain,
    ! [X0,X1,X2] :
      ( segmentP(app(app(X1,X2),X0),X2)
      | ~ ssList(app(app(X1,X2),X0))
      | ~ ssList(X2)
      | ~ ssList(X1)
      | ~ ssList(X0) ),
    inference(destructive_equality_resolution,[status(thm)],[f408]) ).

fof(f517,definition,
    ( sQ8_spl
  <=> ssList(nil) ),
    introduced(definition,[new_symbols(definition,[sQ8_spl])],[split_symbol_definition]) ).

fof(f519,plain,
    ( sQ8_spl
    | ~ ssList(nil) ),
    inference(component_clause,[status(thm)],[f517]) ).

fof(f525,plain,
    ( sQ8_spl
    | $false ),
    inference(forward_subsumption_resolution,[status(thm)],[f519,f209]) ).

fof(f526,plain,
    sQ8_spl,
    inference(contradiction_clause,[status(thm)],[f525]) ).

fof(f544,plain,
    neq(sk4,nil),
    inference(backward_demodulation,[status(thm)],[f436,f438]) ).

fof(f576,plain,
    ! [X0] :
      ( ~ segmentP(sk1,X0)
      | ~ segmentP(sk4,X0)
      | ~ neq(X0,nil)
      | ~ ssList(X0) ),
    inference(forward_demodulation,[status(thm)],[f436,f439]) ).

fof(f577,plain,
    ! [X0] :
      ( ~ segmentP(sk3,X0)
      | ~ segmentP(sk4,X0)
      | ~ neq(X0,nil)
      | ~ ssList(X0) ),
    inference(forward_demodulation,[status(thm)],[f437,f576]) ).

fof(f586,definition,
    ( sQ15_spl
  <=> ssList(sk4) ),
    introduced(definition,[new_symbols(definition,[sQ15_spl])],[split_symbol_definition]) ).

fof(f588,plain,
    ( sQ15_spl
    | ~ ssList(sk4) ),
    inference(component_clause,[status(thm)],[f586]) ).

fof(f597,plain,
    ( sQ15_spl
    | $false ),
    inference(forward_subsumption_resolution,[status(thm)],[f588,f435]) ).

fof(f598,plain,
    sQ15_spl,
    inference(contradiction_clause,[status(thm)],[f597]) ).

fof(f618,plain,
    ( ~ sQ3_spl
    | neq(nil,nil) ),
    inference(backward_demodulation,[status(thm)],[f459,f544]) ).

fof(f638,plain,
    ( ~ sQ3_spl
    | ~ ssList(nil) ),
    inference(resolution,[status(thm)],[f618,f489]) ).

fof(f643,plain,
    ( ~ sQ3_spl
    | ~ sQ8_spl ),
    inference(split_clause,[status(thm)],[f638,f517,f458]) ).

fof(f709,definition,
    ( sQ31_spl
  <=> ssList(sk3) ),
    introduced(definition,[new_symbols(definition,[sQ31_spl])],[split_symbol_definition]) ).

fof(f711,plain,
    ( sQ31_spl
    | ~ ssList(sk3) ),
    inference(component_clause,[status(thm)],[f709]) ).

fof(f744,plain,
    ( ~ sQ2_spl
    | app(nil,sk5) = sk5 ),
    inference(resolution,[status(thm)],[f456,f276]) ).

fof(f902,plain,
    ! [X0] :
      ( ~ sQ2_spl
      | segmentP(app(app(nil,sk5),X0),sk5)
      | ~ ssList(app(sk5,X0))
      | ~ ssList(sk5)
      | ~ ssList(nil)
      | ~ ssList(X0) ),
    inference(paramodulation,[status(thm)],[f744,f499]) ).

fof(f905,definition,
    ! [X0] :
      ( sQ63_spl
    <=> ( segmentP(app(app(nil,sk5),X0),sk5)
        | ~ ssList(app(sk5,X0))
        | ~ ssList(X0) ) ),
    introduced(definition,[new_symbols(definition,[sQ63_spl])],[split_symbol_definition]) ).

fof(f906,plain,
    ! [X0] :
      ( ~ sQ63_spl
      | segmentP(app(app(nil,sk5),X0),sk5)
      | ~ ssList(app(sk5,X0))
      | ~ ssList(X0) ),
    inference(component_clause,[status(thm)],[f905]) ).

fof(f908,plain,
    ( ~ sQ2_spl
    | ~ sQ8_spl
    | sQ63_spl ),
    inference(split_clause,[status(thm)],[f902,f905,f517,f455]) ).

fof(f917,plain,
    ! [X0] :
      ( ~ sQ63_spl
      | ~ sQ2_spl
      | segmentP(app(sk5,X0),sk5)
      | ~ ssList(app(sk5,X0))
      | ~ ssList(X0) ),
    inference(forward_demodulation,[status(thm)],[f744,f906]) ).

fof(f1022,plain,
    ( sQ31_spl
    | $false ),
    inference(forward_subsumption_resolution,[status(thm)],[f711,f434]) ).

fof(f1023,plain,
    sQ31_spl,
    inference(contradiction_clause,[status(thm)],[f1022]) ).

fof(f3649,plain,
    ( ~ sQ7_spl
    | app(sk5,skaf45(sk3,sk5)) = sk3
    | ~ ssList(sk3)
    | ~ ssList(sk5) ),
    inference(resolution,[status(thm)],[f346,f475]) ).

fof(f3661,plain,
    ( ~ sQ6_spl
    | app(sk5,skaf45(sk4,sk5)) = sk4
    | ~ ssList(sk4)
    | ~ ssList(sk5) ),
    inference(resolution,[status(thm)],[f346,f471]) ).

fof(f3680,definition,
    ( sQ373_spl
  <=> app(sk5,skaf45(sk3,sk5)) = sk3 ),
    introduced(definition,[new_symbols(definition,[sQ373_spl])],[split_symbol_definition]) ).

fof(f3681,plain,
    ( ~ sQ373_spl
    | app(sk5,skaf45(sk3,sk5)) = sk3 ),
    inference(component_clause,[status(thm)],[f3680]) ).

fof(f3683,plain,
    ( ~ sQ7_spl
    | sQ373_spl
    | ~ sQ31_spl
    | ~ sQ2_spl ),
    inference(split_clause,[status(thm)],[f3649,f455,f709,f3680,f474]) ).

fof(f3718,definition,
    ( sQ381_spl
  <=> app(sk5,skaf45(sk4,sk5)) = sk4 ),
    introduced(definition,[new_symbols(definition,[sQ381_spl])],[split_symbol_definition]) ).

fof(f3719,plain,
    ( ~ sQ381_spl
    | app(sk5,skaf45(sk4,sk5)) = sk4 ),
    inference(component_clause,[status(thm)],[f3718]) ).

fof(f3721,plain,
    ( ~ sQ6_spl
    | sQ381_spl
    | ~ sQ15_spl
    | ~ sQ2_spl ),
    inference(split_clause,[status(thm)],[f3661,f455,f586,f3718,f470]) ).

fof(f4204,definition,
    ( sQ434_spl
  <=> ssList(skaf45(sk4,sk5)) ),
    introduced(definition,[new_symbols(definition,[sQ434_spl])],[split_symbol_definition]) ).

fof(f4206,plain,
    ( sQ434_spl
    | ~ ssList(skaf45(sk4,sk5)) ),
    inference(component_clause,[status(thm)],[f4204]) ).

fof(f4234,plain,
    ( sQ434_spl
    | $false ),
    inference(forward_subsumption_resolution,[status(thm)],[f4206,f252]) ).

fof(f4235,plain,
    sQ434_spl,
    inference(contradiction_clause,[status(thm)],[f4234]) ).

fof(f4248,definition,
    ( sQ441_spl
  <=> ssList(skaf45(sk3,sk5)) ),
    introduced(definition,[new_symbols(definition,[sQ441_spl])],[split_symbol_definition]) ).

fof(f4250,plain,
    ( sQ441_spl
    | ~ ssList(skaf45(sk3,sk5)) ),
    inference(component_clause,[status(thm)],[f4248]) ).

fof(f4278,plain,
    ( sQ441_spl
    | $false ),
    inference(forward_subsumption_resolution,[status(thm)],[f4250,f252]) ).

fof(f4279,plain,
    sQ441_spl,
    inference(contradiction_clause,[status(thm)],[f4278]) ).

fof(f4941,plain,
    ( ~ sQ373_spl
    | ~ sQ63_spl
    | ~ sQ2_spl
    | segmentP(app(sk5,skaf45(sk3,sk5)),sk5)
    | ~ ssList(sk3)
    | ~ ssList(skaf45(sk3,sk5)) ),
    inference(paramodulation,[status(thm)],[f3681,f917]) ).

fof(f4942,plain,
    ( ~ sQ381_spl
    | ~ sQ63_spl
    | ~ sQ2_spl
    | segmentP(app(sk5,skaf45(sk4,sk5)),sk5)
    | ~ ssList(sk4)
    | ~ ssList(skaf45(sk4,sk5)) ),
    inference(paramodulation,[status(thm)],[f3719,f917]) ).

fof(f4948,definition,
    ( sQ535_spl
  <=> segmentP(app(sk5,skaf45(sk3,sk5)),sk5) ),
    introduced(definition,[new_symbols(definition,[sQ535_spl])],[split_symbol_definition]) ).

fof(f4949,plain,
    ( ~ sQ535_spl
    | segmentP(app(sk5,skaf45(sk3,sk5)),sk5) ),
    inference(component_clause,[status(thm)],[f4948]) ).

fof(f4951,plain,
    ( ~ sQ373_spl
    | ~ sQ63_spl
    | ~ sQ2_spl
    | sQ535_spl
    | ~ sQ31_spl
    | ~ sQ441_spl ),
    inference(split_clause,[status(thm)],[f4941,f4248,f709,f4948,f455,f905,f3680]) ).

fof(f4952,definition,
    ( sQ536_spl
  <=> segmentP(app(sk5,skaf45(sk4,sk5)),sk5) ),
    introduced(definition,[new_symbols(definition,[sQ536_spl])],[split_symbol_definition]) ).

fof(f4953,plain,
    ( ~ sQ536_spl
    | segmentP(app(sk5,skaf45(sk4,sk5)),sk5) ),
    inference(component_clause,[status(thm)],[f4952]) ).

fof(f4955,plain,
    ( ~ sQ381_spl
    | ~ sQ63_spl
    | ~ sQ2_spl
    | sQ536_spl
    | ~ sQ15_spl
    | ~ sQ434_spl ),
    inference(split_clause,[status(thm)],[f4942,f4204,f586,f4952,f455,f905,f3718]) ).

fof(f4962,plain,
    ( ~ sQ536_spl
    | ~ sQ381_spl
    | segmentP(sk4,sk5) ),
    inference(forward_demodulation,[status(thm)],[f3719,f4953]) ).

fof(f4963,plain,
    ( ~ sQ535_spl
    | ~ sQ373_spl
    | segmentP(sk3,sk5) ),
    inference(forward_demodulation,[status(thm)],[f3681,f4949]) ).

fof(f7843,plain,
    ( ~ sQ535_spl
    | ~ sQ373_spl
    | ~ segmentP(sk4,sk5)
    | ~ neq(sk5,nil)
    | ~ ssList(sk5) ),
    inference(resolution,[status(thm)],[f577,f4963]) ).

fof(f7844,definition,
    ( sQ686_spl
  <=> segmentP(sk4,sk5) ),
    introduced(definition,[new_symbols(definition,[sQ686_spl])],[split_symbol_definition]) ).

fof(f7846,plain,
    ( sQ686_spl
    | ~ segmentP(sk4,sk5) ),
    inference(component_clause,[status(thm)],[f7844]) ).

fof(f7847,plain,
    ( ~ sQ535_spl
    | ~ sQ373_spl
    | ~ sQ686_spl
    | ~ sQ5_spl
    | ~ sQ2_spl ),
    inference(split_clause,[status(thm)],[f7843,f455,f466,f7844,f3680,f4948]) ).

fof(f7848,plain,
    ( sQ686_spl
    | ~ sQ536_spl
    | ~ sQ381_spl
    | $false ),
    inference(forward_subsumption_resolution,[status(thm)],[f7846,f4962]) ).

fof(f7849,plain,
    ( sQ686_spl
    | ~ sQ536_spl
    | ~ sQ381_spl ),
    inference(contradiction_clause,[status(thm)],[f7848]) ).

fof(f7850,plain,
    $false,
    inference(sat_refutation,[status(thm)],[f461,f469,f473,f477,f526,f598,f643,f908,f1023,f3683,f3721,f4235,f4279,f4951,f4955,f7847,f7849]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.02  % Problem  : SWC081-1 : TPTP v9.3.1. Released v2.4.0.
% 0.00/0.03  % Command  : drodi -timeout(300) /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.08/0.35  % Computer : n019.cluster.edu
% 0.08/0.35  % Model    : x86_64 x86_64
% 0.08/0.35  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.08/0.35  % Memory   : 8046.5625MB
% 0.08/0.35  % OS       : Linux 6.8.0-71-generic
% 0.08/0.35  % CPULimit : 300
% 0.08/0.35  % WCLimit  : 300
% 0.08/0.35  % DateTime : Mon Sep 21 07:54:35 UTC 2026
% 0.08/0.35  % CPUTime  : 
% 0.08/0.37  % Drodi V4.1.1
% 12.69/2.07  % Refutation found
% 12.69/2.07  % SZS status Unsatisfiable for theBenchmark: Theory is unsatisfiable
% 12.69/2.07  % SZS output start CNFRefutation for theBenchmark
% See solution above
% 8.79/2.10  % Elapsed time: 1.737280 seconds
% 8.79/2.10  % CPU time: 13.426903 seconds
% 8.79/2.10  % Total memory used: 236.739 MB
% 8.79/2.10  % Net memory used: 223.042 MB
%------------------------------------------------------------------------------