TSTP Solution File: GRP128-1.003 by cvc5---1.0.5

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : cvc5---1.0.5
% Problem  : GRP128-1.003 : TPTP v8.1.2. Released v1.2.0.
% Transfm  : none
% Format   : tptp
% Command  : do_cvc5 %s %d

% Computer : n016.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 Aug 31 00:24:37 EDT 2023

% Result   : Unsatisfiable 0.19s 0.55s
% Output   : Proof 0.19s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.12/0.12  % Problem    : GRP128-1.003 : TPTP v8.1.2. Released v1.2.0.
% 0.12/0.13  % Command    : do_cvc5 %s %d
% 0.13/0.34  % Computer : n016.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   : Tue Aug 29 01:49:30 EDT 2023
% 0.13/0.34  % CPUTime    : 
% 0.19/0.48  %----Proving TF0_NAR, FOF, or CNF
% 0.19/0.48  ------- convert to smt2 : /export/starexec/sandbox/tmp/tmp.fzvMRPhM0u/cvc5---1.0.5_31549.p...
% 0.19/0.49  ------- get file name : TPTP file name is GRP128-1.003
% 0.19/0.49  ------- cvc5-fof : /export/starexec/sandbox/solver/bin/cvc5---1.0.5_31549.smt2...
% 0.19/0.49  --- Run --decision=internal --simplification=none --no-inst-no-entail --no-cbqi --full-saturate-quant at 10...
% 0.19/0.55  % SZS status Unsatisfiable for GRP128-1.003
% 0.19/0.55  % SZS output start Proof for GRP128-1.003
% 0.19/0.56  (
% 0.19/0.56  (let ((_let_1 (forall ((X $$unsorted) (Y $$unsorted) (Z1 $$unsorted) (Z2 $$unsorted)) (or (not (tptp.product X Y Z1)) (not (tptp.product Z1 Y Z2)) (tptp.product X Z1 Z2))))) (let ((_let_2 (forall ((W $$unsorted) (Y $$unsorted) (X $$unsorted) (Z $$unsorted)) (or (not (tptp.product W Y X)) (not (tptp.product Z Y X)) (tptp.equalish W Z))))) (let ((_let_3 (forall ((X $$unsorted) (W $$unsorted) (Y $$unsorted) (Z $$unsorted)) (or (not (tptp.product X W Y)) (not (tptp.product X Z Y)) (tptp.equalish W Z))))) (let ((_let_4 (forall ((X $$unsorted) (Y $$unsorted)) (or (not (tptp.group_element X)) (not (tptp.group_element Y)) (tptp.product X Y tptp.e_1) (tptp.product X Y tptp.e_2) (tptp.product X Y tptp.e_3))))) (let ((_let_5 (tptp.equalish tptp.e_3 tptp.e_2))) (let ((_let_6 (not _let_5))) (let ((_let_7 (tptp.equalish tptp.e_3 tptp.e_1))) (let ((_let_8 (not _let_7))) (let ((_let_9 (tptp.equalish tptp.e_2 tptp.e_3))) (let ((_let_10 (not _let_9))) (let ((_let_11 (tptp.equalish tptp.e_1 tptp.e_3))) (let ((_let_12 (not _let_11))) (let ((_let_13 (tptp.equalish tptp.e_1 tptp.e_2))) (let ((_let_14 (not _let_13))) (let ((_let_15 (tptp.group_element tptp.e_3))) (let ((_let_16 (tptp.group_element tptp.e_2))) (let ((_let_17 (tptp.group_element tptp.e_1))) (let ((_let_18 (tptp.product tptp.e_3 tptp.e_3 tptp.e_3))) (let ((_let_19 (tptp.product tptp.e_3 tptp.e_3 tptp.e_2))) (let ((_let_20 (tptp.product tptp.e_3 tptp.e_3 tptp.e_1))) (let ((_let_21 (not _let_15))) (let ((_let_22 (or _let_21 _let_21 _let_20 _let_19 _let_18))) (let ((_let_23 (ASSUME :args (_let_15)))) (let ((_let_24 (_let_4))) (let ((_let_25 (ASSUME :args _let_24))) (let ((_let_26 ((not (= (tptp.group_element X) false)) (not (= (tptp.group_element Y) false))))) (let ((_let_27 (tptp.product tptp.e_1 tptp.e_3 tptp.e_1))) (let ((_let_28 (not _let_20))) (let ((_let_29 (tptp.product tptp.e_1 tptp.e_3 tptp.e_3))) (let ((_let_30 (not _let_29))) (let ((_let_31 (or _let_30 _let_28 _let_27))) (let ((_let_32 (_let_1))) (let ((_let_33 (ASSUME :args _let_32))) (let ((_let_34 (not (= (tptp.product X Y Z1) false)))) (let ((_let_35 ((not (= (tptp.product X Z1 Z2) true)) _let_34))) (let ((_let_36 (tptp.product tptp.e_1 tptp.e_3 tptp.e_2))) (let ((_let_37 (not _let_17))) (let ((_let_38 (or _let_37 _let_21 _let_27 _let_36 _let_29))) (let ((_let_39 (tptp.product tptp.e_1 tptp.e_1 tptp.e_2))) (let ((_let_40 (not _let_39))) (let ((_let_41 (not _let_36))) (let ((_let_42 (or _let_41 _let_40 _let_7))) (let ((_let_43 (_let_3))) (let ((_let_44 (ASSUME :args _let_43))) (let ((_let_45 ((not (= (tptp.product X Z Y) false)) (not (= (tptp.equalish W Z) true))))) (let ((_let_46 (tptp.product tptp.e_1 tptp.e_1 tptp.e_3))) (let ((_let_47 (tptp.product tptp.e_1 tptp.e_1 tptp.e_1))) (let ((_let_48 (or _let_37 _let_37 _let_47 _let_39 _let_46))) (let ((_let_49 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_25 :args (tptp.e_1 tptp.e_1 QUANTIFIERS_INST_ENUM)) :args _let_24)) _let_25 :args (_let_48 false _let_4)))) (let ((_let_50 (tptp.product tptp.e_2 tptp.e_1 tptp.e_3))) (let ((_let_51 (not _let_46))) (let ((_let_52 (tptp.product tptp.e_2 tptp.e_1 tptp.e_1))) (let ((_let_53 (not _let_52))) (let ((_let_54 (or _let_53 _let_51 _let_50))) (let ((_let_55 (_let_34 (not (= (tptp.product Z1 Y Z2) false))))) (let ((_let_56 (tptp.product tptp.e_2 tptp.e_1 tptp.e_2))) (let ((_let_57 (not _let_16))) (let ((_let_58 (or _let_57 _let_37 _let_52 _let_56 _let_50))) (let ((_let_59 (tptp.product tptp.e_3 tptp.e_1 tptp.e_3))) (let ((_let_60 (not _let_59))) (let ((_let_61 (not _let_50))) (let ((_let_62 (or _let_61 _let_60 _let_9))) (let ((_let_63 (or _let_51 _let_61 _let_13))) (let ((_let_64 (tptp.product tptp.e_2 tptp.e_3 tptp.e_2))) (let ((_let_65 (tptp.product tptp.e_3 tptp.e_1 tptp.e_2))) (let ((_let_66 (not _let_65))) (let ((_let_67 (or _let_61 _let_66 _let_64))) (let ((_let_68 (tptp.product tptp.e_3 tptp.e_1 tptp.e_1))) (let ((_let_69 (or _let_21 _let_37 _let_68 _let_65 _let_59))) (let ((_let_70 (not _let_68))) (let ((_let_71 (not _let_47))) (let ((_let_72 (or _let_71 _let_70 _let_11))) (let ((_let_73 (or _let_70 _let_40 _let_65))) (let ((_let_74 (ASSUME :args (_let_10)))) (let ((_let_75 (_let_2))) (let ((_let_76 (ASSUME :args _let_75))) (let ((_let_77 ((not (= (tptp.product W Y X) false)) (not (= (tptp.equalish W Z) true))))) (let ((_let_78 (ASSUME :args (_let_14)))) (let ((_let_79 (tptp.product tptp.e_2 tptp.e_2 tptp.e_2))) (let ((_let_80 (not _let_64))) (let ((_let_81 (or _let_80 _let_80 _let_79))) (let ((_let_82 (not _let_79))) (let ((_let_83 (or _let_80 _let_82 _let_5))) (let ((_let_84 (ASSUME :args (_let_17)))) (let ((_let_85 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_25 :args (tptp.e_3 tptp.e_1 QUANTIFIERS_INST_E_MATCHING _let_26)) :args _let_24)) _let_25 :args (_let_69 false _let_4)))) (let ((_let_86 (REORDERING (CNF_OR_POS :args (_let_69)) :args ((or _let_37 _let_21 _let_68 _let_65 _let_59 (not _let_69)))))) (let ((_let_87 (ASSUME :args (_let_12)))) (let ((_let_88 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_76 :args (tptp.e_1 tptp.e_1 tptp.e_1 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_77)) :args _let_75)) _let_76 :args (_let_72 false _let_2)))) (let ((_let_89 (REORDERING (CNF_OR_POS :args (_let_72)) :args ((or _let_11 _let_71 _let_70 (not _let_72)))))) (let ((_let_90 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_3 tptp.e_1 tptp.e_1 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_55)) :args _let_32)) _let_33 :args (_let_73 false _let_1)))) (let ((_let_91 (REORDERING (CNF_OR_POS :args (_let_73)) :args ((or _let_40 _let_65 _let_70 (not _let_73)))))) (let ((_let_92 (REORDERING (FACTORING (CNF_OR_POS :args (_let_48))) :args ((or _let_37 _let_47 _let_39 _let_46 (not _let_48)))))) (let ((_let_93 (MACRO_RESOLUTION_TRUST _let_92 _let_49 _let_84 _let_91 _let_90 _let_89 _let_88 _let_87 _let_86 _let_85 _let_23 _let_84 (REORDERING (CNF_OR_POS :args (_let_67)) :args ((or _let_61 _let_66 _let_64 (not _let_67)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_2 tptp.e_1 tptp.e_3 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_55)) :args _let_32)) _let_33 :args (_let_67 false _let_1)) (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_83)) :args ((or _let_5 _let_82 _let_80 (not _let_83)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_44 :args (tptp.e_2 tptp.e_3 tptp.e_2 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_45)) :args _let_43)) _let_44 :args (_let_83 false _let_3)) (ASSUME :args (_let_6)) (REORDERING (FACTORING (CNF_OR_POS :args (_let_81))) :args ((or _let_79 _let_80 (not _let_81)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_2 tptp.e_3 tptp.e_2 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_35)) :args _let_32)) _let_33 :args (_let_81 false _let_1)) :args (_let_80 false _let_83 true _let_5 false _let_79 false _let_81)) (REORDERING (CNF_OR_POS :args (_let_63)) :args ((or _let_13 _let_51 _let_61 (not _let_63)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_76 :args (tptp.e_1 tptp.e_1 tptp.e_3 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_77)) :args _let_75)) _let_76 :args (_let_63 false _let_2)) _let_78 (REORDERING (CNF_OR_POS :args (_let_62)) :args ((or _let_9 _let_61 _let_60 (not _let_62)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_76 :args (tptp.e_2 tptp.e_1 tptp.e_3 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_77)) :args _let_75)) _let_76 :args (_let_62 false _let_2)) _let_74 :args (_let_61 false _let_48 false _let_17 true _let_39 false _let_73 true _let_47 false _let_72 true _let_11 false _let_68 false _let_69 false _let_15 false _let_17 true _let_65 false _let_67 true _let_64 true _let_46 false _let_63 true _let_13 true _let_59 false _let_62 true _let_9)))) (let ((_let_94 (not _let_56))) (let ((_let_95 (or _let_94 _let_66 _let_9))) (let ((_let_96 (or _let_70 _let_51 _let_59))) (let ((_let_97 (not _let_18))) (let ((_let_98 (or _let_60 _let_97 _let_11))) (let ((_let_99 (or _let_60 _let_60 _let_18))) (let ((_let_100 (MACRO_RESOLUTION_TRUST (REORDERING (FACTORING (CNF_OR_POS :args (_let_99))) :args ((or _let_18 _let_60 (not _let_99)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_3 tptp.e_1 tptp.e_3 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_55)) :args _let_32)) _let_33 :args (_let_99 false _let_1)) (REORDERING (CNF_OR_POS :args (_let_98)) :args ((or _let_11 _let_97 _let_60 (not _let_98)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_44 :args (tptp.e_3 tptp.e_1 tptp.e_3 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_45)) :args _let_43)) _let_44 :args (_let_98 false _let_3)) _let_87 :args (_let_60 false _let_99 true _let_18 false _let_98 true _let_11)))) (let ((_let_101 (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_58)) :args ((or _let_37 _let_57 _let_52 _let_56 _let_50 (not _let_58)))) _let_84 (ASSUME :args (_let_16)) (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_95)) :args ((or _let_9 _let_94 _let_66 (not _let_95)))) _let_74 (MACRO_RESOLUTION_TRUST _let_92 _let_49 _let_84 (REORDERING (CNF_OR_POS :args (_let_96)) :args ((or _let_51 _let_59 _let_70 (not _let_96)))) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_3 tptp.e_1 tptp.e_1 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_35)) :args _let_32)) _let_33 :args (_let_96 false _let_1)) _let_100 _let_91 _let_90 _let_89 _let_88 _let_87 _let_86 _let_100 _let_85 _let_23 _let_84 :args (_let_65 false _let_48 false _let_17 true _let_46 false _let_96 true _let_59 true _let_39 false _let_73 true _let_47 false _let_72 true _let_11 false _let_68 true _let_59 false _let_69 false _let_15 false _let_17)) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_76 :args (tptp.e_2 tptp.e_1 tptp.e_2 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_77)) :args _let_75)) _let_76 :args (_let_95 false _let_2)) :args (_let_94 true _let_9 false _let_65 false _let_95)) _let_93 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_25 :args (tptp.e_2 tptp.e_1 QUANTIFIERS_INST_E_MATCHING _let_26)) :args _let_24)) _let_25 :args (_let_58 false _let_4)) :args (_let_52 false _let_17 false _let_16 true _let_56 true _let_50 false _let_58)))) (let ((_let_102 (or _let_71 _let_53 _let_13))) (let ((_let_103 (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_102)) :args ((or _let_13 _let_71 _let_53 (not _let_102)))) _let_78 _let_101 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_76 :args (tptp.e_1 tptp.e_1 tptp.e_1 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_77)) :args _let_75)) _let_76 :args (_let_102 false _let_2)) :args (_let_71 true _let_13 false _let_52 false _let_102)))) (let ((_let_104 (ASSUME :args (_let_8)))) (let ((_let_105 (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_42)) :args ((or _let_7 _let_40 _let_41 (not _let_42)))) _let_104 (MACRO_RESOLUTION_TRUST _let_92 _let_84 _let_103 (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_54)) :args ((or _let_51 _let_50 _let_53 (not _let_54)))) _let_93 _let_101 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_2 tptp.e_1 tptp.e_1 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_55)) :args _let_32)) _let_33 :args (_let_54 false _let_1)) :args (_let_51 true _let_50 false _let_52 false _let_54)) _let_49 :args (_let_39 false _let_17 true _let_47 true _let_46 false _let_48)) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_44 :args (tptp.e_1 tptp.e_3 tptp.e_2 tptp.e_1 QUANTIFIERS_INST_E_MATCHING _let_45)) :args _let_43)) _let_44 :args (_let_42 false _let_3)) :args (_let_41 true _let_7 false _let_39 false _let_42)))) (let ((_let_106 (not _let_27))) (let ((_let_107 (or _let_106 _let_106 _let_47))) (let ((_let_108 (MACRO_RESOLUTION_TRUST (REORDERING (FACTORING (CNF_OR_POS :args (_let_107))) :args ((or _let_47 _let_106 (not _let_107)))) _let_103 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_1 tptp.e_3 tptp.e_1 tptp.e_1 QUANTIFIERS_INST_E_MATCHING _let_35)) :args _let_32)) _let_33 :args (_let_107 false _let_1)) :args (_let_106 true _let_47 false _let_107)))) (let ((_let_109 (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_38)) :args ((or _let_37 _let_21 _let_27 _let_36 _let_29 (not _let_38)))) _let_84 _let_23 _let_108 _let_105 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_25 :args (tptp.e_1 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_26)) :args _let_24)) _let_25 :args (_let_38 false _let_4)) :args (_let_29 false _let_17 false _let_15 true _let_27 true _let_36 false _let_38)))) (let ((_let_110 (or _let_97 _let_30 _let_7))) (let ((_let_111 (not _let_19))) (let ((_let_112 (or _let_30 _let_111 _let_36))) (SCOPE (SCOPE (MACRO_RESOLUTION_TRUST (REORDERING (FACTORING (CNF_OR_POS :args (_let_22))) :args ((or _let_21 _let_20 _let_19 _let_18 (not _let_22)))) (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_112)) :args ((or _let_111 _let_36 _let_30 (not _let_112)))) _let_105 _let_109 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_1 tptp.e_3 tptp.e_3 tptp.e_2 QUANTIFIERS_INST_E_MATCHING _let_55)) :args _let_32)) _let_33 :args (_let_112 false _let_1)) :args (_let_111 true _let_36 false _let_29 false _let_112)) (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_110)) :args ((or _let_7 _let_97 _let_30 (not _let_110)))) _let_104 _let_109 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_76 :args (tptp.e_3 tptp.e_3 tptp.e_3 tptp.e_1 QUANTIFIERS_INST_E_MATCHING _let_77)) :args _let_75)) _let_76 :args (_let_110 false _let_2)) :args (_let_97 true _let_7 false _let_29 false _let_110)) (MACRO_RESOLUTION_TRUST (REORDERING (CNF_OR_POS :args (_let_31)) :args ((or _let_28 _let_27 _let_30 (not _let_31)))) _let_108 _let_109 (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_33 :args (tptp.e_1 tptp.e_3 tptp.e_3 tptp.e_1 QUANTIFIERS_INST_E_MATCHING _let_35)) :args _let_32)) _let_33 :args (_let_31 false _let_1)) :args (_let_28 true _let_27 false _let_29 false _let_31)) (MACRO_RESOLUTION_TRUST (IMPLIES_ELIM (SCOPE (INSTANTIATE _let_25 :args (tptp.e_3 tptp.e_3 QUANTIFIERS_INST_E_MATCHING _let_26)) :args _let_24)) _let_25 :args (_let_22 false _let_4)) _let_23 :args (false true _let_19 true _let_18 true _let_20 false _let_22 false _let_15)) :args (_let_17 _let_16 _let_15 _let_14 _let_12 (not (tptp.equalish tptp.e_2 tptp.e_1)) _let_10 _let_8 _let_6 _let_4 (forall ((X $$unsorted) (Y $$unsorted) (W $$unsorted) (Z $$unsorted)) (or (not (tptp.product X Y W)) (not (tptp.product X Y Z)) (tptp.equalish W Z))) _let_3 _let_2 _let_1)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
% 0.19/0.56  )
% 0.19/0.56  % SZS output end Proof for GRP128-1.003
% 0.19/0.56  % cvc5---1.0.5 exiting
% 0.19/0.57  % cvc5---1.0.5 exiting
%------------------------------------------------------------------------------