%------------------------------------------------------------------------------ % File : Satallax---3.5 % Problem : PHI004^2 : TPTP v9.2.0. Released v6.1.0. % Transfm : none % Format : tptp:raw % Command : satallax -E eprover-ho -P picomus -M modes -p tstp -t %d %s % Computer : n010.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 : Thu Oct 9 02:13:37 PM UTC 2025 % Result : Theorem 38.64s 38.85s % Output : Proof 38.64s % Verified : % SZS Type : - % Comments : %------------------------------------------------------------------------------ %----WARNING: Could not form TPTP format derivation %------------------------------------------------------------------------------ %----ORIGINAL SYSTEM OUTPUT % 0.12/0.13 % Problem : PHI004^2 : TPTP v9.2.0. Released v6.1.0. % 0.12/0.13 % Command : satallax -E eprover-ho -P picomus -M modes -p tstp -t %d %s % 0.13/0.34 % Computer : n010.cluster.edu % 0.13/0.34 % Model : x86_64 x86_64 % 0.13/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz % 0.13/0.34 % Memory : 8042.1875MB % 0.13/0.34 % OS : Linux 3.10.0-693.el7.x86_64 % 0.13/0.34 % CPULimit : 300 % 0.13/0.34 % WCLimit : 300 % 0.13/0.34 % DateTime : Wed Oct 8 23:17:53 EDT 2025 % 0.13/0.35 % CPUTime : % 38.64/38.85 % SZS status Theorem % 38.64/38.85 % Mode: mode484 % 38.64/38.85 % Inferences: 309 % 38.64/38.85 % SZS output start Proof % 38.64/38.85 thf(ty_mu, type, mu : $tType). % 38.64/38.85 thf(ty_eigen__2, type, eigen__2 : (mu>$i>$o)). % 38.64/38.85 thf(ty_eigen__1, type, eigen__1 : mu). % 38.64/38.85 thf(ty_eigen__0, type, eigen__0 : $i). % 38.64/38.85 thf(ty_eigen__4, type, eigen__4 : $i). % 38.64/38.85 thf(ty_positive, type, positive : ((mu>$i>$o)>$i>$o)). % 38.64/38.85 thf(ty_eigen__5, type, eigen__5 : mu). % 38.64/38.85 thf(ty_eigen__3, type, eigen__3 : (mu>$i>$o)). % 38.64/38.85 thf(ty_rel, type, rel : ($i>$i>$o)). % 38.64/38.85 thf(sP1,plain,sP1 <=> ((positive @ eigen__2) @ eigen__0),introduced(definition,[new_symbols(definition,[sP1])])). % 38.64/38.85 thf(sP2,plain,sP2 <=> ((positive @ eigen__3) @ eigen__0),introduced(definition,[new_symbols(definition,[sP2])])). % 38.64/38.85 thf(sP3,plain,sP3 <=> (![X1:mu>$i>$o]:(((positive @ X1) @ eigen__0) => (![X2:$i]:(((rel @ eigen__0) @ X2) => ((positive @ X1) @ X2))))),introduced(definition,[new_symbols(definition,[sP3])])). % 38.64/38.85 thf(sP4,plain,sP4 <=> (![X1:$i]:(((rel @ eigen__0) @ X1) => ((positive @ eigen__3) @ X1))),introduced(definition,[new_symbols(definition,[sP4])])). % 38.64/38.85 thf(sP5,plain,sP5 <=> (![X1:mu>$i>$o]:(((positive @ X1) @ eigen__4) => ((X1 @ eigen__5) @ eigen__4))),introduced(definition,[new_symbols(definition,[sP5])])). % 38.64/38.85 thf(sP6,plain,sP6 <=> (((positive @ (^[X1:mu]:(^[X2:$i]:(~(((eigen__3 @ X1) @ X2)))))) @ eigen__0) = (~(sP2))),introduced(definition,[new_symbols(definition,[sP6])])). % 38.64/38.85 thf(sP7,plain,sP7 <=> (![X1:$i]:(![X2:mu>$i>$o]:(((positive @ (^[X3:mu]:(^[X4:$i]:(~(((X2 @ X3) @ X4)))))) @ X1) = (~(((positive @ X2) @ X1)))))),introduced(definition,[new_symbols(definition,[sP7])])). % 38.64/38.85 thf(sP8,plain,sP8 <=> (((positive @ (^[X1:mu]:(^[X2:$i]:(~(((eigen__3 @ X1) @ X2)))))) @ eigen__0) => (~(((eigen__3 @ eigen__1) @ eigen__0)))),introduced(definition,[new_symbols(definition,[sP8])])). % 38.64/38.85 thf(sP9,plain,sP9 <=> ((positive @ (^[X1:mu]:(^[X2:$i]:(~(((eigen__3 @ X1) @ X2)))))) @ eigen__0),introduced(definition,[new_symbols(definition,[sP9])])). % 38.64/38.85 thf(sP10,plain,sP10 <=> (sP2 => sP4),introduced(definition,[new_symbols(definition,[sP10])])). % 38.64/38.85 thf(sP11,plain,sP11 <=> (sP1 => ((eigen__2 @ eigen__1) @ eigen__0)),introduced(definition,[new_symbols(definition,[sP11])])). % 38.64/38.85 thf(sP12,plain,sP12 <=> ((positive @ eigen__3) @ eigen__4),introduced(definition,[new_symbols(definition,[sP12])])). % 38.64/38.85 thf(sP13,plain,sP13 <=> (sP12 => ((eigen__3 @ eigen__5) @ eigen__4)),introduced(definition,[new_symbols(definition,[sP13])])). % 38.64/38.85 thf(sP14,plain,sP14 <=> ((eigen__3 @ eigen__5) @ eigen__4),introduced(definition,[new_symbols(definition,[sP14])])). % 38.64/38.85 thf(sP15,plain,sP15 <=> ((rel @ eigen__0) @ eigen__4),introduced(definition,[new_symbols(definition,[sP15])])). % 38.64/38.85 thf(sP16,plain,sP16 <=> (sP15 => sP12),introduced(definition,[new_symbols(definition,[sP16])])). % 38.64/38.85 thf(sP17,plain,sP17 <=> (![X1:mu>$i>$o]:(((positive @ X1) @ eigen__0) => ((X1 @ eigen__1) @ eigen__0))),introduced(definition,[new_symbols(definition,[sP17])])). % 38.64/38.85 thf(sP18,plain,sP18 <=> ((eigen__2 @ eigen__1) @ eigen__0),introduced(definition,[new_symbols(definition,[sP18])])). % 38.64/38.85 thf(sP19,plain,sP19 <=> (![X1:mu>$i>$o]:(((positive @ (^[X2:mu]:(^[X3:$i]:(~(((X1 @ X2) @ X3)))))) @ eigen__0) = (~(((positive @ X1) @ eigen__0))))),introduced(definition,[new_symbols(definition,[sP19])])). % 38.64/38.85 thf(sP20,plain,sP20 <=> ((eigen__3 @ eigen__1) @ eigen__0),introduced(definition,[new_symbols(definition,[sP20])])). % 38.64/38.85 thf(sP21,plain,sP21 <=> (![X1:$i]:(![X2:mu>$i>$o]:(((positive @ X2) @ X1) => (![X3:$i]:(((rel @ X1) @ X3) => ((positive @ X2) @ X3)))))),introduced(definition,[new_symbols(definition,[sP21])])). % 38.64/38.85 thf(def_meq_ind,definition,(meq_ind = (^[X1:mu]:(^[X2:mu]:(^[X3:$i]:(X1 = X2)))))). % 38.64/38.85 thf(def_mtrue,definition,(mtrue = (^[X1:$i]:(~($false))))). % 38.64/38.85 thf(def_mfalse,definition,(mfalse = (^[X1:$i]:$false))). % 38.64/38.85 thf(def_mnot,definition,(mnot = (^[X1:$i>$o]:(^[X2:$i]:(~((X1 @ X2))))))). % 38.64/38.85 thf(def_mor,definition,(mor = (^[X1:$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:((~((X1 @ X3))) => (X2 @ X3))))))). % 38.64/38.85 thf(def_mand,definition,(mand = (^[X1:$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:(~(((X1 @ X3) => (~((X2 @ X3))))))))))). % 38.64/38.85 thf(def_mimplies,definition,(mimplies = (^[X1:$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:((X1 @ X3) => (X2 @ X3))))))). % 38.64/38.85 thf(def_mimplied,definition,(mimplied = (^[X1:$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:((X2 @ X3) => (X1 @ X3))))))). % 38.64/38.85 thf(def_mequiv,definition,(mequiv = (^[X1:$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:((X1 @ X3) = (X2 @ X3))))))). % 38.64/38.85 thf(def_mxor,definition,(mxor = (^[X1:$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:(((X1 @ X3) => (X2 @ X3)) => (~(((~((X1 @ X3))) => (~((X2 @ X3)))))))))))). % 38.64/38.85 thf(def_mforall_ind,definition,(mforall_ind = (^[X1:mu>$i>$o]:(^[X2:$i]:(![X3:mu]:((X1 @ X3) @ X2)))))). % 38.64/38.85 thf(def_mforall_indset,definition,(mforall_indset = (^[X1:(mu>$i>$o)>$i>$o]:(^[X2:$i]:(![X3:mu>$i>$o]:((X1 @ X3) @ X2)))))). % 38.64/38.85 thf(def_mforall_prop,definition,(mforall_prop = (^[X1:($i>$o)>$i>$o]:(^[X2:$i]:(![X3:$i>$o]:((X1 @ X3) @ X2)))))). % 38.64/38.85 thf(def_mexists_ind,definition,(mexists_ind = (^[X1:mu>$i>$o]:(^[X2:$i]:(~((![X3:mu]:(~(((X1 @ X3) @ X2)))))))))). % 38.64/38.85 thf(def_mexists_indset,definition,(mexists_indset = (^[X1:(mu>$i>$o)>$i>$o]:(^[X2:$i]:(~((![X3:mu>$i>$o]:(~(((X1 @ X3) @ X2)))))))))). % 38.64/38.85 thf(def_mexists_prop,definition,(mexists_prop = (^[X1:($i>$o)>$i>$o]:(^[X2:$i]:(~((![X3:$i>$o]:(~(((X1 @ X3) @ X2)))))))))). % 38.64/38.85 thf(def_mbox_generic,definition,(mbox_generic = (^[X1:$i>$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:(![X4:$i]:(((X1 @ X3) @ X4) => (X2 @ X4)))))))). % 38.64/38.85 thf(def_mdia_generic,definition,(mdia_generic = (^[X1:$i>$i>$o]:(^[X2:$i>$o]:(^[X3:$i]:(~((![X4:$i]:(((X1 @ X3) @ X4) => (~((X2 @ X4)))))))))))). % 38.64/38.85 thf(def_mbox,definition,(mbox = (mbox_generic @ rel))). % 38.64/38.85 thf(def_mdia,definition,(mdia = (mdia_generic @ rel))). % 38.64/38.85 thf(def_mvalid,definition,(mvalid = (!!))). % 38.64/38.85 thf(def_minvalid,definition,(minvalid = (^[X1:$i>$o]:(![X2:$i]:(~((X1 @ X2))))))). % 38.64/38.85 thf(def_god,definition,(god = (^[X1:mu]:(mforall_indset @ (^[X2:mu>$i>$o]:((mimplies @ (positive @ X2)) @ (X2 @ X1))))))). % 38.64/38.85 thf(def_essence,definition,(essence = (^[X1:mu>$i>$o]:(^[X2:mu]:((mand @ (X1 @ X2)) @ (mforall_indset @ (^[X3:mu>$i>$o]:((mimplies @ (X3 @ X2)) @ (mbox @ (mforall_ind @ (^[X4:mu]:((mimplies @ (X1 @ X4)) @ (X3 @ X4))))))))))))). % 38.64/38.85 thf(thmT2,conjecture,(![X1:$i]:(![X2:mu]:((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => (~(((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => (~((![X3:mu>$i>$o]:(((X3 @ X2) @ X1) => (![X4:$i]:(((rel @ X1) @ X4) => (![X5:mu]:((![X6:mu>$i>$o]:(((positive @ X6) @ X4) => ((X6 @ X5) @ X4))) => ((X3 @ X5) @ X4)))))))))))))))). % 38.64/38.85 thf(h0,negated_conjecture,(~((![X1:$i]:(![X2:mu]:((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => (~(((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => (~((![X3:mu>$i>$o]:(((X3 @ X2) @ X1) => (![X4:$i]:(((rel @ X1) @ X4) => (![X5:mu]:((![X6:mu>$i>$o]:(((positive @ X6) @ X4) => ((X6 @ X5) @ X4))) => ((X3 @ X5) @ X4))))))))))))))))),inference(assume_negation,[status(cth)],[thmT2])). % 38.64/38.85 thf(h1,assumption,(~((![X1:mu]:((![X2:mu>$i>$o]:(((positive @ X2) @ eigen__0) => ((X2 @ X1) @ eigen__0))) => (~(((![X2:mu>$i>$o]:(((positive @ X2) @ eigen__0) => ((X2 @ X1) @ eigen__0))) => (~((![X2:mu>$i>$o]:(((X2 @ X1) @ eigen__0) => (![X3:$i]:(((rel @ eigen__0) @ X3) => (![X4:mu]:((![X5:mu>$i>$o]:(((positive @ X5) @ X3) => ((X5 @ X4) @ X3))) => ((X2 @ X4) @ X3)))))))))))))))),introduced(assumption,[])). % 38.64/38.85 thf(h2,assumption,(~((sP17 => (~((sP17 => (~((![X1:mu>$i>$o]:(((X1 @ eigen__1) @ eigen__0) => (![X2:$i]:(((rel @ eigen__0) @ X2) => (![X3:mu]:((![X4:mu>$i>$o]:(((positive @ X4) @ X2) => ((X4 @ X3) @ X2))) => ((X1 @ X3) @ X2))))))))))))))),introduced(assumption,[])). % 38.64/38.85 thf(h3,assumption,sP17,introduced(assumption,[])). % 38.64/38.85 thf(h4,assumption,(sP17 => (~((![X1:mu>$i>$o]:(((X1 @ eigen__1) @ eigen__0) => (![X2:$i]:(((rel @ eigen__0) @ X2) => (![X3:mu]:((![X4:mu>$i>$o]:(((positive @ X4) @ X2) => ((X4 @ X3) @ X2))) => ((X1 @ X3) @ X2)))))))))),introduced(assumption,[])). % 38.64/38.85 thf(h5,assumption,(~(sP17)),introduced(assumption,[])). % 38.64/38.85 thf(h6,assumption,(~((![X1:mu>$i>$o]:(((X1 @ eigen__1) @ eigen__0) => (![X2:$i]:(((rel @ eigen__0) @ X2) => (![X3:mu]:((![X4:mu>$i>$o]:(((positive @ X4) @ X2) => ((X4 @ X3) @ X2))) => ((X1 @ X3) @ X2))))))))),introduced(assumption,[])). % 38.64/38.85 thf(h7,assumption,(~(sP11)),introduced(assumption,[])). % 38.64/38.85 thf(h8,assumption,sP1,introduced(assumption,[])). % 38.64/38.85 thf(h9,assumption,(~(sP18)),introduced(assumption,[])). % 38.64/38.85 thf(1,plain,((~(sP11) | ~(sP1)) | sP18),inference(prop_rule,[status(thm)],[])). % 38.64/38.85 thf(2,plain,(~(sP17) | sP11),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(3,plain,$false,inference(prop_unsat,[status(thm),assumptions([h8,h9,h7,h5,h3,h4,h2,h1,h0])],[1,2,h3,h8,h9])). % 38.64/38.85 thf(4,plain,$false,inference(tab_negimp,[status(thm),assumptions([h7,h5,h3,h4,h2,h1,h0]),tab_negimp(discharge,[h8,h9])],[h7,3,h8,h9])). % 38.64/38.85 thf(5,plain,$false,inference(tab_negall,[status(thm),assumptions([h5,h3,h4,h2,h1,h0]),tab_negall(discharge,[h7]),tab_negall(eigenvar,eigen__2)],[h5,4,h7])). % 38.64/38.85 thf(h10,assumption,(~((sP20 => (![X1:$i]:(((rel @ eigen__0) @ X1) => (![X2:mu]:((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => ((eigen__3 @ X2) @ X1)))))))),introduced(assumption,[])). % 38.64/38.85 thf(h11,assumption,sP20,introduced(assumption,[])). % 38.64/38.85 thf(h12,assumption,(~((![X1:$i]:(((rel @ eigen__0) @ X1) => (![X2:mu]:((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => ((eigen__3 @ X2) @ X1))))))),introduced(assumption,[])). % 38.64/38.85 thf(h13,assumption,(~((sP15 => (![X1:mu]:((![X2:mu>$i>$o]:(((positive @ X2) @ eigen__4) => ((X2 @ X1) @ eigen__4))) => ((eigen__3 @ X1) @ eigen__4)))))),introduced(assumption,[])). % 38.64/38.85 thf(h14,assumption,sP15,introduced(assumption,[])). % 38.64/38.85 thf(h15,assumption,(~((![X1:mu]:((![X2:mu>$i>$o]:(((positive @ X2) @ eigen__4) => ((X2 @ X1) @ eigen__4))) => ((eigen__3 @ X1) @ eigen__4))))),introduced(assumption,[])). % 38.64/38.85 thf(h16,assumption,(~((sP5 => sP14))),introduced(assumption,[])). % 38.64/38.85 thf(h17,assumption,sP5,introduced(assumption,[])). % 38.64/38.85 thf(h18,assumption,(~(sP14)),introduced(assumption,[])). % 38.64/38.85 thf(6,plain,((~(sP16) | ~(sP15)) | sP12),inference(prop_rule,[status(thm)],[])). % 38.64/38.85 thf(7,plain,((~(sP8) | ~(sP9)) | ~(sP20)),inference(prop_rule,[status(thm)],[])). % 38.64/38.85 thf(8,plain,(~(sP4) | sP16),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(9,plain,((~(sP6) | sP9) | sP2),inference(prop_rule,[status(thm)],[])). % 38.64/38.85 thf(10,plain,(~(sP17) | sP8),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(11,plain,((~(sP10) | ~(sP2)) | sP4),inference(prop_rule,[status(thm)],[])). % 38.64/38.85 thf(12,plain,(~(sP19) | sP6),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(13,plain,(~(sP3) | sP10),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(14,plain,((~(sP13) | ~(sP12)) | sP14),inference(prop_rule,[status(thm)],[])). % 38.64/38.85 thf(15,plain,(~(sP7) | sP19),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(16,plain,(~(sP21) | sP3),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(17,plain,(~(sP5) | sP13),inference(all_rule,[status(thm)],[])). % 38.64/38.85 thf(axA1,axiom,(mvalid @ (mforall_indset @ (^[X1:mu>$i>$o]:((mequiv @ (positive @ (^[X2:mu]:(mnot @ (X1 @ X2))))) @ (mnot @ (positive @ X1))))))). % 38.64/38.85 thf(18,plain,sP7,inference(preprocess,[status(thm)],[axA1]). % 38.64/38.85 thf(axA4,axiom,(mvalid @ (mforall_indset @ (^[X1:mu>$i>$o]:((mimplies @ (positive @ X1)) @ (mbox @ (positive @ X1))))))). % 38.64/38.85 thf(19,plain,sP21,inference(preprocess,[status(thm)],[axA4]). % 38.64/38.85 thf(20,plain,$false,inference(prop_unsat,[status(thm),assumptions([h17,h18,h16,h14,h15,h13,h11,h12,h10,h6,h3,h4,h2,h1,h0])],[6,7,8,9,10,11,12,13,14,15,16,17,18,19,h3,h11,h14,h17,h18])). % 38.64/38.85 thf(21,plain,$false,inference(tab_negimp,[status(thm),assumptions([h16,h14,h15,h13,h11,h12,h10,h6,h3,h4,h2,h1,h0]),tab_negimp(discharge,[h17,h18])],[h16,20,h17,h18])). % 38.64/38.85 thf(22,plain,$false,inference(tab_negall,[status(thm),assumptions([h14,h15,h13,h11,h12,h10,h6,h3,h4,h2,h1,h0]),tab_negall(discharge,[h16]),tab_negall(eigenvar,eigen__5)],[h15,21,h16])). % 38.64/38.85 thf(23,plain,$false,inference(tab_negimp,[status(thm),assumptions([h13,h11,h12,h10,h6,h3,h4,h2,h1,h0]),tab_negimp(discharge,[h14,h15])],[h13,22,h14,h15])). % 38.64/38.85 thf(24,plain,$false,inference(tab_negall,[status(thm),assumptions([h11,h12,h10,h6,h3,h4,h2,h1,h0]),tab_negall(discharge,[h13]),tab_negall(eigenvar,eigen__4)],[h12,23,h13])). % 38.64/38.85 thf(25,plain,$false,inference(tab_negimp,[status(thm),assumptions([h10,h6,h3,h4,h2,h1,h0]),tab_negimp(discharge,[h11,h12])],[h10,24,h11,h12])). % 38.64/38.85 thf(26,plain,$false,inference(tab_negall,[status(thm),assumptions([h6,h3,h4,h2,h1,h0]),tab_negall(discharge,[h10]),tab_negall(eigenvar,eigen__3)],[h6,25,h10])). % 38.64/38.85 thf(27,plain,$false,inference(tab_imp,[status(thm),assumptions([h3,h4,h2,h1,h0]),tab_imp(discharge,[h5]),tab_imp(discharge,[h6])],[h4,5,26,h5,h6])). % 38.64/38.85 thf(28,plain,$false,inference(tab_negimp,[status(thm),assumptions([h2,h1,h0]),tab_negimp(discharge,[h3,h4])],[h2,27,h3,h4])). % 38.64/38.85 thf(29,plain,$false,inference(tab_negall,[status(thm),assumptions([h1,h0]),tab_negall(discharge,[h2]),tab_negall(eigenvar,eigen__1)],[h1,28,h2])). % 38.64/38.85 thf(30,plain,$false,inference(tab_negall,[status(thm),assumptions([h0]),tab_negall(discharge,[h1]),tab_negall(eigenvar,eigen__0)],[h0,29,h1])). % 38.64/38.85 thf(0,theorem,(![X1:$i]:(![X2:mu]:((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => (~(((![X3:mu>$i>$o]:(((positive @ X3) @ X1) => ((X3 @ X2) @ X1))) => (~((![X3:mu>$i>$o]:(((X3 @ X2) @ X1) => (![X4:$i]:(((rel @ X1) @ X4) => (![X5:mu]:((![X6:mu>$i>$o]:(((positive @ X6) @ X4) => ((X6 @ X5) @ X4))) => ((X3 @ X5) @ X4))))))))))))))),inference(contra,[status(thm),contra(discharge,[h0])],[30,h0])). % 38.64/38.85 % SZS output end Proof %------------------------------------------------------------------------------