↑ Up

Twee---2.7.UNS-CRf.s

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

% Computer : n001.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 11:42:53 AM UTC 2026

% Result   : Unsatisfiable 0.72s 0.53s
% Output   : CNFRefutation 0.72s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   25
%            Number of leaves      :    8
% Syntax   : Number of clauses     :  125 ( 125 unt;   0 nHn;   3 RR)
%            Number of literals    :  125 ( 124 equ;   1 neg)
%            Maximal clause size   :    1 (   1 avg)
%            Maximal term depth    :    6 (   2 avg)
%            Number of predicates  :    2 (   0 usr;   1 prp; 0-2 aty)
%            Number of functors    :    5 (   5 usr;   3 con; 0-2 aty)
%            Number of variables   :  321 (  32 sgn)

% Comments : 
%------------------------------------------------------------------------------
cnf(c1,negated_conjecture,
    join(a,meet(b,join(a,c))) != meet(join(a,b),join(a,c)),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',prove_modular_law) ).

cnf(c2,axiom,
    join(X,Y) = join(Y,X),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',commutativity_of_join) ).

cnf(c3,plain,
    join(join(X2,X3),X3) = join(X3,join(X2,X3)),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c4,plain,
    join(X3,join(X2,X3)) = join(join(X2,X3),X3),
    inference(symmetry,[status(thm)],[c3]) ).

cnf(c5,plain,
    join(X2,X3) = join(X3,X2),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c6,plain,
    meet(X3,join(X2,X3)) = meet(X3,join(X3,X2)),
    inference(congruence,[status(thm)],[c5]) ).

cnf(c7,axiom,
    meet(X2,join(X2,Y2)) = X2,
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',absorption1) ).

cnf(c8,plain,
    meet(X3,join(X3,X2)) = X3,
    inference(substitution,[status(thm)],[c7]) ).

cnf(c9,plain,
    meet(X3,join(X2,X3)) = X3,
    inference(transitivity,[status(thm)],[c6,c8]) ).

cnf(c10,plain,
    X3 = meet(X3,join(X2,X3)),
    inference(symmetry,[status(thm)],[c9]) ).

cnf(c11,plain,
    join(join(X2,X3),X3) = join(join(X2,X3),meet(X3,join(X2,X3))),
    inference(congruence,[status(thm)],[c10]) ).

cnf(c12,axiom,
    meet(X2,Y2) = meet(Y2,X2),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',commutativity_of_meet) ).

cnf(c13,plain,
    meet(X3,X2) = meet(X2,X3),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c14,plain,
    meet(X2,X3) = meet(X3,X2),
    inference(symmetry,[status(thm)],[c13]) ).

cnf(c15,plain,
    join(X3,meet(X2,X3)) = join(X3,meet(X3,X2)),
    inference(congruence,[status(thm)],[c14]) ).

cnf(c16,axiom,
    join(X2,meet(X2,Y2)) = X2,
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',absorption2) ).

cnf(c17,plain,
    join(X3,meet(X3,X2)) = X3,
    inference(substitution,[status(thm)],[c16]) ).

cnf(c18,plain,
    join(X3,meet(X2,X3)) = X3,
    inference(transitivity,[status(thm)],[c15,c17]) ).

cnf(c19,plain,
    join(join(X2,X3),meet(X3,join(X2,X3))) = join(X2,X3),
    inference(substitution,[status(thm)],[c18]) ).

cnf(c20,plain,
    join(join(X2,X3),X3) = join(X2,X3),
    inference(transitivity,[status(thm)],[c11,c19]) ).

cnf(c21,plain,
    join(X3,join(X2,X3)) = join(X2,X3),
    inference(transitivity,[status(thm)],[c4,c20]) ).

cnf(c22,plain,
    join(meet(X2,join(X3,X4)),join(X3,meet(X2,join(X3,X4)))) = join(X3,meet(X2,join(X3,X4))),
    inference(substitution,[status(thm)],[c21]) ).

cnf(c23,plain,
    join(X4,meet(X3,join(X4,X2))) = join(meet(X3,join(X4,X2)),join(X4,meet(X3,join(X4,X2)))),
    inference(symmetry,[status(thm)],[c22]) ).

cnf(c24,plain,
    join(X2,join(X4,meet(X3,join(X4,X2)))) = join(join(X4,meet(X3,join(X4,X2))),X2),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c25,plain,
    join(join(X4,meet(X3,join(X4,X2))),X2) = join(X2,join(X4,meet(X3,join(X4,X2)))),
    inference(symmetry,[status(thm)],[c24]) ).

cnf(c26,plain,
    join(X4,meet(X3,join(X4,X2))) = join(meet(X3,join(X4,X2)),X4),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c27,plain,
    join(X2,join(X4,meet(X3,join(X4,X2)))) = join(X2,join(meet(X3,join(X4,X2)),X4)),
    inference(congruence,[status(thm)],[c26]) ).

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

cnf(c29,plain,
    join(X3,join(X2,X4)) = join(join(X2,X4),X3),
    inference(symmetry,[status(thm)],[c28]) ).

cnf(c30,plain,
    join(X2,X3) = join(X3,X2),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c31,plain,
    join(join(X2,X4),X3) = join(join(X4,X2),X3),
    inference(congruence,[status(thm)],[c30]) ).

cnf(c32,axiom,
    join(join(X2,Y2),Z) = join(X2,join(Y2,Z)),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',associativity_of_join) ).

cnf(c33,plain,
    join(join(X4,X2),X3) = join(X4,join(X2,X3)),
    inference(substitution,[status(thm)],[c32]) ).

cnf(c34,plain,
    join(X2,X3) = join(X3,X2),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c35,plain,
    join(X4,join(X2,X3)) = join(X4,join(X3,X2)),
    inference(congruence,[status(thm)],[c34]) ).

cnf(c36,plain,
    join(join(X4,X2),X3) = join(X4,join(X3,X2)),
    inference(transitivity,[status(thm)],[c33,c35]) ).

cnf(c37,plain,
    join(join(X2,X4),X3) = join(X4,join(X3,X2)),
    inference(transitivity,[status(thm)],[c31,c36]) ).

cnf(c38,plain,
    join(X3,join(X2,X4)) = join(X4,join(X3,X2)),
    inference(transitivity,[status(thm)],[c29,c37]) ).

cnf(c39,plain,
    join(meet(X3,join(X4,X2)),join(X4,X2)) = join(X2,join(meet(X3,join(X4,X2)),X4)),
    inference(substitution,[status(thm)],[c38]) ).

cnf(c40,plain,
    join(X2,join(meet(X3,join(X4,X2)),X4)) = join(meet(X3,join(X4,X2)),join(X4,X2)),
    inference(symmetry,[status(thm)],[c39]) ).

cnf(c41,plain,
    join(X2,meet(X3,X2)) = join(meet(X3,X2),X2),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c42,plain,
    join(meet(X3,X2),X2) = join(X2,meet(X3,X2)),
    inference(symmetry,[status(thm)],[c41]) ).

cnf(c43,plain,
    meet(X3,X2) = meet(X2,X3),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c44,plain,
    join(X2,meet(X3,X2)) = join(X2,meet(X2,X3)),
    inference(congruence,[status(thm)],[c43]) ).

cnf(c45,plain,
    join(X2,meet(X2,X3)) = X2,
    inference(substitution,[status(thm)],[c16]) ).

cnf(c46,plain,
    join(X2,meet(X3,X2)) = X2,
    inference(transitivity,[status(thm)],[c44,c45]) ).

cnf(c47,plain,
    join(meet(X3,X2),X2) = X2,
    inference(transitivity,[status(thm)],[c42,c46]) ).

cnf(c48,plain,
    join(meet(X3,join(X4,X2)),join(X4,X2)) = join(X4,X2),
    inference(substitution,[status(thm)],[c47]) ).

cnf(c49,plain,
    join(X2,join(meet(X3,join(X4,X2)),X4)) = join(X4,X2),
    inference(transitivity,[status(thm)],[c40,c48]) ).

cnf(c50,plain,
    join(X2,join(X4,meet(X3,join(X4,X2)))) = join(X4,X2),
    inference(transitivity,[status(thm)],[c27,c49]) ).

cnf(c51,plain,
    join(join(X4,meet(X3,join(X4,X2))),X2) = join(X4,X2),
    inference(transitivity,[status(thm)],[c25,c50]) ).

cnf(c52,plain,
    join(X4,X2) = join(join(X4,meet(X3,join(X4,X2))),X2),
    inference(symmetry,[status(thm)],[c51]) ).

cnf(c53,plain,
    meet(join(X4,meet(X3,join(X4,X2))),join(X4,X2)) = meet(join(X4,meet(X3,join(X4,X2))),join(join(X4,meet(X3,join(X4,X2))),X2)),
    inference(congruence,[status(thm)],[c52]) ).

cnf(c54,plain,
    meet(join(X4,meet(X3,join(X4,X2))),join(join(X4,meet(X3,join(X4,X2))),X2)) = join(X4,meet(X3,join(X4,X2))),
    inference(substitution,[status(thm)],[c7]) ).

cnf(c55,plain,
    meet(join(X4,meet(X3,join(X4,X2))),join(X4,X2)) = join(X4,meet(X3,join(X4,X2))),
    inference(transitivity,[status(thm)],[c53,c54]) ).

cnf(c56,plain,
    join(X4,meet(X3,join(X4,X2))) = meet(join(X4,meet(X3,join(X4,X2))),join(X4,X2)),
    inference(symmetry,[status(thm)],[c55]) ).

cnf(c57,plain,
    join(meet(X3,join(X4,X2)),join(X4,meet(X3,join(X4,X2)))) = join(meet(X3,join(X4,X2)),meet(join(X4,meet(X3,join(X4,X2))),join(X4,X2))),
    inference(congruence,[status(thm)],[c56]) ).

cnf(c58,plain,
    meet(X3,X2) = meet(X2,X3),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c59,plain,
    meet(X2,X3) = meet(X3,X2),
    inference(symmetry,[status(thm)],[c58]) ).

cnf(c60,plain,
    join(meet(X4,X3),meet(X2,X3)) = join(meet(X4,X3),meet(X3,X2)),
    inference(congruence,[status(thm)],[c59]) ).

cnf(c61,plain,
    meet(X3,X2) = meet(X2,X3),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c62,plain,
    join(meet(X4,X3),meet(X3,X2)) = join(meet(X3,X4),meet(X3,X2)),
    inference(congruence,[status(thm)],[c61]) ).

cnf(c63,axiom,
    meet(X2,join(Y2,Z2)) = join(meet(X2,Y2),meet(X2,Z2)),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',distributivity) ).

cnf(c64,plain,
    meet(X3,join(X4,X2)) = join(meet(X3,X4),meet(X3,X2)),
    inference(substitution,[status(thm)],[c63]) ).

cnf(c65,plain,
    join(meet(X3,X4),meet(X3,X2)) = meet(X3,join(X4,X2)),
    inference(symmetry,[status(thm)],[c64]) ).

cnf(c66,plain,
    join(X3,X2) = join(X2,X3),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c67,plain,
    meet(X3,join(X4,X2)) = meet(X3,join(X2,X4)),
    inference(congruence,[status(thm)],[c66]) ).

cnf(c68,plain,
    join(meet(X3,X4),meet(X3,X2)) = meet(X3,join(X2,X4)),
    inference(transitivity,[status(thm)],[c65,c67]) ).

cnf(c69,plain,
    join(meet(X4,X3),meet(X3,X2)) = meet(X3,join(X2,X4)),
    inference(transitivity,[status(thm)],[c62,c68]) ).

cnf(c70,plain,
    join(meet(X4,X3),meet(X2,X3)) = meet(X3,join(X2,X4)),
    inference(transitivity,[status(thm)],[c60,c69]) ).

cnf(c71,plain,
    join(meet(X3,join(X4,X2)),meet(join(X4,meet(X3,join(X4,X2))),join(X4,X2))) = meet(join(X4,X2),join(join(X4,meet(X3,join(X4,X2))),X3)),
    inference(substitution,[status(thm)],[c70]) ).

cnf(c72,plain,
    join(X3,join(X4,meet(X3,X2))) = join(join(X4,meet(X3,X2)),X3),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c73,plain,
    join(join(X4,meet(X3,X2)),X3) = join(X3,join(X4,meet(X3,X2))),
    inference(symmetry,[status(thm)],[c72]) ).

cnf(c74,plain,
    join(X4,meet(X3,X2)) = join(meet(X3,X2),X4),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c75,plain,
    join(X3,join(X4,meet(X3,X2))) = join(X3,join(meet(X3,X2),X4)),
    inference(congruence,[status(thm)],[c74]) ).

cnf(c76,plain,
    join(meet(X3,X2),join(X4,X3)) = join(X3,join(meet(X3,X2),X4)),
    inference(substitution,[status(thm)],[c38]) ).

cnf(c77,plain,
    join(X3,join(meet(X3,X2),X4)) = join(meet(X3,X2),join(X4,X3)),
    inference(symmetry,[status(thm)],[c76]) ).

cnf(c78,plain,
    join(join(X2,X4),meet(X4,X3)) = join(meet(X4,X3),join(X2,X4)),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c79,plain,
    join(meet(X4,X3),join(X2,X4)) = join(join(X2,X4),meet(X4,X3)),
    inference(symmetry,[status(thm)],[c78]) ).

cnf(c80,plain,
    meet(join(X2,X4),meet(X4,X3)) = meet(meet(X4,X3),join(X2,X4)),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c81,plain,
    meet(meet(X4,X3),join(X2,X4)) = meet(join(X2,X4),meet(X4,X3)),
    inference(symmetry,[status(thm)],[c80]) ).

cnf(c82,plain,
    meet(meet(X2,X4),X3) = meet(X3,meet(X2,X4)),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c83,plain,
    meet(X3,meet(X2,X4)) = meet(meet(X2,X4),X3),
    inference(symmetry,[status(thm)],[c82]) ).

cnf(c84,plain,
    meet(X2,X3) = meet(X3,X2),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c85,plain,
    meet(meet(X2,X4),X3) = meet(meet(X4,X2),X3),
    inference(congruence,[status(thm)],[c84]) ).

cnf(c86,axiom,
    meet(meet(X2,Y2),Z2) = meet(X2,meet(Y2,Z2)),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',associativity_of_meet) ).

cnf(c87,plain,
    meet(meet(X4,X2),X3) = meet(X4,meet(X2,X3)),
    inference(substitution,[status(thm)],[c86]) ).

cnf(c88,plain,
    meet(X2,X3) = meet(X3,X2),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c89,plain,
    meet(X4,meet(X2,X3)) = meet(X4,meet(X3,X2)),
    inference(congruence,[status(thm)],[c88]) ).

cnf(c90,plain,
    meet(meet(X4,X2),X3) = meet(X4,meet(X3,X2)),
    inference(transitivity,[status(thm)],[c87,c89]) ).

cnf(c91,plain,
    meet(meet(X2,X4),X3) = meet(X4,meet(X3,X2)),
    inference(transitivity,[status(thm)],[c85,c90]) ).

cnf(c92,plain,
    meet(X3,meet(X2,X4)) = meet(X4,meet(X3,X2)),
    inference(transitivity,[status(thm)],[c83,c91]) ).

cnf(c93,plain,
    meet(join(X2,X4),meet(X4,X3)) = meet(X3,meet(join(X2,X4),X4)),
    inference(substitution,[status(thm)],[c92]) ).

cnf(c94,plain,
    meet(X2,join(X3,X2)) = meet(join(X3,X2),X2),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c95,plain,
    meet(join(X3,X2),X2) = meet(X2,join(X3,X2)),
    inference(symmetry,[status(thm)],[c94]) ).

cnf(c96,plain,
    join(X3,X2) = join(X2,X3),
    inference(substitution,[status(thm)],[c2]) ).

cnf(c97,plain,
    meet(X2,join(X3,X2)) = meet(X2,join(X2,X3)),
    inference(congruence,[status(thm)],[c96]) ).

cnf(c98,plain,
    meet(X2,join(X2,X3)) = X2,
    inference(substitution,[status(thm)],[c7]) ).

cnf(c99,plain,
    meet(X2,join(X3,X2)) = X2,
    inference(transitivity,[status(thm)],[c97,c98]) ).

cnf(c100,plain,
    meet(join(X3,X2),X2) = X2,
    inference(transitivity,[status(thm)],[c95,c99]) ).

cnf(c101,plain,
    meet(join(X2,X3),X3) = X3,
    inference(substitution,[status(thm)],[c100]) ).

cnf(c102,plain,
    meet(X3,meet(join(X2,X4),X4)) = meet(X3,X4),
    inference(congruence,[status(thm)],[c101]) ).

cnf(c103,plain,
    meet(X3,X2) = meet(X2,X3),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c104,plain,
    meet(X2,X3) = meet(X3,X2),
    inference(symmetry,[status(thm)],[c103]) ).

cnf(c105,plain,
    meet(X3,meet(join(X2,X4),X4)) = meet(X4,X3),
    inference(transitivity,[status(thm)],[c102,c104]) ).

cnf(c106,plain,
    meet(join(X2,X4),meet(X4,X3)) = meet(X4,X3),
    inference(transitivity,[status(thm)],[c93,c105]) ).

cnf(c107,plain,
    meet(meet(X4,X3),join(X2,X4)) = meet(X4,X3),
    inference(transitivity,[status(thm)],[c81,c106]) ).

cnf(c108,plain,
    meet(X4,X3) = meet(meet(X4,X3),join(X2,X4)),
    inference(symmetry,[status(thm)],[c107]) ).

cnf(c109,plain,
    join(join(X2,X4),meet(X4,X3)) = join(join(X2,X4),meet(meet(X4,X3),join(X2,X4))),
    inference(congruence,[status(thm)],[c108]) ).

cnf(c110,plain,
    join(join(X2,X4),meet(meet(X4,X3),join(X2,X4))) = join(X2,X4),
    inference(substitution,[status(thm)],[c18]) ).

cnf(c111,plain,
    join(join(X2,X4),meet(X4,X3)) = join(X2,X4),
    inference(transitivity,[status(thm)],[c109,c110]) ).

cnf(c112,plain,
    join(meet(X4,X3),join(X2,X4)) = join(X2,X4),
    inference(transitivity,[status(thm)],[c79,c111]) ).

cnf(c113,plain,
    join(meet(X3,X2),join(X4,X3)) = join(X4,X3),
    inference(substitution,[status(thm)],[c112]) ).

cnf(c114,plain,
    join(X3,join(meet(X3,X2),X4)) = join(X4,X3),
    inference(transitivity,[status(thm)],[c77,c113]) ).

cnf(c115,plain,
    join(X3,join(X4,meet(X3,X2))) = join(X4,X3),
    inference(transitivity,[status(thm)],[c75,c114]) ).

cnf(c116,plain,
    join(join(X4,meet(X3,X2)),X3) = join(X4,X3),
    inference(transitivity,[status(thm)],[c73,c115]) ).

cnf(c117,plain,
    join(join(X4,meet(X3,join(X4,X2))),X3) = join(X4,X3),
    inference(substitution,[status(thm)],[c116]) ).

cnf(c118,plain,
    meet(join(X4,X2),join(join(X4,meet(X3,join(X4,X2))),X3)) = meet(join(X4,X2),join(X4,X3)),
    inference(congruence,[status(thm)],[c117]) ).

cnf(c119,plain,
    meet(join(X4,X2),join(X4,X3)) = meet(join(X4,X3),join(X4,X2)),
    inference(substitution,[status(thm)],[c12]) ).

cnf(c120,plain,
    meet(join(X4,X2),join(join(X4,meet(X3,join(X4,X2))),X3)) = meet(join(X4,X3),join(X4,X2)),
    inference(transitivity,[status(thm)],[c118,c119]) ).

cnf(c121,plain,
    join(meet(X3,join(X4,X2)),meet(join(X4,meet(X3,join(X4,X2))),join(X4,X2))) = meet(join(X4,X3),join(X4,X2)),
    inference(transitivity,[status(thm)],[c71,c120]) ).

cnf(c122,plain,
    join(meet(X3,join(X4,X2)),join(X4,meet(X3,join(X4,X2)))) = meet(join(X4,X3),join(X4,X2)),
    inference(transitivity,[status(thm)],[c57,c121]) ).

cnf(c123,plain,
    join(X4,meet(X3,join(X4,X2))) = meet(join(X4,X3),join(X4,X2)),
    inference(transitivity,[status(thm)],[c23,c122]) ).

cnf(c124,plain,
    join(a,meet(b,join(a,c))) = meet(join(a,b),join(a,c)),
    inference(substitution,[status(thm)],[c123]) ).

cnf(c125,plain,
    $false,
    inference(resolution,[status(thm)],[c1,c124]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.02  % Problem  : LAT042-1 : TPTP v9.3.1. Released v2.5.0.
% 0.00/0.03  % Command  : run_twee /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.08/0.36  % Computer : n001.cluster.edu
% 0.08/0.36  % Model    : x86_64 x86_64
% 0.08/0.36  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.08/0.36  % Memory   : 8046.5625MB
% 0.08/0.36  % OS       : Linux 6.8.0-71-generic
% 0.08/0.36  % CPULimit : 300
% 0.08/0.36  % WCLimit  : 300
% 0.08/0.36  % DateTime : Sun Sep 27 14:03:45 UTC 2026
% 0.08/0.36  % CPUTime  : 
% 0.08/0.36  Running run_twee /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.72/0.53  Command-line arguments: --flatten --complete-subsets
% 0.72/0.53  
% 0.72/0.53  % SZS status Unsatisfiable
% 0.72/0.53  
% 0.72/0.53  % SZS output start CNFRefutation
% See solution above
% 0.72/0.56  
% 0.72/0.56  RESULT: Unsatisfiable (the axioms are contradictory).
%------------------------------------------------------------------------------