TSTP Solution File: GRP183-2 by Etableau---0.67

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Etableau---0.67
% Problem  : GRP183-2 : TPTP v8.1.0. Bugfixed v1.2.1.
% Transfm  : none
% Format   : tptp:raw
% Command  : etableau --auto --tsmdo --quicksat=10000 --tableau=1 --tableau-saturation=1 -s -p --tableau-cores=8 --cpu-limit=%d %s

% Computer : n032.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8042.1875MB
% OS       : Linux 3.10.0-693.el7.x86_64
% CPULimit : 300s
% WCLimit  : 600s
% DateTime : Sat Jul 16 09:05:18 EDT 2022

% Result   : Unsatisfiable 12.38s 1.93s
% Output   : CNFRefutation 12.38s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.06/0.11  % Problem  : GRP183-2 : TPTP v8.1.0. Bugfixed v1.2.1.
% 0.06/0.11  % Command  : etableau --auto --tsmdo --quicksat=10000 --tableau=1 --tableau-saturation=1 -s -p --tableau-cores=8 --cpu-limit=%d %s
% 0.11/0.30  % Computer : n032.cluster.edu
% 0.11/0.30  % Model    : x86_64 x86_64
% 0.11/0.30  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.11/0.30  % Memory   : 8042.1875MB
% 0.11/0.30  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.11/0.30  % CPULimit : 300
% 0.11/0.30  % WCLimit  : 600
% 0.11/0.30  % DateTime : Mon Jun 13 10:30:41 EDT 2022
% 0.11/0.30  % CPUTime  : 
% 0.15/0.33  # No SInE strategy applied
% 0.15/0.33  # Auto-Mode selected heuristic H_____047_C09_12_F1_AE_ND_CS_SP_S5PRR_S2S
% 0.15/0.33  # and selection function SelectNewComplexAHP.
% 0.15/0.33  #
% 0.15/0.33  # Presaturation interreduction done
% 0.15/0.33  # Number of axioms: 19 Number of unprocessed: 19
% 0.15/0.33  # Tableaux proof search.
% 0.15/0.33  # APR header successfully linked.
% 0.15/0.33  # Hello from C++
% 0.15/0.33  # The folding up rule is enabled...
% 0.15/0.33  # Local unification is enabled...
% 0.15/0.33  # Any saturation attempts will use folding labels...
% 0.15/0.33  # 19 beginning clauses after preprocessing and clausification
% 0.15/0.33  # Creating start rules for all 1 conjectures.
% 0.15/0.33  # There are 1 start rule candidates:
% 0.15/0.33  # Found 19 unit axioms.
% 0.15/0.33  # 1 start rule tableaux created.
% 0.15/0.33  # 0 extension rule candidate clauses
% 0.15/0.33  # 19 unit axiom clauses
% 0.15/0.33  
% 0.15/0.33  # Requested 8, 32 cores available to the main process.
% 0.15/0.33  # There are not enough tableaux to fork, creating more from the initial 1
% 0.15/0.33  # Creating equality axioms
% 0.15/0.33  # Ran out of tableaux, making start rules for all clauses
% 0.15/0.33  # Returning from population with 28 new_tableaux and 0 remaining starting tableaux.
% 0.15/0.33  # We now have 28 tableaux to operate on
% 12.38/1.93  # There were 1 total branch saturation attempts.
% 12.38/1.93  # There were 0 of these attempts blocked.
% 12.38/1.93  # There were 0 deferred branch saturation attempts.
% 12.38/1.93  # There were 0 free duplicated saturations.
% 12.38/1.93  # There were 1 total successful branch saturations.
% 12.38/1.93  # There were 0 successful branch saturations in interreduction.
% 12.38/1.93  # There were 0 successful branch saturations on the branch.
% 12.38/1.93  # There were 1 successful branch saturations after the branch.
% 12.38/1.93  # SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # SZS output start for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # Begin clausification derivation
% 12.38/1.93  
% 12.38/1.93  # End clausification derivation
% 12.38/1.93  # Begin listing active clauses obtained from FOF to CNF conversion
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity)).
% 12.38/1.93  cnf(i_0_36, hypothesis, (inverse(inverse(X1))=X1)).
% 12.38/1.93  cnf(i_0_20, plain, (multiply(identity,X1)=X1)).
% 12.38/1.93  cnf(i_0_28, plain, (greatest_lower_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_27, plain, (least_upper_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_21, plain, (multiply(inverse(X1),X1)=identity)).
% 12.38/1.93  cnf(i_0_30, plain, (greatest_lower_bound(X1,least_upper_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_29, plain, (least_upper_bound(X1,greatest_lower_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_25, plain, (greatest_lower_bound(greatest_lower_bound(X1,X2),X3)=greatest_lower_bound(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_26, plain, (least_upper_bound(least_upper_bound(X1,X2),X3)=least_upper_bound(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_22, plain, (multiply(multiply(X1,X2),X3)=multiply(X1,multiply(X2,X3)))).
% 12.38/1.93  cnf(i_0_37, hypothesis, (multiply(inverse(X1),inverse(X2))=inverse(multiply(X2,X1)))).
% 12.38/1.93  cnf(i_0_32, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_31, plain, (least_upper_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_34, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X3,X2))=multiply(greatest_lower_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_33, plain, (least_upper_bound(multiply(X1,X2),multiply(X3,X2))=multiply(least_upper_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_23, plain, (greatest_lower_bound(X1,X2)=greatest_lower_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_24, plain, (least_upper_bound(X1,X2)=least_upper_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_38, negated_conjecture, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))!=identity)).
% 12.38/1.93  cnf(i_0_40, plain, (X4=X4)).
% 12.38/1.93  # End listing active clauses.  There is an equivalent clause to each of these in the clausification!
% 12.38/1.93  # Begin printing tableau
% 12.38/1.93  # Found 6 steps
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity), inference(start_rule)).
% 12.38/1.93  cnf(i_0_48, plain, (inverse(identity)=identity), inference(extension_rule, [i_0_47])).
% 12.38/1.93  cnf(i_0_84, plain, (inverse(identity)!=identity), inference(closure_rule, [i_0_35])).
% 12.38/1.93  cnf(i_0_83, plain, (least_upper_bound(inverse(identity),inverse(identity))=least_upper_bound(identity,identity)), inference(extension_rule, [i_0_43])).
% 12.38/1.93  cnf(i_0_92, plain, (least_upper_bound(identity,identity)!=inverse(inverse(least_upper_bound(identity,identity)))), inference(closure_rule, [i_0_36])).
% 12.38/1.93  cnf(i_0_90, plain, (least_upper_bound(inverse(identity),inverse(identity))=inverse(inverse(least_upper_bound(identity,identity)))), inference(etableau_closure_rule, [i_0_90, ...])).
% 12.38/1.93  # End printing tableau
% 12.38/1.93  # SZS output end
% 12.38/1.93  # Branches closed with saturation will be marked with an "s"
% 12.38/1.93  # There were 1 total branch saturation attempts.
% 12.38/1.93  # There were 0 of these attempts blocked.
% 12.38/1.93  # There were 0 deferred branch saturation attempts.
% 12.38/1.93  # There were 0 free duplicated saturations.
% 12.38/1.93  # There were 1 total successful branch saturations.
% 12.38/1.93  # There were 0 successful branch saturations in interreduction.
% 12.38/1.93  # There were 0 successful branch saturations on the branch.
% 12.38/1.93  # There were 1 successful branch saturations after the branch.
% 12.38/1.93  # SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # SZS output start for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # Begin clausification derivation
% 12.38/1.93  
% 12.38/1.93  # End clausification derivation
% 12.38/1.93  # Begin listing active clauses obtained from FOF to CNF conversion
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity)).
% 12.38/1.93  cnf(i_0_36, hypothesis, (inverse(inverse(X1))=X1)).
% 12.38/1.93  cnf(i_0_20, plain, (multiply(identity,X1)=X1)).
% 12.38/1.93  cnf(i_0_28, plain, (greatest_lower_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_27, plain, (least_upper_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_21, plain, (multiply(inverse(X1),X1)=identity)).
% 12.38/1.93  cnf(i_0_30, plain, (greatest_lower_bound(X1,least_upper_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_29, plain, (least_upper_bound(X1,greatest_lower_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_25, plain, (greatest_lower_bound(greatest_lower_bound(X1,X2),X3)=greatest_lower_bound(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_26, plain, (least_upper_bound(least_upper_bound(X1,X2),X3)=least_upper_bound(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_22, plain, (multiply(multiply(X1,X2),X3)=multiply(X1,multiply(X2,X3)))).
% 12.38/1.93  cnf(i_0_37, hypothesis, (multiply(inverse(X1),inverse(X2))=inverse(multiply(X2,X1)))).
% 12.38/1.93  cnf(i_0_32, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_31, plain, (least_upper_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_34, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X3,X2))=multiply(greatest_lower_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_33, plain, (least_upper_bound(multiply(X1,X2),multiply(X3,X2))=multiply(least_upper_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_23, plain, (greatest_lower_bound(X1,X2)=greatest_lower_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_24, plain, (least_upper_bound(X1,X2)=least_upper_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_38, negated_conjecture, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))!=identity)).
% 12.38/1.93  cnf(i_0_40, plain, (X4=X4)).
% 12.38/1.93  # End listing active clauses.  There is an equivalent clause to each of these in the clausification!
% 12.38/1.93  # Begin printing tableau
% 12.38/1.93  # Found 6 steps
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity), inference(start_rule)).
% 12.38/1.93  cnf(i_0_48, plain, (inverse(identity)=identity), inference(extension_rule, [i_0_43])).
% 12.38/1.93  cnf(i_0_72, plain, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))=identity), inference(closure_rule, [i_0_38])).
% 12.38/1.93  cnf(i_0_73, plain, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))!=inverse(identity)), inference(extension_rule, [i_0_43])).
% 12.38/1.93  cnf(i_0_91, plain, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))!=inverse(inverse(greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))))), inference(closure_rule, [i_0_36])).
% 12.38/1.93  cnf(i_0_92, plain, (inverse(inverse(greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))))!=inverse(identity)), inference(etableau_closure_rule, [i_0_92, ...])).
% 12.38/1.93  # End printing tableau
% 12.38/1.93  # SZS output end
% 12.38/1.93  # Branches closed with saturation will be marked with an "s"
% 12.38/1.93  # There were 1 total branch saturation attempts.
% 12.38/1.93  # There were 0 of these attempts blocked.
% 12.38/1.93  # There were 0 deferred branch saturation attempts.
% 12.38/1.93  # There were 0 free duplicated saturations.
% 12.38/1.93  # There were 1 total successful branch saturations.
% 12.38/1.93  # There were 0 successful branch saturations in interreduction.
% 12.38/1.93  # There were 0 successful branch saturations on the branch.
% 12.38/1.93  # There were 1 successful branch saturations after the branch.
% 12.38/1.93  # SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # SZS output start for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # Begin clausification derivation
% 12.38/1.93  
% 12.38/1.93  # End clausification derivation
% 12.38/1.93  # Begin listing active clauses obtained from FOF to CNF conversion
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity)).
% 12.38/1.93  cnf(i_0_36, hypothesis, (inverse(inverse(X1))=X1)).
% 12.38/1.93  cnf(i_0_20, plain, (multiply(identity,X1)=X1)).
% 12.38/1.93  cnf(i_0_28, plain, (greatest_lower_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_27, plain, (least_upper_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_21, plain, (multiply(inverse(X1),X1)=identity)).
% 12.38/1.93  cnf(i_0_30, plain, (greatest_lower_bound(X1,least_upper_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_29, plain, (least_upper_bound(X1,greatest_lower_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_25, plain, (greatest_lower_bound(greatest_lower_bound(X1,X2),X3)=greatest_lower_bound(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_26, plain, (least_upper_bound(least_upper_bound(X1,X2),X3)=least_upper_bound(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_22, plain, (multiply(multiply(X1,X2),X3)=multiply(X1,multiply(X2,X3)))).
% 12.38/1.93  cnf(i_0_37, hypothesis, (multiply(inverse(X1),inverse(X2))=inverse(multiply(X2,X1)))).
% 12.38/1.93  cnf(i_0_32, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_31, plain, (least_upper_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_34, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X3,X2))=multiply(greatest_lower_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_33, plain, (least_upper_bound(multiply(X1,X2),multiply(X3,X2))=multiply(least_upper_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_23, plain, (greatest_lower_bound(X1,X2)=greatest_lower_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_24, plain, (least_upper_bound(X1,X2)=least_upper_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_38, negated_conjecture, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))!=identity)).
% 12.38/1.93  cnf(i_0_40, plain, (X4=X4)).
% 12.38/1.93  # End listing active clauses.  There is an equivalent clause to each of these in the clausification!
% 12.38/1.93  # Begin printing tableau
% 12.38/1.93  # Found 5 steps
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity), inference(start_rule)).
% 12.38/1.93  cnf(i_0_48, plain, (inverse(identity)=identity), inference(extension_rule, [i_0_45])).
% 12.38/1.93  cnf(i_0_78, plain, (inverse(inverse(identity))=inverse(identity)), inference(extension_rule, [i_0_43])).
% 12.38/1.93  cnf(i_0_92, plain, (inverse(identity)!=identity), inference(closure_rule, [i_0_35])).
% 12.38/1.93  cnf(i_0_90, plain, (inverse(inverse(identity))=identity), inference(etableau_closure_rule, [i_0_90, ...])).
% 12.38/1.93  # End printing tableau
% 12.38/1.93  # SZS output end
% 12.38/1.93  # Branches closed with saturation will be marked with an "s"
% 12.38/1.93  # There were 1 total branch saturation attempts.
% 12.38/1.93  # There were 0 of these attempts blocked.
% 12.38/1.93  # There were 0 deferred branch saturation attempts.
% 12.38/1.93  # There were 0 free duplicated saturations.
% 12.38/1.93  # There were 1 total successful branch saturations.
% 12.38/1.93  # There were 0 successful branch saturations in interreduction.
% 12.38/1.93  # There were 0 successful branch saturations on the branch.
% 12.38/1.93  # There were 1 successful branch saturations after the branch.
% 12.38/1.93  # SZS status Unsatisfiable for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # SZS output start for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 12.38/1.93  # Begin clausification derivation
% 12.38/1.93  
% 12.38/1.93  # End clausification derivation
% 12.38/1.93  # Begin listing active clauses obtained from FOF to CNF conversion
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity)).
% 12.38/1.93  cnf(i_0_36, hypothesis, (inverse(inverse(X1))=X1)).
% 12.38/1.93  cnf(i_0_20, plain, (multiply(identity,X1)=X1)).
% 12.38/1.93  cnf(i_0_28, plain, (greatest_lower_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_27, plain, (least_upper_bound(X1,X1)=X1)).
% 12.38/1.93  cnf(i_0_21, plain, (multiply(inverse(X1),X1)=identity)).
% 12.38/1.93  cnf(i_0_30, plain, (greatest_lower_bound(X1,least_upper_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_29, plain, (least_upper_bound(X1,greatest_lower_bound(X1,X2))=X1)).
% 12.38/1.93  cnf(i_0_25, plain, (greatest_lower_bound(greatest_lower_bound(X1,X2),X3)=greatest_lower_bound(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_26, plain, (least_upper_bound(least_upper_bound(X1,X2),X3)=least_upper_bound(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_22, plain, (multiply(multiply(X1,X2),X3)=multiply(X1,multiply(X2,X3)))).
% 12.38/1.93  cnf(i_0_37, hypothesis, (multiply(inverse(X1),inverse(X2))=inverse(multiply(X2,X1)))).
% 12.38/1.93  cnf(i_0_32, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,greatest_lower_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_31, plain, (least_upper_bound(multiply(X1,X2),multiply(X1,X3))=multiply(X1,least_upper_bound(X2,X3)))).
% 12.38/1.93  cnf(i_0_34, plain, (greatest_lower_bound(multiply(X1,X2),multiply(X3,X2))=multiply(greatest_lower_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_33, plain, (least_upper_bound(multiply(X1,X2),multiply(X3,X2))=multiply(least_upper_bound(X1,X3),X2))).
% 12.38/1.93  cnf(i_0_23, plain, (greatest_lower_bound(X1,X2)=greatest_lower_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_24, plain, (least_upper_bound(X1,X2)=least_upper_bound(X2,X1))).
% 12.38/1.93  cnf(i_0_38, negated_conjecture, (greatest_lower_bound(least_upper_bound(identity,a),inverse(greatest_lower_bound(identity,a)))!=identity)).
% 12.38/1.93  cnf(i_0_40, plain, (X4=X4)).
% 12.38/1.93  # End listing active clauses.  There is an equivalent clause to each of these in the clausification!
% 12.38/1.93  # Begin printing tableau
% 12.38/1.93  # Found 6 steps
% 12.38/1.93  cnf(i_0_35, hypothesis, (inverse(identity)=identity), inference(start_rule)).
% 12.38/1.93  cnf(i_0_48, plain, (inverse(identity)=identity), inference(extension_rule, [i_0_44])).
% 12.38/1.93  cnf(i_0_76, plain, (inverse(identity)!=identity), inference(closure_rule, [i_0_35])).
% 12.38/1.93  cnf(i_0_75, plain, (multiply(inverse(identity),inverse(identity))=multiply(identity,identity)), inference(extension_rule, [i_0_43])).
% 12.38/1.93  cnf(i_0_92, plain, (multiply(identity,identity)!=inverse(inverse(multiply(identity,identity)))), inference(closure_rule, [i_0_36])).
% 12.38/1.93  cnf(i_0_90, plain, (multiply(inverse(identity),inverse(identity))=inverse(inverse(multiply(identity,identity)))), inference(etableau_closure_rule, [i_0_90, ...])).
% 12.38/1.93  # End printing tableau
% 12.38/1.93  # SZS output end
% 12.38/1.93  # Branches closed with saturation will be marked with an "s"
% 12.38/1.94  # Child (17062) has found a proof.
% 12.38/1.94  
% 12.38/1.94  # Proof search is over...
% 12.38/1.94  # Freeing feature tree
%------------------------------------------------------------------------------