TSTP Solution File: SYN354+1 by Duper---1.0

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Duper---1.0
% Problem  : SYN354+1 : TPTP v8.1.2. Released v2.0.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : duper %s

% Computer : n004.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 : Fri Sep  1 02:11:22 EDT 2023

% Result   : Theorem 3.99s 4.29s
% Output   : Proof 3.99s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.13  % Problem    : SYN354+1 : TPTP v8.1.2. Released v2.0.0.
% 0.00/0.14  % Command    : duper %s
% 0.15/0.35  % Computer : n004.cluster.edu
% 0.15/0.35  % Model    : x86_64 x86_64
% 0.15/0.35  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.15/0.35  % Memory   : 8042.1875MB
% 0.15/0.35  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.15/0.35  % CPULimit   : 300
% 0.15/0.35  % WCLimit    : 300
% 0.15/0.35  % DateTime   : Sat Aug 26 21:24:52 EDT 2023
% 0.15/0.35  % CPUTime    : 
% 3.99/4.29  SZS status Theorem for theBenchmark.p
% 3.99/4.29  SZS output start Proof for theBenchmark.p
% 3.99/4.29  Clause #0 (by assumption #[]): Eq
% 3.99/4.29    (Not
% 3.99/4.29      (∀ (X1 X2 : Iota),
% 3.99/4.29        Exists fun Y1 =>
% 3.99/4.29          Exists fun Y2 =>
% 3.99/4.29            ∀ (Z : Iota),
% 3.99/4.29              big_f X1 X2 →
% 3.99/4.29                big_g X1 X2 →
% 3.99/4.29                  (Iff (big_g X2 Z) (big_g Y2 Z) → big_f Y1 Y2 → big_f X2 Y2) →
% 3.99/4.29                    Iff (big_g X2 Z) (big_g Y1 Z) → And (And (big_f X1 Y1) (big_f X2 Y1)) (big_f Y1 Y2)))
% 3.99/4.29    True
% 3.99/4.29  Clause #1 (by clausification #[0]): Eq
% 3.99/4.29    (∀ (X1 X2 : Iota),
% 3.99/4.29      Exists fun Y1 =>
% 3.99/4.29        Exists fun Y2 =>
% 3.99/4.29          ∀ (Z : Iota),
% 3.99/4.29            big_f X1 X2 →
% 3.99/4.29              big_g X1 X2 →
% 3.99/4.29                (Iff (big_g X2 Z) (big_g Y2 Z) → big_f Y1 Y2 → big_f X2 Y2) →
% 3.99/4.29                  Iff (big_g X2 Z) (big_g Y1 Z) → And (And (big_f X1 Y1) (big_f X2 Y1)) (big_f Y1 Y2))
% 3.99/4.29    False
% 3.99/4.29  Clause #2 (by clausification #[1]): ∀ (a : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (Not
% 3.99/4.29        (∀ (X2 : Iota),
% 3.99/4.29          Exists fun Y1 =>
% 3.99/4.29            Exists fun Y2 =>
% 3.99/4.29              ∀ (Z : Iota),
% 3.99/4.29                big_f (skS.0 0 a) X2 →
% 3.99/4.29                  big_g (skS.0 0 a) X2 →
% 3.99/4.29                    (Iff (big_g X2 Z) (big_g Y2 Z) → big_f Y1 Y2 → big_f X2 Y2) →
% 3.99/4.29                      Iff (big_g X2 Z) (big_g Y1 Z) → And (And (big_f (skS.0 0 a) Y1) (big_f X2 Y1)) (big_f Y1 Y2)))
% 3.99/4.29      True
% 3.99/4.29  Clause #3 (by clausification #[2]): ∀ (a : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (∀ (X2 : Iota),
% 3.99/4.29        Exists fun Y1 =>
% 3.99/4.29          Exists fun Y2 =>
% 3.99/4.29            ∀ (Z : Iota),
% 3.99/4.29              big_f (skS.0 0 a) X2 →
% 3.99/4.29                big_g (skS.0 0 a) X2 →
% 3.99/4.29                  (Iff (big_g X2 Z) (big_g Y2 Z) → big_f Y1 Y2 → big_f X2 Y2) →
% 3.99/4.29                    Iff (big_g X2 Z) (big_g Y1 Z) → And (And (big_f (skS.0 0 a) Y1) (big_f X2 Y1)) (big_f Y1 Y2))
% 3.99/4.29      False
% 3.99/4.29  Clause #4 (by clausification #[3]): ∀ (a a_1 : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (Not
% 3.99/4.29        (Exists fun Y1 =>
% 3.99/4.29          Exists fun Y2 =>
% 3.99/4.29            ∀ (Z : Iota),
% 3.99/4.29              big_f (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29                big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29                  (Iff (big_g (skS.0 1 a a_1) Z) (big_g Y2 Z) → big_f Y1 Y2 → big_f (skS.0 1 a a_1) Y2) →
% 3.99/4.29                    Iff (big_g (skS.0 1 a a_1) Z) (big_g Y1 Z) →
% 3.99/4.29                      And (And (big_f (skS.0 0 a) Y1) (big_f (skS.0 1 a a_1) Y1)) (big_f Y1 Y2)))
% 3.99/4.29      True
% 3.99/4.29  Clause #5 (by clausification #[4]): ∀ (a a_1 : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (Exists fun Y1 =>
% 3.99/4.29        Exists fun Y2 =>
% 3.99/4.29          ∀ (Z : Iota),
% 3.99/4.29            big_f (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29              big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29                (Iff (big_g (skS.0 1 a a_1) Z) (big_g Y2 Z) → big_f Y1 Y2 → big_f (skS.0 1 a a_1) Y2) →
% 3.99/4.29                  Iff (big_g (skS.0 1 a a_1) Z) (big_g Y1 Z) →
% 3.99/4.29                    And (And (big_f (skS.0 0 a) Y1) (big_f (skS.0 1 a a_1) Y1)) (big_f Y1 Y2))
% 3.99/4.29      False
% 3.99/4.29  Clause #6 (by clausification #[5]): ∀ (a a_1 a_2 : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (Exists fun Y2 =>
% 3.99/4.29        ∀ (Z : Iota),
% 3.99/4.29          big_f (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29            big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29              (Iff (big_g (skS.0 1 a a_1) Z) (big_g Y2 Z) → big_f a_2 Y2 → big_f (skS.0 1 a a_1) Y2) →
% 3.99/4.29                Iff (big_g (skS.0 1 a a_1) Z) (big_g a_2 Z) →
% 3.99/4.29                  And (And (big_f (skS.0 0 a) a_2) (big_f (skS.0 1 a a_1) a_2)) (big_f a_2 Y2))
% 3.99/4.29      False
% 3.99/4.29  Clause #7 (by clausification #[6]): ∀ (a a_1 a_2 a_3 : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (∀ (Z : Iota),
% 3.99/4.29        big_f (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29          big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29            (Iff (big_g (skS.0 1 a a_1) Z) (big_g a_2 Z) → big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2) →
% 3.99/4.29              Iff (big_g (skS.0 1 a a_1) Z) (big_g a_3 Z) →
% 3.99/4.29                And (And (big_f (skS.0 0 a) a_3) (big_f (skS.0 1 a a_1) a_3)) (big_f a_3 a_2))
% 3.99/4.29      False
% 3.99/4.29  Clause #8 (by clausification #[7]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.29    Eq
% 3.99/4.29      (Not
% 3.99/4.29        (big_f (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29          big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.29            (Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.29                big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2) →
% 3.99/4.29              Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_3 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32                And (And (big_f (skS.0 0 a) a_3) (big_f (skS.0 1 a a_1) a_3)) (big_f a_3 a_2)))
% 3.99/4.32      True
% 3.99/4.32  Clause #9 (by clausification #[8]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Eq
% 3.99/4.32      (big_f (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.32        big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.32          (Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32              big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2) →
% 3.99/4.32            Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_3 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32              And (And (big_f (skS.0 0 a) a_3) (big_f (skS.0 1 a a_1) a_3)) (big_f a_3 a_2))
% 3.99/4.32      False
% 3.99/4.32  Clause #10 (by clausification #[9]): ∀ (a a_1 : Iota), Eq (big_f (skS.0 0 a) (skS.0 1 a a_1)) True
% 3.99/4.32  Clause #11 (by clausification #[9]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Eq
% 3.99/4.32      (big_g (skS.0 0 a) (skS.0 1 a a_1) →
% 3.99/4.32        (Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32            big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2) →
% 3.99/4.32          Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_3 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32            And (And (big_f (skS.0 0 a) a_3) (big_f (skS.0 1 a a_1) a_3)) (big_f a_3 a_2))
% 3.99/4.32      False
% 3.99/4.32  Clause #13 (by clausification #[11]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Eq
% 3.99/4.32      ((Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32          big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2) →
% 3.99/4.32        Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_3 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32          And (And (big_f (skS.0 0 a) a_3) (big_f (skS.0 1 a a_1) a_3)) (big_f a_3 a_2))
% 3.99/4.32      False
% 3.99/4.32  Clause #14 (by clausification #[13]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Eq
% 3.99/4.32      (Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32        big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2)
% 3.99/4.32      True
% 3.99/4.32  Clause #15 (by clausification #[13]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Eq
% 3.99/4.32      (Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_3 (skS.0 2 a a_1 a_2 a_3 a_4)) →
% 3.99/4.32        And (And (big_f (skS.0 0 a) a_3) (big_f (skS.0 1 a a_1) a_3)) (big_f a_3 a_2))
% 3.99/4.32      False
% 3.99/4.32  Clause #16 (by clausification #[14]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Or (Eq (Iff (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4))) False)
% 3.99/4.32      (Eq (big_f a_3 a_2 → big_f (skS.0 1 a a_1) a_2) True)
% 3.99/4.32  Clause #17 (by clausification #[16]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Or (Eq (big_f a a_1 → big_f (skS.0 1 a_2 a_3) a_1) True)
% 3.99/4.32      (Or (Eq (big_g (skS.0 1 a_2 a_3) (skS.0 2 a_2 a_3 a_1 a a_4)) False)
% 3.99/4.32        (Eq (big_g a_1 (skS.0 2 a_2 a_3 a_1 a a_4)) False))
% 3.99/4.32  Clause #18 (by clausification #[16]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Or (Eq (big_f a a_1 → big_f (skS.0 1 a_2 a_3) a_1) True)
% 3.99/4.32      (Or (Eq (big_g (skS.0 1 a_2 a_3) (skS.0 2 a_2 a_3 a_1 a a_4)) True)
% 3.99/4.32        (Eq (big_g a_1 (skS.0 2 a_2 a_3 a_1 a a_4)) True))
% 3.99/4.32  Clause #19 (by clausification #[17]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Or (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) False)
% 3.99/4.32      (Or (Eq (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) False)
% 3.99/4.32        (Or (Eq (big_f a_3 a_2) False) (Eq (big_f (skS.0 1 a a_1) a_2) True)))
% 3.99/4.32  Clause #21 (by clausification #[15]): ∀ (a a_1 a_2 a_3 : Iota), Eq (And (And (big_f (skS.0 0 a) a_1) (big_f (skS.0 1 a a_2) a_1)) (big_f a_1 a_3)) False
% 3.99/4.32  Clause #24 (by clausification #[21]): ∀ (a a_1 a_2 a_3 : Iota),
% 3.99/4.32    Or (Eq (And (big_f (skS.0 0 a) a_1) (big_f (skS.0 1 a a_2) a_1)) False) (Eq (big_f a_1 a_3) False)
% 3.99/4.32  Clause #25 (by clausification #[24]): ∀ (a a_1 a_2 a_3 : Iota),
% 3.99/4.32    Or (Eq (big_f a a_1) False) (Or (Eq (big_f (skS.0 0 a_2) a) False) (Eq (big_f (skS.0 1 a_2 a_3) a) False))
% 3.99/4.32  Clause #27 (by clausification #[18]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.32    Or (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 a_2 a_3 a_4)) True)
% 3.99/4.32      (Or (Eq (big_g a_2 (skS.0 2 a a_1 a_2 a_3 a_4)) True)
% 3.99/4.32        (Or (Eq (big_f a_3 a_2) False) (Eq (big_f (skS.0 1 a a_1) a_2) True)))
% 3.99/4.32  Clause #28 (by superposition #[27, 10]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.34    Or (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 (skS.0 1 a_2 a_3) (skS.0 0 a_2) a_4)) True)
% 3.99/4.34      (Or (Eq (big_g (skS.0 1 a_2 a_3) (skS.0 2 a a_1 (skS.0 1 a_2 a_3) (skS.0 0 a_2) a_4)) True)
% 3.99/4.34        (Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a_2 a_3)) True) (Eq False True)))
% 3.99/4.34  Clause #30 (by clausification #[28]): ∀ (a a_1 a_2 a_3 a_4 : Iota),
% 3.99/4.34    Or (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 (skS.0 1 a_2 a_3) (skS.0 0 a_2) a_4)) True)
% 3.99/4.34      (Or (Eq (big_g (skS.0 1 a_2 a_3) (skS.0 2 a a_1 (skS.0 1 a_2 a_3) (skS.0 0 a_2) a_4)) True)
% 3.99/4.34        (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a_2 a_3)) True))
% 3.99/4.34  Clause #33 (by equality factoring #[30]): ∀ (a a_1 a_2 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Or (Ne True True) (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 (skS.0 1 a a_1) (skS.0 0 a) a_2)) True))
% 3.99/4.34  Clause #34 (by clausification #[33]): ∀ (a a_1 a_2 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Or (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 (skS.0 1 a a_1) (skS.0 0 a) a_2)) True)
% 3.99/4.34        (Or (Eq True False) (Eq True False)))
% 3.99/4.34  Clause #36 (by clausification #[34]): ∀ (a a_1 a_2 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Or (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 (skS.0 1 a a_1) (skS.0 0 a) a_2)) True) (Eq True False))
% 3.99/4.34  Clause #37 (by clausification #[36]): ∀ (a a_1 a_2 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Eq (big_g (skS.0 1 a a_1) (skS.0 2 a a_1 (skS.0 1 a a_1) (skS.0 0 a) a_2)) True)
% 3.99/4.34  Clause #38 (by superposition #[37, 19]): ∀ (a a_1 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Or (Eq True False)
% 3.99/4.34        (Or (Eq True False)
% 3.99/4.34          (Or (Eq (big_f (skS.0 0 a) (skS.0 1 a a_1)) False) (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True))))
% 3.99/4.34  Clause #42 (by clausification #[38]): ∀ (a a_1 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Or (Eq True False)
% 3.99/4.34        (Or (Eq (big_f (skS.0 0 a) (skS.0 1 a a_1)) False) (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)))
% 3.99/4.34  Clause #43 (by clausification #[42]): ∀ (a a_1 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True)
% 3.99/4.34      (Or (Eq (big_f (skS.0 0 a) (skS.0 1 a a_1)) False) (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True))
% 3.99/4.34  Clause #44 (by eliminate duplicate literals #[43]): ∀ (a a_1 : Iota), Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True) (Eq (big_f (skS.0 0 a) (skS.0 1 a a_1)) False)
% 3.99/4.34  Clause #45 (by forward demodulation #[44, 10]): ∀ (a a_1 : Iota), Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True) (Eq True False)
% 3.99/4.34  Clause #46 (by clausification #[45]): ∀ (a a_1 : Iota), Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_1)) True
% 3.99/4.34  Clause #49 (by superposition #[46, 25]): ∀ (a a_1 a_2 a_3 : Iota),
% 3.99/4.34    Or (Eq True False)
% 3.99/4.34      (Or (Eq (big_f (skS.0 0 a) (skS.0 1 a_1 a_2)) False) (Eq (big_f (skS.0 1 a a_3) (skS.0 1 a_1 a_2)) False))
% 3.99/4.34  Clause #51 (by clausification #[49]): ∀ (a a_1 a_2 a_3 : Iota),
% 3.99/4.34    Or (Eq (big_f (skS.0 0 a) (skS.0 1 a_1 a_2)) False) (Eq (big_f (skS.0 1 a a_3) (skS.0 1 a_1 a_2)) False)
% 3.99/4.34  Clause #52 (by superposition #[51, 10]): ∀ (a a_1 a_2 : Iota), Or (Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_2)) False) (Eq False True)
% 3.99/4.34  Clause #53 (by clausification #[52]): ∀ (a a_1 a_2 : Iota), Eq (big_f (skS.0 1 a a_1) (skS.0 1 a a_2)) False
% 3.99/4.34  Clause #54 (by superposition #[53, 46]): Eq False True
% 3.99/4.34  Clause #55 (by clausification #[54]): False
% 3.99/4.34  SZS output end Proof for theBenchmark.p
%------------------------------------------------------------------------------