TSTP Solution File: CAT020-2 by E---3.1.00
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : E---3.1.00
% Problem : CAT020-2 : TPTP v8.2.0. Released v2.5.0.
% Transfm : none
% Format : tptp:raw
% Command : run_E %s %d THM
% Computer : n028.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 : 300s
% DateTime : Mon May 20 18:59:18 EDT 2024
% Result : Satisfiable 0.16s 0.42s
% Output : Saturation 0.16s
% Verified :
% SZS Type : ERROR: Analysing output (Could not find formula named c_0_7)
% Comments :
%------------------------------------------------------------------------------
cnf(c_0_8,axiom,
domain(codomain(X1)) = codomain(X1),
domain_of_codomain_is_codomain,
[final] ).
cnf(c_0_9,axiom,
codomain(domain(X1)) = domain(X1),
codomain_of_domain_is_domain,
[final] ).
cnf(c_0_10,plain,
( compose(X1,compose(X2,X3)) = compose(compose(X1,X2),X3)
| codomain(X1) != domain(X2)
| codomain(X2) != domain(X3) ),
c_0_7,
[final] ).
cnf(c_0_11,plain,
domain(domain(X1)) = domain(X1),
inference(spm,[status(thm)],[c_0_8,c_0_9]),
[final] ).
cnf(c_0_12,plain,
( compose(compose(X1,domain(X2)),X3) = compose(X1,compose(domain(X2),X3))
| domain(X2) != domain(X3)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_10,c_0_9]),c_0_11]),
[final] ).
cnf(c_0_13,plain,
codomain(codomain(X1)) = codomain(X1),
inference(spm,[status(thm)],[c_0_9,c_0_8]),
[final] ).
cnf(c_0_14,plain,
( compose(compose(X1,X2),codomain(X3)) = compose(X1,compose(X2,codomain(X3)))
| codomain(X2) != codomain(X3)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_10,c_0_8]),
[final] ).
cnf(c_0_15,axiom,
compose(X1,codomain(X1)) = X1,
codomain_composition,
[final] ).
cnf(c_0_18,plain,
( compose(compose(domain(X1),domain(X2)),X3) = compose(domain(X1),compose(domain(X2),X3))
| domain(X2) != domain(X3)
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_12,c_0_9]),
[final] ).
cnf(c_0_19,plain,
( compose(compose(codomain(X1),domain(X2)),X3) = compose(codomain(X1),compose(domain(X2),X3))
| domain(X2) != domain(X3)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_12,c_0_13]),
[final] ).
cnf(c_0_20,plain,
( compose(compose(X1,domain(X2)),codomain(X3)) = compose(X1,compose(domain(X2),codomain(X3)))
| domain(X2) != codomain(X3)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_14,c_0_9]),c_0_11]),
[final] ).
cnf(c_0_21,plain,
( compose(compose(X1,X2),domain(X3)) = compose(X1,compose(X2,domain(X3)))
| codomain(X2) != domain(X3)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_10,c_0_11]),
[final] ).
cnf(c_0_22,axiom,
compose(domain(X1),X1) = X1,
domain_composition,
[final] ).
cnf(c_0_23,plain,
( compose(compose(X1,X2),codomain(X2)) = compose(X1,X2)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(er,[status(thm)],[c_0_14]),c_0_15]),
[final] ).
cnf(c_0_24,plain,
( codomain(compose(X1,X2)) = codomain(X2)
| codomain(X1) != domain(X2) ),
c_0_16,
[final] ).
cnf(c_0_25,plain,
( domain(compose(X1,X2)) = domain(X1)
| codomain(X1) != domain(X2) ),
c_0_17,
[final] ).
cnf(c_0_26,plain,
( compose(compose(domain(X1),codomain(X2)),X3) = compose(domain(X1),compose(codomain(X2),X3))
| codomain(X2) != domain(X3)
| domain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_18,c_0_8]),
[final] ).
cnf(c_0_27,plain,
( compose(compose(codomain(X1),codomain(X2)),X3) = compose(codomain(X1),compose(codomain(X2),X3))
| codomain(X2) != domain(X3)
| codomain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_19,c_0_8]),
[final] ).
cnf(c_0_28,plain,
( compose(compose(codomain(X1),domain(X2)),codomain(X3)) = compose(codomain(X1),compose(domain(X2),codomain(X3)))
| domain(X2) != codomain(X3)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_20,c_0_13]),
[final] ).
cnf(c_0_29,plain,
( compose(compose(X1,domain(X2)),domain(X3)) = compose(X1,compose(domain(X2),domain(X3)))
| domain(X2) != domain(X3)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_21,c_0_9]),c_0_11]),
[final] ).
cnf(c_0_30,plain,
( compose(compose(domain(X1),domain(X2)),X2) = compose(domain(X1),X2)
| domain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(er,[status(thm)],[c_0_18]),c_0_22]),
[final] ).
cnf(c_0_31,plain,
( compose(compose(X1,domain(X2)),domain(X2)) = compose(X1,domain(X2))
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_23,c_0_11]),c_0_9]),
[final] ).
cnf(c_0_32,plain,
( compose(compose(X1,codomain(X2)),codomain(X2)) = compose(X1,codomain(X2))
| codomain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_23,c_0_8]),c_0_13]),
[final] ).
cnf(c_0_33,plain,
( codomain(compose(X1,domain(X2))) = domain(X2)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_24,c_0_11]),c_0_9]),
[final] ).
cnf(c_0_34,plain,
( codomain(compose(X1,codomain(X2))) = codomain(X2)
| codomain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_24,c_0_8]),c_0_13]),
[final] ).
cnf(c_0_35,plain,
( domain(compose(X1,domain(X2))) = domain(X1)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_25,c_0_11]),
[final] ).
cnf(c_0_36,plain,
( domain(compose(X1,codomain(X2))) = domain(X1)
| codomain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_25,c_0_8]),
[final] ).
cnf(c_0_37,plain,
( compose(compose(domain(X1),codomain(X2)),domain(X3)) = compose(domain(X1),compose(codomain(X2),domain(X3)))
| codomain(X2) != domain(X3)
| domain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_26,c_0_11]),
[final] ).
cnf(c_0_38,plain,
( compose(compose(domain(X1),codomain(X2)),codomain(X3)) = compose(domain(X1),compose(codomain(X2),codomain(X3)))
| codomain(X2) != codomain(X3)
| domain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_26,c_0_8]),
[final] ).
cnf(c_0_39,plain,
( compose(compose(codomain(X1),codomain(X2)),domain(X3)) = compose(codomain(X1),compose(codomain(X2),domain(X3)))
| codomain(X2) != domain(X3)
| codomain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_27,c_0_11]),
[final] ).
cnf(c_0_40,plain,
( compose(compose(codomain(X1),codomain(X2)),codomain(X3)) = compose(codomain(X1),compose(codomain(X2),codomain(X3)))
| codomain(X2) != codomain(X3)
| codomain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_28,c_0_8]),
[final] ).
cnf(c_0_41,plain,
( compose(compose(domain(X1),domain(X2)),domain(X3)) = compose(domain(X1),compose(domain(X2),domain(X3)))
| domain(X2) != domain(X3)
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_29,c_0_9]),
[final] ).
cnf(c_0_42,plain,
( compose(compose(codomain(X1),domain(X2)),domain(X3)) = compose(codomain(X1),compose(domain(X2),domain(X3)))
| domain(X2) != domain(X3)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_29,c_0_13]),
[final] ).
cnf(c_0_43,plain,
( compose(compose(domain(X1),domain(X2)),codomain(X3)) = compose(domain(X1),compose(domain(X2),codomain(X3)))
| domain(X2) != codomain(X3)
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_20,c_0_9]),
[final] ).
cnf(c_0_44,plain,
( compose(compose(codomain(X1),domain(X2)),X2) = compose(codomain(X1),X2)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_30,c_0_8]),
[final] ).
cnf(c_0_45,plain,
( compose(compose(X1,codomain(X2)),domain(X3)) = compose(X1,compose(codomain(X2),domain(X3)))
| codomain(X2) != domain(X3)
| codomain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_21,c_0_13]),c_0_8]),
[final] ).
cnf(c_0_46,plain,
( compose(compose(domain(X1),domain(X2)),domain(X2)) = compose(domain(X1),domain(X2))
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_31,c_0_9]),
[final] ).
cnf(c_0_47,plain,
( compose(compose(codomain(X1),domain(X2)),domain(X2)) = compose(codomain(X1),domain(X2))
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_31,c_0_13]),
[final] ).
cnf(c_0_48,plain,
( compose(compose(domain(X1),codomain(X2)),codomain(X2)) = compose(domain(X1),codomain(X2))
| domain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_32,c_0_9]),
[final] ).
cnf(c_0_49,plain,
( compose(compose(codomain(X1),codomain(X2)),codomain(X2)) = compose(codomain(X1),codomain(X2))
| codomain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_32,c_0_13]),
[final] ).
cnf(c_0_50,plain,
( compose(compose(domain(X1),X2),codomain(X2)) = compose(domain(X1),X2)
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_23,c_0_9]),
[final] ).
cnf(c_0_51,plain,
( compose(compose(X1,codomain(X2)),codomain(X3)) = compose(X1,compose(codomain(X2),codomain(X3)))
| codomain(X2) != codomain(X3)
| codomain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_14,c_0_13]),c_0_8]),
[final] ).
cnf(c_0_52,plain,
( compose(compose(codomain(X1),X2),codomain(X2)) = compose(codomain(X1),X2)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_23,c_0_13]),
[final] ).
cnf(c_0_53,plain,
( compose(compose(X1,codomain(X2)),X3) = compose(X1,compose(codomain(X2),X3))
| codomain(X2) != domain(X3)
| codomain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_10,c_0_13]),c_0_8]),
[final] ).
cnf(c_0_54,plain,
( codomain(compose(domain(X1),domain(X2))) = domain(X2)
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_33,c_0_9]),
[final] ).
cnf(c_0_55,plain,
( codomain(compose(codomain(X1),domain(X2))) = domain(X2)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_33,c_0_13]),
[final] ).
cnf(c_0_56,plain,
( codomain(compose(domain(X1),codomain(X2))) = codomain(X2)
| domain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_34,c_0_9]),
[final] ).
cnf(c_0_57,plain,
( codomain(compose(codomain(X1),codomain(X2))) = codomain(X2)
| codomain(X1) != codomain(X2) ),
inference(spm,[status(thm)],[c_0_34,c_0_13]),
[final] ).
cnf(c_0_58,plain,
( domain(compose(domain(X1),domain(X2))) = domain(X1)
| domain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_35,c_0_9]),c_0_11]),
[final] ).
cnf(c_0_59,plain,
( domain(compose(codomain(X1),domain(X2))) = codomain(X1)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_35,c_0_13]),c_0_8]),
[final] ).
cnf(c_0_60,plain,
( domain(compose(domain(X1),codomain(X2))) = domain(X1)
| domain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_36,c_0_9]),c_0_11]),
[final] ).
cnf(c_0_61,plain,
( domain(compose(codomain(X1),codomain(X2))) = codomain(X1)
| codomain(X1) != codomain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_36,c_0_13]),c_0_8]),
[final] ).
cnf(c_0_62,plain,
( codomain(compose(domain(X1),X2)) = codomain(X2)
| domain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_24,c_0_9]),
[final] ).
cnf(c_0_63,plain,
( codomain(compose(codomain(X1),X2)) = codomain(X2)
| codomain(X1) != domain(X2) ),
inference(spm,[status(thm)],[c_0_24,c_0_13]),
[final] ).
cnf(c_0_64,plain,
( domain(compose(domain(X1),X2)) = domain(X1)
| domain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_25,c_0_9]),c_0_11]),
[final] ).
cnf(c_0_65,plain,
( domain(compose(codomain(X1),X2)) = codomain(X1)
| codomain(X1) != domain(X2) ),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_25,c_0_13]),c_0_8]),
[final] ).
cnf(c_0_66,plain,
compose(codomain(X1),codomain(X1)) = codomain(X1),
inference(spm,[status(thm)],[c_0_22,c_0_8]),
[final] ).
cnf(c_0_67,plain,
compose(domain(X1),domain(X1)) = domain(X1),
inference(spm,[status(thm)],[c_0_15,c_0_9]),
[final] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.06/0.10 % Problem : CAT020-2 : TPTP v8.2.0. Released v2.5.0.
% 0.06/0.11 % Command : run_E %s %d THM
% 0.10/0.31 % Computer : n028.cluster.edu
% 0.10/0.31 % Model : x86_64 x86_64
% 0.10/0.31 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.10/0.31 % Memory : 8042.1875MB
% 0.10/0.31 % OS : Linux 3.10.0-693.el7.x86_64
% 0.10/0.31 % CPULimit : 300
% 0.10/0.31 % WCLimit : 300
% 0.10/0.31 % DateTime : Sat May 18 11:38:37 EDT 2024
% 0.10/0.31 % CPUTime :
% 0.16/0.40 Running first-order theorem proving
% 0.16/0.40 Running: /export/starexec/sandbox/solver/bin/eprover --delete-bad-limit=2000000000 --definitional-cnf=24 -s --print-statistics -R --print-version --proof-object --auto-schedule=8 --cpu-limit=300 /export/starexec/sandbox/benchmark/theBenchmark.p
% 0.16/0.42 # Version: 3.1.0
% 0.16/0.42 # Preprocessing class: FSSSSMSSSSSNFFN.
% 0.16/0.42 # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.16/0.42 # Starting G-E--_302_C18_F1_URBAN_RG_S04BN with 1500s (5) cores
% 0.16/0.42 # Starting new_bool_3 with 300s (1) cores
% 0.16/0.42 # Starting new_bool_1 with 300s (1) cores
% 0.16/0.42 # Starting sh5l with 300s (1) cores
% 0.16/0.42 # G-E--_302_C18_F1_URBAN_RG_S04BN with pid 27878 completed with status 1
% 0.16/0.42 # Result found by G-E--_302_C18_F1_URBAN_RG_S04BN
% 0.16/0.42 # Preprocessing class: FSSSSMSSSSSNFFN.
% 0.16/0.42 # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.16/0.42 # Starting G-E--_302_C18_F1_URBAN_RG_S04BN with 1500s (5) cores
% 0.16/0.42 # No SInE strategy applied
% 0.16/0.42 # Search class: FHUPM-FFSF21-SFFFFFNN
% 0.16/0.42 # Scheduled 6 strats onto 5 cores with 1500 seconds (1500 total)
% 0.16/0.42 # Starting G-E--_208_C18_F1_SE_CS_SP_PS_S5PRR_S4d with 811s (1) cores
% 0.16/0.42 # Starting G-E--_302_C18_F1_URBAN_RG_S04BN with 151s (1) cores
% 0.16/0.42 # Starting new_bool_3 with 136s (1) cores
% 0.16/0.42 # Starting new_bool_1 with 136s (1) cores
% 0.16/0.42 # Starting sh5l with 136s (1) cores
% 0.16/0.42 # G-E--_208_C18_F1_SE_CS_SP_PS_S5PRR_S4d with pid 27885 completed with status 1
% 0.16/0.42 # Result found by G-E--_208_C18_F1_SE_CS_SP_PS_S5PRR_S4d
% 0.16/0.42 # Preprocessing class: FSSSSMSSSSSNFFN.
% 0.16/0.42 # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.16/0.42 # Starting G-E--_302_C18_F1_URBAN_RG_S04BN with 1500s (5) cores
% 0.16/0.42 # No SInE strategy applied
% 0.16/0.42 # Search class: FHUPM-FFSF21-SFFFFFNN
% 0.16/0.42 # Scheduled 6 strats onto 5 cores with 1500 seconds (1500 total)
% 0.16/0.42 # Starting G-E--_208_C18_F1_SE_CS_SP_PS_S5PRR_S4d with 811s (1) cores
% 0.16/0.42 # Preprocessing time : 0.001 s
% 0.16/0.42 # Presaturation interreduction done
% 0.16/0.42
% 0.16/0.42 # No proof found!
% 0.16/0.42 # SZS status Satisfiable
% 0.16/0.42 # SZS output start Saturation
% See solution above
% 0.16/0.42 # Parsed axioms : 7
% 0.16/0.42 # Removed by relevancy pruning/SinE : 0
% 0.16/0.42 # Initial clauses : 7
% 0.16/0.42 # Removed in clause preprocessing : 0
% 0.16/0.42 # Initial clauses in saturation : 7
% 0.16/0.42 # Processed clauses : 228
% 0.16/0.42 # ...of these trivial : 4
% 0.16/0.42 # ...subsumed : 159
% 0.16/0.42 # ...remaining for further processing : 65
% 0.16/0.42 # Other redundant clauses eliminated : 0
% 0.16/0.42 # Clauses deleted for lack of memory : 0
% 0.16/0.42 # Backward-subsumed : 0
% 0.16/0.42 # Backward-rewritten : 0
% 0.16/0.42 # Generated clauses : 239
% 0.16/0.42 # ...of the previous two non-redundant : 214
% 0.16/0.42 # ...aggressively subsumed : 0
% 0.16/0.42 # Contextual simplify-reflections : 0
% 0.16/0.42 # Paramodulations : 220
% 0.16/0.42 # Factorizations : 0
% 0.16/0.42 # NegExts : 0
% 0.16/0.42 # Equation resolutions : 19
% 0.16/0.42 # Disequality decompositions : 0
% 0.16/0.42 # Total rewrite steps : 73
% 0.16/0.42 # ...of those cached : 57
% 0.16/0.42 # Propositional unsat checks : 0
% 0.16/0.42 # Propositional check models : 0
% 0.16/0.42 # Propositional check unsatisfiable : 0
% 0.16/0.42 # Propositional clauses : 0
% 0.16/0.42 # Propositional clauses after purity: 0
% 0.16/0.42 # Propositional unsat core size : 0
% 0.16/0.42 # Propositional preprocessing time : 0.000
% 0.16/0.42 # Propositional encoding time : 0.000
% 0.16/0.42 # Propositional solver time : 0.000
% 0.16/0.42 # Success case prop preproc time : 0.000
% 0.16/0.42 # Success case prop encoding time : 0.000
% 0.16/0.42 # Success case prop solver time : 0.000
% 0.16/0.42 # Current number of processed clauses : 58
% 0.16/0.42 # Positive orientable unit clauses : 8
% 0.16/0.42 # Positive unorientable unit clauses: 0
% 0.16/0.42 # Negative unit clauses : 0
% 0.16/0.42 # Non-unit-clauses : 50
% 0.16/0.42 # Current number of unprocessed clauses: 0
% 0.16/0.42 # ...number of literals in the above : 0
% 0.16/0.42 # Current number of archived formulas : 0
% 0.16/0.42 # Current number of archived clauses : 7
% 0.16/0.42 # Clause-clause subsumption calls (NU) : 1793
% 0.16/0.42 # Rec. Clause-clause subsumption calls : 1793
% 0.16/0.42 # Non-unit clause-clause subsumptions : 159
% 0.16/0.42 # Unit Clause-clause subsumption calls : 0
% 0.16/0.42 # Rewrite failures with RHS unbound : 0
% 0.16/0.42 # BW rewrite match attempts : 0
% 0.16/0.42 # BW rewrite match successes : 0
% 0.16/0.42 # Condensation attempts : 0
% 0.16/0.42 # Condensation successes : 0
% 0.16/0.42 # Termbank termtop insertions : 3036
% 0.16/0.42 # Search garbage collected termcells : 8
% 0.16/0.42
% 0.16/0.42 # -------------------------------------------------
% 0.16/0.42 # User time : 0.007 s
% 0.16/0.42 # System time : 0.002 s
% 0.16/0.42 # Total time : 0.009 s
% 0.16/0.42 # Maximum resident set size: 1584 pages
% 0.16/0.42
% 0.16/0.42 # -------------------------------------------------
% 0.16/0.42 # User time : 0.036 s
% 0.16/0.42 # System time : 0.007 s
% 0.16/0.42 # Total time : 0.042 s
% 0.16/0.42 # Maximum resident set size: 1700 pages
% 0.16/0.42 % E---3.1 exiting
% 0.16/0.42 % E exiting
%------------------------------------------------------------------------------