TSTP Solution File: SWC359+1 by Z3---4.8.9.0
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Z3---4.8.9.0
% Problem : SWC359+1 : TPTP v8.1.0. Released v2.4.0.
% Transfm : none
% Format : tptp
% Command : z3_tptp -proof -model -t:%d -file:%s
% Computer : n015.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 : Tue Sep 20 11:57:22 EDT 2022
% Result : Theorem 0.23s 0.48s
% Output : Proof 0.23s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.08/0.14 % Problem : SWC359+1 : TPTP v8.1.0. Released v2.4.0.
% 0.08/0.15 % Command : z3_tptp -proof -model -t:%d -file:%s
% 0.15/0.37 % Computer : n015.cluster.edu
% 0.15/0.37 % Model : x86_64 x86_64
% 0.15/0.37 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.15/0.37 % Memory : 8042.1875MB
% 0.15/0.37 % OS : Linux 3.10.0-693.el7.x86_64
% 0.15/0.37 % CPULimit : 300
% 0.15/0.37 % WCLimit : 300
% 0.15/0.37 % DateTime : Sun Sep 4 00:33:25 EDT 2022
% 0.15/0.37 % CPUTime :
% 0.15/0.38 Z3tptp [4.8.9.0] (c) 2006-20**. Microsoft Corp.
% 0.15/0.38 Usage: tptp [options] [-file:]file
% 0.15/0.38 -h, -? prints this message.
% 0.15/0.38 -smt2 print SMT-LIB2 benchmark.
% 0.15/0.38 -m, -model generate model.
% 0.15/0.38 -p, -proof generate proof.
% 0.15/0.38 -c, -core generate unsat core of named formulas.
% 0.15/0.38 -st, -statistics display statistics.
% 0.15/0.38 -t:timeout set timeout (in second).
% 0.15/0.38 -smt2status display status in smt2 format instead of SZS.
% 0.15/0.38 -check_status check the status produced by Z3 against annotation in benchmark.
% 0.15/0.38 -<param>:<value> configuration parameter and value.
% 0.15/0.38 -o:<output-file> file to place output in.
% 0.23/0.48 % SZS status Theorem
% 0.23/0.48 % SZS output start Proof
% 0.23/0.48 tff(segmentP_type, type, (
% 0.23/0.48 segmentP: ( $i * $i ) > $o)).
% 0.23/0.48 tff(tptp_fun_U_47_type, type, (
% 0.23/0.48 tptp_fun_U_47: $i)).
% 0.23/0.48 tff(tptp_fun_V_48_type, type, (
% 0.23/0.48 tptp_fun_V_48: $i)).
% 0.23/0.48 tff(tptp_fun_W_49_type, type, (
% 0.23/0.48 tptp_fun_W_49: $i)).
% 0.23/0.48 tff(tptp_fun_X_50_type, type, (
% 0.23/0.48 tptp_fun_X_50: $i)).
% 0.23/0.48 tff(equalelemsP_type, type, (
% 0.23/0.48 equalelemsP: $i > $o)).
% 0.23/0.48 tff(neq_type, type, (
% 0.23/0.48 neq: ( $i * $i ) > $o)).
% 0.23/0.48 tff(ssList_type, type, (
% 0.23/0.48 ssList: $i > $o)).
% 0.23/0.48 tff(nil_type, type, (
% 0.23/0.48 nil: $i)).
% 0.23/0.48 tff(1,plain,
% 0.23/0.48 ((ssList(U!47) & (ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))) <=> (ssList(U!47) & ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.48 inference(rewrite,[status(thm)],[])).
% 0.23/0.48 tff(2,plain,
% 0.23/0.48 ((ssList(V!48) & (ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))) <=> (ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.48 inference(rewrite,[status(thm)],[])).
% 0.23/0.48 tff(3,plain,
% 0.23/0.48 ((ssList(W!49) & ((~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))) <=> (ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.48 inference(rewrite,[status(thm)],[])).
% 0.23/0.48 tff(4,plain,
% 0.23/0.48 (((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))) <=> ((~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.48 inference(rewrite,[status(thm)],[])).
% 0.23/0.48 tff(5,plain,
% 0.23/0.48 ((~(~ssList(W!49))) <=> ssList(W!49)),
% 0.23/0.48 inference(rewrite,[status(thm)],[])).
% 0.23/0.48 tff(6,plain,
% 0.23/0.48 (((~(~ssList(W!49))) & ((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))) <=> (ssList(W!49) & ((~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))))),
% 0.23/0.48 inference(monotonicity,[status(thm)],[5, 4])).
% 0.23/0.48 tff(7,plain,
% 0.23/0.48 (((~(~ssList(W!49))) & ((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))) <=> (ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.49 inference(transitivity,[status(thm)],[6, 3])).
% 0.23/0.49 tff(8,plain,
% 0.23/0.49 ((~(~ssList(V!48))) <=> ssList(V!48)),
% 0.23/0.49 inference(rewrite,[status(thm)],[])).
% 0.23/0.49 tff(9,plain,
% 0.23/0.49 (((~(~ssList(V!48))) & ((~(~ssList(W!49))) & ((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))))) <=> (ssList(V!48) & (ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))))),
% 0.23/0.49 inference(monotonicity,[status(thm)],[8, 7])).
% 0.23/0.49 tff(10,plain,
% 0.23/0.49 (((~(~ssList(V!48))) & ((~(~ssList(W!49))) & ((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))))) <=> (ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.49 inference(transitivity,[status(thm)],[9, 2])).
% 0.23/0.49 tff(11,plain,
% 0.23/0.49 ((~(~ssList(U!47))) <=> ssList(U!47)),
% 0.23/0.49 inference(rewrite,[status(thm)],[])).
% 0.23/0.49 tff(12,plain,
% 0.23/0.49 (((~(~ssList(U!47))) & ((~(~ssList(V!48))) & ((~(~ssList(W!49))) & ((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))))) <=> (ssList(U!47) & (ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))))),
% 0.23/0.49 inference(monotonicity,[status(thm)],[11, 10])).
% 0.23/0.49 tff(13,plain,
% 0.23/0.49 (((~(~ssList(U!47))) & ((~(~ssList(V!48))) & ((~(~ssList(W!49))) & ((~segmentP(V!48, U!47)) & (~(~neq(V!48, nil))) & (~(~equalelemsP(W!49))) & (~(~segmentP(X!50, W!49))) & (~(~(U!47 = W!49))) & (~(~(V!48 = X!50))) & (~(~ssList(X!50))) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))))) <=> (ssList(U!47) & ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y))))),
% 0.23/0.49 inference(transitivity,[status(thm)],[12, 1])).
% 0.23/0.49 tff(14,plain,
% 0.23/0.49 ((~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))) <=> (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y)))))))),
% 0.23/0.49 inference(rewrite,[status(thm)],[])).
% 0.23/0.49 tff(15,plain,
% 0.23/0.49 ((~![U: $i] : (ssList(U) => ![V: $i] : (ssList(V) => ![W: $i] : (ssList(W) => ![X: $i] : (ssList(X) => (((((((~(V = X)) | (~(U = W))) | (~neq(V, nil))) | (~segmentP(X, W))) | (~equalelemsP(W))) | ?[Y: $i] : ((((ssList(Y) & neq(W, Y)) & segmentP(X, Y)) & segmentP(Y, W)) & equalelemsP(Y))) | segmentP(V, U))))))) <=> (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y)))))))),
% 0.23/0.49 inference(rewrite,[status(thm)],[])).
% 0.23/0.49 tff(16,axiom,(~![U: $i] : (ssList(U) => ![V: $i] : (ssList(V) => ![W: $i] : (ssList(W) => ![X: $i] : (ssList(X) => (((((((~(V = X)) | (~(U = W))) | (~neq(V, nil))) | (~segmentP(X, W))) | (~equalelemsP(W))) | ?[Y: $i] : ((((ssList(Y) & neq(W, Y)) & segmentP(X, Y)) & segmentP(Y, W)) & equalelemsP(Y))) | segmentP(V, U))))))), file('/export/starexec/sandbox2/benchmark/theBenchmark.p','co1')).
% 0.23/0.49 tff(17,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[16, 15])).
% 0.23/0.49 tff(18,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[17, 14])).
% 0.23/0.49 tff(19,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[18, 14])).
% 0.23/0.49 tff(20,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[19, 14])).
% 0.23/0.49 tff(21,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[20, 14])).
% 0.23/0.49 tff(22,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[21, 14])).
% 0.23/0.49 tff(23,plain,
% 0.23/0.49 (~![U: $i] : ((~ssList(U)) | ![V: $i] : ((~ssList(V)) | ![W: $i] : ((~ssList(W)) | ![X: $i] : (segmentP(V, U) | (~neq(V, nil)) | (~equalelemsP(W)) | (~segmentP(X, W)) | (~(U = W)) | (~(V = X)) | (~ssList(X)) | ?[Y: $i] : (ssList(Y) & neq(W, Y) & segmentP(X, Y) & segmentP(Y, W) & equalelemsP(Y))))))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[22, 14])).
% 0.23/0.49 tff(24,plain,
% 0.23/0.49 (ssList(U!47) & ssList(V!48) & ssList(W!49) & (~segmentP(V!48, U!47)) & neq(V!48, nil) & equalelemsP(W!49) & segmentP(X!50, W!49) & (U!47 = W!49) & (V!48 = X!50) & ssList(X!50) & ![Y: $i] : (~(ssList(Y) & neq(W!49, Y) & segmentP(X!50, Y) & segmentP(Y, W!49) & equalelemsP(Y)))),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[23, 13])).
% 0.23/0.49 tff(25,plain,
% 0.23/0.49 (U!47 = W!49),
% 0.23/0.49 inference(and_elim,[status(thm)],[24])).
% 0.23/0.49 tff(26,plain,
% 0.23/0.49 (V!48 = X!50),
% 0.23/0.49 inference(and_elim,[status(thm)],[24])).
% 0.23/0.49 tff(27,plain,
% 0.23/0.49 (segmentP(V!48, U!47) <=> segmentP(X!50, W!49)),
% 0.23/0.49 inference(monotonicity,[status(thm)],[26, 25])).
% 0.23/0.49 tff(28,plain,
% 0.23/0.49 (segmentP(X!50, W!49) <=> segmentP(V!48, U!47)),
% 0.23/0.49 inference(symmetry,[status(thm)],[27])).
% 0.23/0.49 tff(29,plain,
% 0.23/0.49 (segmentP(X!50, W!49)),
% 0.23/0.49 inference(and_elim,[status(thm)],[24])).
% 0.23/0.49 tff(30,plain,
% 0.23/0.49 (segmentP(V!48, U!47)),
% 0.23/0.49 inference(modus_ponens,[status(thm)],[29, 28])).
% 0.23/0.49 tff(31,plain,
% 0.23/0.49 (~segmentP(V!48, U!47)),
% 0.23/0.49 inference(and_elim,[status(thm)],[24])).
% 0.23/0.49 tff(32,plain,
% 0.23/0.49 ($false),
% 0.23/0.49 inference(unit_resolution,[status(thm)],[31, 30])).
% 0.23/0.49 % SZS output end Proof
%------------------------------------------------------------------------------