TSTP Solution File: ITP001+1 by Princess---230619
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Princess---230619
% Problem : ITP001+1 : TPTP v8.1.2. Bugfixed v7.5.0.
% Transfm : none
% Format : tptp
% Command : princess -inputFormat=tptp +threads -portfolio=casc +printProof -timeoutSec=%d %s
% Computer : n012.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 04:08:14 EDT 2023
% Result : Theorem 8.84s 1.97s
% Output : Proof 11.20s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12 % Problem : ITP001+1 : TPTP v8.1.2. Bugfixed v7.5.0.
% 0.00/0.13 % Command : princess -inputFormat=tptp +threads -portfolio=casc +printProof -timeoutSec=%d %s
% 0.12/0.34 % Computer : n012.cluster.edu
% 0.12/0.34 % Model : x86_64 x86_64
% 0.12/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.34 % Memory : 8042.1875MB
% 0.12/0.34 % OS : Linux 3.10.0-693.el7.x86_64
% 0.12/0.34 % CPULimit : 300
% 0.12/0.34 % WCLimit : 300
% 0.12/0.34 % DateTime : Sun Aug 27 11:55:55 EDT 2023
% 0.12/0.34 % CPUTime :
% 0.19/0.61 ________ _____
% 0.19/0.61 ___ __ \_________(_)________________________________
% 0.19/0.61 __ /_/ /_ ___/_ /__ __ \ ___/ _ \_ ___/_ ___/
% 0.19/0.61 _ ____/_ / _ / _ / / / /__ / __/(__ )_(__ )
% 0.19/0.61 /_/ /_/ /_/ /_/ /_/\___/ \___//____/ /____/
% 0.19/0.61
% 0.19/0.61 A Theorem Prover for First-Order Logic modulo Linear Integer Arithmetic
% 0.19/0.61 (2023-06-19)
% 0.19/0.61
% 0.19/0.61 (c) Philipp Rümmer, 2009-2023
% 0.19/0.61 Contributors: Peter Backeman, Peter Baumgartner, Angelo Brillout, Zafer Esen,
% 0.19/0.61 Amanda Stjerna.
% 0.19/0.61 Free software under BSD-3-Clause.
% 0.19/0.61
% 0.19/0.61 For more information, visit http://www.philipp.ruemmer.org/princess.shtml
% 0.19/0.61
% 0.19/0.61 Loading /export/starexec/sandbox/benchmark/theBenchmark.p ...
% 0.19/0.62 Running up to 7 provers in parallel.
% 0.19/0.65 Prover 0: Options: +triggersInConjecture +genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=0 -ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=1042961893
% 0.19/0.65 Prover 2: Options: +triggersInConjecture +genTotalityAxioms -tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allMinimalAndEmpty -realRatSaturationRounds=1 -ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=-1065072994
% 0.19/0.65 Prover 1: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-1571432423
% 0.19/0.65 Prover 3: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=1922548996
% 0.19/0.65 Prover 4: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=1868514696
% 0.19/0.65 Prover 5: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=none +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allMaximal -realRatSaturationRounds=1 -ignoreQuantifiers -constructProofs=never -generateTriggers=complete -randomSeed=1259561288
% 0.19/0.65 Prover 6: Options: -triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=none +reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximalOutermost -realRatSaturationRounds=0 -ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=-1399714365
% 2.91/1.14 Prover 1: Preprocessing ...
% 2.91/1.14 Prover 4: Preprocessing ...
% 3.44/1.18 Prover 0: Preprocessing ...
% 3.44/1.18 Prover 6: Preprocessing ...
% 3.44/1.18 Prover 5: Preprocessing ...
% 3.44/1.18 Prover 3: Preprocessing ...
% 3.44/1.18 Prover 2: Preprocessing ...
% 8.30/1.87 Prover 6: Proving ...
% 8.30/1.91 Prover 1: Constructing countermodel ...
% 8.30/1.93 Prover 3: Constructing countermodel ...
% 8.84/1.95 Prover 0: Proving ...
% 8.84/1.95 Prover 4: Constructing countermodel ...
% 8.84/1.97 Prover 3: proved (1335ms)
% 8.84/1.97
% 8.84/1.97 % SZS status Theorem for /export/starexec/sandbox/benchmark/theBenchmark.p
% 8.84/1.97
% 8.84/1.98 Prover 7: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-236303470
% 8.84/1.98 Prover 0: stopped
% 8.84/1.99 Prover 6: stopped
% 8.84/1.99 Prover 8: Options: +triggersInConjecture +genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-200781089
% 8.84/1.99 Prover 10: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=919308125
% 8.84/2.04 Prover 2: Proving ...
% 8.84/2.05 Prover 7: Preprocessing ...
% 8.84/2.06 Prover 2: stopped
% 8.84/2.06 Prover 11: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-1509710984
% 9.10/2.08 Prover 8: Preprocessing ...
% 9.10/2.08 Prover 10: Preprocessing ...
% 9.10/2.12 Prover 5: Proving ...
% 9.10/2.12 Prover 5: stopped
% 9.10/2.12 Prover 11: Preprocessing ...
% 9.10/2.12 Prover 13: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=complete -randomSeed=1138197443
% 10.29/2.16 Prover 13: Preprocessing ...
% 10.29/2.19 Prover 1: Found proof (size 24)
% 10.29/2.19 Prover 1: proved (1552ms)
% 10.29/2.19 Prover 4: Found proof (size 25)
% 10.29/2.19 Prover 4: proved (1551ms)
% 10.29/2.20 Prover 11: stopped
% 10.85/2.23 Prover 8: Warning: ignoring some quantifiers
% 10.85/2.25 Prover 8: Constructing countermodel ...
% 10.85/2.26 Prover 7: Constructing countermodel ...
% 10.85/2.26 Prover 8: stopped
% 10.85/2.26 Prover 10: Constructing countermodel ...
% 11.20/2.27 Prover 7: stopped
% 11.20/2.27 Prover 13: stopped
% 11.20/2.27 Prover 10: stopped
% 11.20/2.27
% 11.20/2.27 % SZS status Theorem for /export/starexec/sandbox/benchmark/theBenchmark.p
% 11.20/2.27
% 11.20/2.28 % SZS output start Proof for theBenchmark
% 11.20/2.28 Assumptions after simplification:
% 11.20/2.28 ---------------------------------
% 11.20/2.28
% 11.20/2.28 (reserved_2Eho_2Ebool__cases__ax)
% 11.20/2.31 $i(c_2Ebool_2EF_2E0) & $i(c_2Ebool_2ET_2E0) & $i(tyop_2Emin_2Ebool) & ? [v0:
% 11.20/2.31 $i] : ? [v1: $i] : (s(tyop_2Emin_2Ebool, c_2Ebool_2EF_2E0) = v1 &
% 11.20/2.31 s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0 & $i(v1) & $i(v0) & ! [v2: $i]
% 11.20/2.31 : ! [v3: $i] : (v3 = v1 | v3 = v0 | ~ (s(tyop_2Emin_2Ebool, v2) = v3) | ~
% 11.20/2.31 $i(v2)))
% 11.20/2.31
% 11.20/2.31 (reserved_2Eho_2Etruth)
% 11.20/2.31 $i(c_2Ebool_2ET_2E0) & $i(tyop_2Emin_2Ebool) & ? [v0: $i] : (p(v0) = 0 &
% 11.20/2.31 s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0 & $i(v0))
% 11.20/2.31
% 11.20/2.31 (thm_2Ebool_2ETRUTH)
% 11.20/2.31 $i(c_2Ebool_2ET_2E0) & $i(tyop_2Emin_2Ebool) & ? [v0: $i] : ? [v1: int] : (
% 11.20/2.31 ~ (v1 = 0) & p(v0) = v1 & s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0 &
% 11.20/2.31 $i(v0))
% 11.20/2.31
% 11.20/2.31 (thm_2Ebool_2ET__DEF)
% 11.20/2.31 $i(c_2Ebool_2ET_2E0) & $i(tyop_2Emin_2Ebool) & ? [v0: $i] : (p(v0) = 0 &
% 11.20/2.31 s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0 & $i(v0))
% 11.20/2.31
% 11.20/2.31 (function-axioms)
% 11.20/2.32 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : (v1 = v0 | ~
% 11.20/2.32 (c_2Emin_2E_3D_2E2(v3, v2) = v1) | ~ (c_2Emin_2E_3D_2E2(v3, v2) = v0)) & !
% 11.20/2.32 [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : (v1 = v0 | ~
% 11.20/2.32 (c_2Emin_2E_3D_3D_3E_2E2(v3, v2) = v1) | ~ (c_2Emin_2E_3D_3D_3E_2E2(v3, v2)
% 11.20/2.32 = v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : (v1 = v0
% 11.20/2.32 | ~ (c_2Ebool_2E_5C_2F_2E2(v3, v2) = v1) | ~ (c_2Ebool_2E_5C_2F_2E2(v3,
% 11.20/2.32 v2) = v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : (v1
% 11.20/2.32 = v0 | ~ (c_2Ebool_2E_2F_5C_2E2(v3, v2) = v1) | ~
% 11.20/2.32 (c_2Ebool_2E_2F_5C_2E2(v3, v2) = v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2:
% 11.20/2.32 $i] : ! [v3: $i] : (v1 = v0 | ~ (tyop_2Emin_2Efun(v3, v2) = v1) | ~
% 11.20/2.32 (tyop_2Emin_2Efun(v3, v2) = v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2: $i] :
% 11.20/2.32 ! [v3: $i] : (v1 = v0 | ~ (app_2E2(v3, v2) = v1) | ~ (app_2E2(v3, v2) =
% 11.20/2.32 v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : (v1 = v0 |
% 11.20/2.32 ~ (s(v3, v2) = v1) | ~ (s(v3, v2) = v0)) & ! [v0: $i] : ! [v1: $i] : !
% 11.20/2.32 [v2: $i] : (v1 = v0 | ~ (c_2Ebool_2E_3F_2E1(v2) = v1) | ~
% 11.20/2.32 (c_2Ebool_2E_3F_2E1(v2) = v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2: $i] :
% 11.20/2.32 (v1 = v0 | ~ (c_2Ebool_2E_21_2E1(v2) = v1) | ~ (c_2Ebool_2E_21_2E1(v2) =
% 11.20/2.32 v0)) & ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : (v1 = v0 | ~
% 11.20/2.32 (c_2Ebool_2E_7E_2E1(v2) = v1) | ~ (c_2Ebool_2E_7E_2E1(v2) = v0)) & ! [v0:
% 11.20/2.32 MultipleValueBool] : ! [v1: MultipleValueBool] : ! [v2: $i] : (v1 = v0 |
% 11.20/2.32 ~ (p(v2) = v1) | ~ (p(v2) = v0))
% 11.20/2.32
% 11.20/2.32 Further assumptions not needed in the proof:
% 11.20/2.32 --------------------------------------------
% 11.20/2.32 arityeq1_2Ec_2Ebool_2E_21_2E1_2Emono_2EA_27a,
% 11.20/2.32 arityeq1_2Ec_2Ebool_2E_3F_2E1_2Emono_2EA_27a, arityeq1_2Ec_2Ebool_2E_7E_2E1,
% 11.20/2.32 arityeq2_2Ec_2Ebool_2E_2F_5C_2E2, arityeq2_2Ec_2Ebool_2E_5C_2F_2E2,
% 11.20/2.32 arityeq2_2Ec_2Emin_2E_3D_2E2_2Emono_2EA_27a, arityeq2_2Ec_2Emin_2E_3D_3D_3E_2E2,
% 11.20/2.32 reserved_2Eho_2Eboolext, reserved_2Eho_2Eeq__ext, reserved_2Eho_2Ei__thm,
% 11.20/2.32 reserved_2Eho_2Ek__thm, reserved_2Eho_2Enotfalse, reserved_2Eho_2Es__thm,
% 11.20/2.32 reserved_2Elogic_2E_2F_5C, reserved_2Elogic_2E_3D, reserved_2Elogic_2E_3D_3D_3E,
% 11.20/2.32 reserved_2Elogic_2E_5C_2F, reserved_2Elogic_2E_7E, reserved_2Equant_2E_21,
% 11.20/2.32 reserved_2Equant_2E_3F
% 11.20/2.32
% 11.20/2.32 Those formulas are unsatisfiable:
% 11.20/2.32 ---------------------------------
% 11.20/2.32
% 11.20/2.32 Begin of proof
% 11.20/2.32 |
% 11.20/2.32 | ALPHA: (reserved_2Eho_2Ebool__cases__ax) implies:
% 11.20/2.32 | (1) ? [v0: $i] : ? [v1: $i] : (s(tyop_2Emin_2Ebool, c_2Ebool_2EF_2E0) =
% 11.20/2.32 | v1 & s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0 & $i(v1) & $i(v0) &
% 11.20/2.32 | ! [v2: $i] : ! [v3: $i] : (v3 = v1 | v3 = v0 | ~
% 11.20/2.32 | (s(tyop_2Emin_2Ebool, v2) = v3) | ~ $i(v2)))
% 11.20/2.32 |
% 11.20/2.32 | ALPHA: (thm_2Ebool_2ET__DEF) implies:
% 11.20/2.32 | (2) ? [v0: $i] : (p(v0) = 0 & s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0
% 11.20/2.32 | & $i(v0))
% 11.20/2.32 |
% 11.20/2.32 | ALPHA: (thm_2Ebool_2ETRUTH) implies:
% 11.20/2.32 | (3) ? [v0: $i] : ? [v1: int] : ( ~ (v1 = 0) & p(v0) = v1 &
% 11.20/2.32 | s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = v0 & $i(v0))
% 11.20/2.32 |
% 11.20/2.32 | ALPHA: (function-axioms) implies:
% 11.20/2.32 | (4) ! [v0: MultipleValueBool] : ! [v1: MultipleValueBool] : ! [v2: $i] :
% 11.20/2.32 | (v1 = v0 | ~ (p(v2) = v1) | ~ (p(v2) = v0))
% 11.20/2.33 | (5) ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : (v1 = v0 | ~
% 11.20/2.33 | (s(v3, v2) = v1) | ~ (s(v3, v2) = v0))
% 11.20/2.33 |
% 11.20/2.33 | DELTA: instantiating (2) with fresh symbol all_19_0 gives:
% 11.20/2.33 | (6) p(all_19_0) = 0 & s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_19_0 &
% 11.20/2.33 | $i(all_19_0)
% 11.20/2.33 |
% 11.20/2.33 | ALPHA: (6) implies:
% 11.20/2.33 | (7) s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_19_0
% 11.20/2.33 |
% 11.20/2.33 | DELTA: instantiating (2) with fresh symbol all_21_0 gives:
% 11.20/2.33 | (8) p(all_21_0) = 0 & s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_21_0 &
% 11.20/2.33 | $i(all_21_0)
% 11.20/2.33 |
% 11.20/2.33 | ALPHA: (8) implies:
% 11.20/2.33 | (9) s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_21_0
% 11.20/2.33 | (10) p(all_21_0) = 0
% 11.20/2.33 |
% 11.20/2.33 | DELTA: instantiating (3) with fresh symbols all_25_0, all_25_1 gives:
% 11.20/2.33 | (11) ~ (all_25_0 = 0) & p(all_25_1) = all_25_0 & s(tyop_2Emin_2Ebool,
% 11.20/2.33 | c_2Ebool_2ET_2E0) = all_25_1 & $i(all_25_1)
% 11.20/2.33 |
% 11.20/2.33 | ALPHA: (11) implies:
% 11.20/2.33 | (12) ~ (all_25_0 = 0)
% 11.20/2.33 | (13) s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_25_1
% 11.20/2.33 | (14) p(all_25_1) = all_25_0
% 11.20/2.33 |
% 11.20/2.33 | DELTA: instantiating (1) with fresh symbols all_27_0, all_27_1 gives:
% 11.20/2.33 | (15) s(tyop_2Emin_2Ebool, c_2Ebool_2EF_2E0) = all_27_0 &
% 11.20/2.33 | s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_27_1 & $i(all_27_0) &
% 11.20/2.33 | $i(all_27_1) & ! [v0: $i] : ! [v1: int] : (v1 = all_27_0 | v1 =
% 11.20/2.33 | all_27_1 | ~ (s(tyop_2Emin_2Ebool, v0) = v1) | ~ $i(v0))
% 11.20/2.33 |
% 11.20/2.33 | ALPHA: (15) implies:
% 11.20/2.33 | (16) s(tyop_2Emin_2Ebool, c_2Ebool_2ET_2E0) = all_27_1
% 11.20/2.33 |
% 11.20/2.33 | GROUND_INST: instantiating (5) with all_19_0, all_25_1, c_2Ebool_2ET_2E0,
% 11.20/2.33 | tyop_2Emin_2Ebool, simplifying with (7), (13) gives:
% 11.20/2.33 | (17) all_25_1 = all_19_0
% 11.20/2.33 |
% 11.20/2.33 | GROUND_INST: instantiating (5) with all_25_1, all_27_1, c_2Ebool_2ET_2E0,
% 11.20/2.33 | tyop_2Emin_2Ebool, simplifying with (13), (16) gives:
% 11.20/2.33 | (18) all_27_1 = all_25_1
% 11.20/2.33 |
% 11.20/2.33 | GROUND_INST: instantiating (5) with all_21_0, all_27_1, c_2Ebool_2ET_2E0,
% 11.20/2.33 | tyop_2Emin_2Ebool, simplifying with (9), (16) gives:
% 11.20/2.33 | (19) all_27_1 = all_21_0
% 11.20/2.33 |
% 11.20/2.33 | COMBINE_EQS: (18), (19) imply:
% 11.20/2.33 | (20) all_25_1 = all_21_0
% 11.20/2.33 |
% 11.20/2.33 | SIMP: (20) implies:
% 11.20/2.33 | (21) all_25_1 = all_21_0
% 11.20/2.33 |
% 11.20/2.33 | COMBINE_EQS: (17), (21) imply:
% 11.20/2.33 | (22) all_21_0 = all_19_0
% 11.20/2.33 |
% 11.20/2.33 | SIMP: (22) implies:
% 11.20/2.33 | (23) all_21_0 = all_19_0
% 11.20/2.33 |
% 11.20/2.33 | REDUCE: (14), (17) imply:
% 11.20/2.33 | (24) p(all_19_0) = all_25_0
% 11.20/2.33 |
% 11.20/2.33 | REDUCE: (10), (23) imply:
% 11.20/2.33 | (25) p(all_19_0) = 0
% 11.20/2.33 |
% 11.20/2.33 | GROUND_INST: instantiating (4) with 0, all_25_0, all_19_0, simplifying with
% 11.20/2.33 | (24), (25) gives:
% 11.20/2.33 | (26) all_25_0 = 0
% 11.20/2.33 |
% 11.20/2.33 | REDUCE: (12), (26) imply:
% 11.20/2.33 | (27) $false
% 11.20/2.34 |
% 11.20/2.34 | CLOSE: (27) is inconsistent.
% 11.20/2.34 |
% 11.20/2.34 End of proof
% 11.20/2.34 % SZS output end Proof for theBenchmark
% 11.20/2.34
% 11.20/2.34 1726ms
%------------------------------------------------------------------------------