↑ Up

Twee---2.7.UNS-CRf.s

View TPTP
Problem
Process solution in
SystemOnTSTP
Download .tgz
%------------------------------------------------------------------------------
% File     : Twee---2.7
% Problem  : COL044-9 : TPTP v9.3.1. Released v2.1.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_twee /export/starexec/sandbox/benchmark/theBenchmark.p

% Computer : n005.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 : Tue Sep 29 09:37:16 AM UTC 2026

% Result   : Unsatisfiable 36.77s 4.99s
% Output   : CNFRefutation 38.09s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   23
%            Number of leaves      :    4
% Syntax   : Number of clauses     :   70 (  70 unt;   0 nHn;   6 RR)
%            Number of literals    :   70 (  69 equ;   1 neg)
%            Maximal clause size   :    1 (   1 avg)
%            Maximal term depth    :   13 (   2 avg)
%            Number of predicates  :    2 (   0 usr;   1 prp; 0-2 aty)
%            Number of functors    :    5 (   5 usr;   4 con; 0-2 aty)
%            Number of variables   :  119 (   0 sgn)

% Comments : 
%------------------------------------------------------------------------------
cnf(c1,negated_conjecture,
    apply(strong_fixed_point,fixed_pt) != apply(fixed_pt,apply(strong_fixed_point,fixed_pt)),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p',prove_strong_fixed_point) ).

cnf(c2,axiom,
    apply(apply(apply(b,X),Y),Z) = apply(X,apply(Y,Z)),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p',b_definition) ).

cnf(c3,plain,
    apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))) = apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c4,plain,
    apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))),
    inference(symmetry,[status(thm)],[c3]) ).

cnf(c5,plain,
    apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),
    inference(congruence,[status(thm)],[c4]) ).

cnf(c6,axiom,
    apply(apply(apply(n,X2),Y2),Z2) = apply(apply(apply(X2,Z2),Y2),Z2),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p',n_definition) ).

cnf(c7,plain,
    apply(apply(apply(n,apply(n,apply(b,X2))),X4),X3) = apply(apply(apply(apply(n,apply(b,X2)),X3),X4),X3),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c8,plain,
    apply(apply(apply(n,apply(b,X4)),X3),X2) = apply(apply(apply(apply(b,X4),X2),X3),X2),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c9,plain,
    apply(apply(apply(b,X4),X2),X3) = apply(X4,apply(X2,X3)),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c10,plain,
    apply(apply(apply(apply(b,X4),X2),X3),X2) = apply(apply(X4,apply(X2,X3)),X2),
    inference(congruence,[status(thm)],[c9]) ).

cnf(c11,plain,
    apply(apply(apply(n,apply(b,X4)),X3),X2) = apply(apply(X4,apply(X2,X3)),X2),
    inference(transitivity,[status(thm)],[c8,c10]) ).

cnf(c12,plain,
    apply(apply(apply(n,apply(b,X4)),X2),X3) = apply(apply(X4,apply(X3,X2)),X3),
    inference(substitution,[status(thm)],[c11]) ).

cnf(c13,plain,
    apply(apply(apply(apply(n,apply(b,X4)),X2),X3),X2) = apply(apply(apply(X4,apply(X3,X2)),X3),X2),
    inference(congruence,[status(thm)],[c12]) ).

cnf(c14,plain,
    apply(apply(apply(n,apply(n,apply(b,X4))),X3),X2) = apply(apply(apply(X4,apply(X3,X2)),X3),X2),
    inference(transitivity,[status(thm)],[c7,c13]) ).

cnf(c15,plain,
    apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2))) = apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))),
    inference(substitution,[status(thm)],[c14]) ).

cnf(c16,plain,
    apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))) = apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2))),
    inference(symmetry,[status(thm)],[c15]) ).

cnf(c17,plain,
    apply(apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),
    inference(congruence,[status(thm)],[c16]) ).

cnf(c18,plain,
    apply(apply(apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))) = apply(apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c19,plain,
    apply(apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))),
    inference(symmetry,[status(thm)],[c18]) ).

cnf(c20,plain,
    apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))) = apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c21,plain,
    apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))) = apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))),
    inference(symmetry,[status(thm)],[c20]) ).

cnf(c22,plain,
    apply(apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))),n) = apply(apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))),n),
    inference(congruence,[status(thm)],[c21]) ).

cnf(c23,plain,
    apply(apply(apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))) = apply(apply(apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))),n),apply(b,apply(b,X2))),
    inference(congruence,[status(thm)],[c22]) ).

cnf(c24,plain,
    apply(apply(apply(n,apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n))),n),apply(b,apply(b,X2))) = apply(apply(apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))),n),apply(b,apply(b,X2))),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c25,plain,
    apply(apply(apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))),n),apply(b,apply(b,X2))) = apply(apply(apply(n,apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n))),n),apply(b,apply(b,X2))),
    inference(symmetry,[status(thm)],[c24]) ).

cnf(c26,plain,
    apply(apply(apply(n,apply(n,apply(apply(b,X4),X3))),X2),X5) = apply(apply(apply(apply(n,apply(apply(b,X4),X3)),X5),X2),X5),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c27,plain,
    apply(apply(apply(n,apply(apply(b,X5),X4)),X3),X2) = apply(apply(apply(apply(apply(b,X5),X4),X2),X3),X2),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c28,plain,
    apply(apply(apply(b,X4),X3),X2) = apply(X4,apply(X3,X2)),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c29,plain,
    apply(apply(apply(apply(b,X5),X4),X2),X3) = apply(apply(X5,apply(X4,X2)),X3),
    inference(congruence,[status(thm)],[c28]) ).

cnf(c30,plain,
    apply(apply(apply(apply(apply(b,X5),X4),X2),X3),X2) = apply(apply(apply(X5,apply(X4,X2)),X3),X2),
    inference(congruence,[status(thm)],[c29]) ).

cnf(c31,plain,
    apply(apply(apply(n,apply(apply(b,X5),X4)),X3),X2) = apply(apply(apply(X5,apply(X4,X2)),X3),X2),
    inference(transitivity,[status(thm)],[c27,c30]) ).

cnf(c32,plain,
    apply(apply(apply(n,apply(apply(b,X5),X4)),X2),X3) = apply(apply(apply(X5,apply(X4,X3)),X2),X3),
    inference(substitution,[status(thm)],[c31]) ).

cnf(c33,plain,
    apply(apply(apply(apply(n,apply(apply(b,X5),X4)),X2),X3),X2) = apply(apply(apply(apply(X5,apply(X4,X3)),X2),X3),X2),
    inference(congruence,[status(thm)],[c32]) ).

cnf(c34,plain,
    apply(apply(apply(n,apply(X5,apply(X4,X3))),X3),X2) = apply(apply(apply(apply(X5,apply(X4,X3)),X2),X3),X2),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c35,plain,
    apply(apply(apply(apply(X5,apply(X4,X3)),X2),X3),X2) = apply(apply(apply(n,apply(X5,apply(X4,X3))),X3),X2),
    inference(symmetry,[status(thm)],[c34]) ).

cnf(c36,plain,
    apply(apply(apply(apply(n,apply(apply(b,X5),X4)),X2),X3),X2) = apply(apply(apply(n,apply(X5,apply(X4,X3))),X3),X2),
    inference(transitivity,[status(thm)],[c33,c35]) ).

cnf(c37,plain,
    apply(apply(apply(n,apply(n,apply(apply(b,X5),X4))),X3),X2) = apply(apply(apply(n,apply(X5,apply(X4,X3))),X3),X2),
    inference(transitivity,[status(thm)],[c26,c36]) ).

cnf(c38,plain,
    apply(apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n),apply(b,apply(b,X2))) = apply(apply(apply(n,apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n))),n),apply(b,apply(b,X2))),
    inference(substitution,[status(thm)],[c37]) ).

cnf(c39,plain,
    apply(apply(apply(n,apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n))),n),apply(b,apply(b,X2))) = apply(apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n),apply(b,apply(b,X2))),
    inference(symmetry,[status(thm)],[c38]) ).

cnf(c40,plain,
    apply(apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b),apply(b,X2)) = apply(apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n),apply(b,apply(b,X2))),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c41,plain,
    apply(apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n),apply(b,apply(b,X2))) = apply(apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b),apply(b,X2)),
    inference(symmetry,[status(thm)],[c40]) ).

cnf(c42,plain,
    apply(apply(apply(b,apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b)),b),X2) = apply(apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b),apply(b,X2)),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c43,plain,
    apply(apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b),apply(b,X2)) = apply(apply(apply(b,apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b)),b),X2),
    inference(symmetry,[status(thm)],[c42]) ).

cnf(c44,axiom,
    strong_fixed_point = apply(apply(b,apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b)),b),
    file('/export/starexec/sandbox/benchmark/theBenchmark.p',step) ).

cnf(c45,plain,
    apply(apply(b,apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b)),b) = strong_fixed_point,
    inference(symmetry,[status(thm)],[c44]) ).

cnf(c46,plain,
    apply(apply(apply(b,apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b)),b),X2) = apply(strong_fixed_point,X2),
    inference(congruence,[status(thm)],[c45]) ).

cnf(c47,plain,
    apply(apply(apply(b,apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n)),b),apply(b,X2)) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c43,c46]) ).

cnf(c48,plain,
    apply(apply(apply(n,apply(n,apply(apply(b,apply(b,b)),apply(n,apply(n,apply(b,b)))))),n),apply(b,apply(b,X2))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c41,c47]) ).

cnf(c49,plain,
    apply(apply(apply(n,apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n))),n),apply(b,apply(b,X2))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c39,c48]) ).

cnf(c50,plain,
    apply(apply(apply(apply(apply(b,b),apply(apply(n,apply(n,apply(b,b))),n)),apply(b,apply(b,X2))),n),apply(b,apply(b,X2))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c25,c49]) ).

cnf(c51,plain,
    apply(apply(apply(b,apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c23,c50]) ).

cnf(c52,plain,
    apply(apply(apply(apply(n,apply(n,apply(b,b))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c19,c51]) ).

cnf(c53,plain,
    apply(apply(apply(apply(b,apply(n,apply(b,apply(b,X2)))),n),apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c17,c52]) ).

cnf(c54,plain,
    apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c5,c53]) ).

cnf(c55,plain,
    apply(strong_fixed_point,X2) = apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),
    inference(symmetry,[status(thm)],[c54]) ).

cnf(c56,plain,
    apply(X2,apply(strong_fixed_point,X2)) = apply(X2,apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2))))),
    inference(congruence,[status(thm)],[c55]) ).

cnf(c57,plain,
    apply(apply(apply(b,X2),apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2))))),apply(n,apply(b,apply(b,X2)))) = apply(X2,apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2))))),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c58,plain,
    apply(X2,apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2))))) = apply(apply(apply(b,X2),apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2))))),apply(n,apply(b,apply(b,X2)))),
    inference(symmetry,[status(thm)],[c57]) ).

cnf(c59,plain,
    apply(apply(apply(b,apply(b,X2)),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))) = apply(apply(b,X2),apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2))))),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c60,plain,
    apply(apply(b,X2),apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2))))) = apply(apply(apply(b,apply(b,X2)),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),
    inference(symmetry,[status(thm)],[c59]) ).

cnf(c61,plain,
    apply(apply(apply(b,X2),apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2))))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(apply(b,apply(b,X2)),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),
    inference(congruence,[status(thm)],[c60]) ).

cnf(c62,plain,
    apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(apply(b,apply(b,X2)),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),
    inference(substitution,[status(thm)],[c6]) ).

cnf(c63,plain,
    apply(apply(apply(apply(b,apply(b,X2)),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))) = apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),
    inference(symmetry,[status(thm)],[c62]) ).

cnf(c64,plain,
    apply(apply(apply(apply(b,apply(b,X2)),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2)))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c63,c54]) ).

cnf(c65,plain,
    apply(apply(apply(b,X2),apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2))))),apply(n,apply(b,apply(b,X2)))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c61,c64]) ).

cnf(c66,plain,
    apply(X2,apply(apply(apply(n,apply(b,apply(b,X2))),apply(n,apply(b,apply(b,X2)))),apply(n,apply(b,apply(b,X2))))) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c58,c65]) ).

cnf(c67,plain,
    apply(X2,apply(strong_fixed_point,X2)) = apply(strong_fixed_point,X2),
    inference(transitivity,[status(thm)],[c56,c66]) ).

cnf(c68,plain,
    apply(fixed_pt,apply(strong_fixed_point,fixed_pt)) = apply(strong_fixed_point,fixed_pt),
    inference(substitution,[status(thm)],[c67]) ).

cnf(c69,plain,
    apply(strong_fixed_point,fixed_pt) = apply(fixed_pt,apply(strong_fixed_point,fixed_pt)),
    inference(symmetry,[status(thm)],[c68]) ).

cnf(c70,plain,
    $false,
    inference(resolution,[status(thm)],[c1,c69]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.03  % Problem  : COL044-9 : TPTP v9.3.1. Released v2.1.0.
% 0.00/0.04  % Command  : run_twee /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.08/0.17  % Computer : n005.cluster.edu
% 0.08/0.17  % Model    : x86_64 x86_64
% 0.08/0.17  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.08/0.17  % Memory   : 8046.5625MB
% 0.08/0.17  % OS       : Linux 6.8.0-71-generic
% 0.08/0.17  % CPULimit : 300
% 0.08/0.17  % WCLimit  : 300
% 0.08/0.17  % DateTime : Mon Sep 28 21:30:46 UTC 2026
% 0.08/0.18  % CPUTime  : 
% 0.08/0.18  Running run_twee /export/starexec/sandbox/benchmark/theBenchmark.p
% 36.77/4.99  Command-line arguments: --lhs-weight 1 --flip-ordering --normalise-queue-percent 10 --cp-renormalise-threshold 10 --complete-subsets --ground-joining-incomplete-limit 15 --flatten-every 2
% 36.77/4.99  
% 36.77/4.99  % SZS status Unsatisfiable
% 36.77/4.99  
% 36.77/5.00  % SZS output start CNFRefutation
% See solution above
% 38.09/5.10  
% 38.09/5.10  RESULT: Unsatisfiable (the axioms are contradictory).
%------------------------------------------------------------------------------