SET007 Axioms: SET007+88.ax


%------------------------------------------------------------------------------
% File     : SET007+88 : TPTP v7.5.0. Released v3.4.0.
% Domain   : Set Theory
% Axioms   : Many-Argument Relations
% Version  : [Urb08] axioms.
% English  :

% Refs     : [Mat90] Matuszewski (1990), Formalized Mathematics
%          : [Urb07] Urban (2007), MPTP 0.2: Design, Implementation, and In
%          : [Urb08] Urban (2006), Email to G. Sutcliffe
% Source   : [Urb08]
% Names    : margrel1 [Urb08]

% Status   : Satisfiable
% Syntax   : Number of formulae    :  114 (  49 unit)
%            Number of atoms       :  336 (  81 equality)
%            Maximal formula depth :   14 (   4 average)
%            Number of connectives :  256 (  34 ~  ;   2  |;  72  &)
%                                         (  19 <=>; 129 =>;   0 <=)
%                                         (   0 <~>;   0 ~|;   0 ~&)
%            Number of predicates  :   21 (   1 propositional; 0-4 arity)
%            Number of functors    :   31 (  12 constant; 0-3 arity)
%            Number of variables   :  137 (   0 singleton; 129 !;   8 ?)
%            Maximal term depth    :    4 (   1 average)
% SPC      : 

% Comments : The individual reference can be found in [Mat90] by looking for
%            the name provided by [Urb08].
%          : Translated by MPTP from the Mizar Mathematical Library 4.48.930.
%          : These set theory axioms are used in encodings of problems in
%            various domains, including ALG, CAT, GRP, LAT, SET, and TOP.
%------------------------------------------------------------------------------
fof(rc1_margrel1,axiom,(
    ? [A] : v1_margrel1(A) )).

fof(fc1_margrel1,axiom,
    ( v1_xboole_0(k1_xboole_0)
    & v1_margrel1(k1_xboole_0) )).

fof(fc2_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ~ v1_xboole_0(k3_margrel1(A)) ) )).

fof(fc3_margrel1,axiom,(
    ~ v1_xboole_0(k6_margrel1) )).

fof(rc2_margrel1,axiom,(
    ? [A] : v2_margrel1(A) )).

fof(cc1_margrel1,axiom,(
    ! [A] :
      ( m1_subset_1(A,k6_margrel1)
     => v2_margrel1(A) ) )).

fof(fc4_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => v2_margrel1(k9_margrel1(A)) ) )).

fof(fc5_margrel1,axiom,(
    ! [A,B] :
      ( ( v2_margrel1(A)
        & v2_margrel1(B) )
     => v2_margrel1(k10_margrel1(A,B)) ) )).

fof(fc6_margrel1,axiom,(
    ! [A] : v2_margrel1(k13_margrel1(A)) )).

fof(d1_margrel1,axiom,(
    ! [A] :
      ( v1_margrel1(A)
    <=> ( ! [B] :
            ( r2_hidden(B,A)
           => ( v1_relat_1(B)
              & v1_funct_1(B)
              & v1_finseq_1(B) ) )
        & ! [B] :
            ( ( v1_relat_1(B)
              & v1_funct_1(B)
              & v1_finseq_1(B) )
           => ! [C] :
                ( ( v1_relat_1(C)
                  & v1_funct_1(C)
                  & v1_finseq_1(C) )
               => ( ( r2_hidden(B,A)
                    & r2_hidden(C,A) )
                 => k3_finseq_1(B) = k3_finseq_1(C) ) ) ) ) ) )).

fof(t1_margrel1,axiom,(
    $true )).

fof(t2_margrel1,axiom,(
    $true )).

fof(t3_margrel1,axiom,(
    $true )).

fof(t4_margrel1,axiom,(
    $true )).

fof(t5_margrel1,axiom,(
    $true )).

fof(t6_margrel1,axiom,(
    $true )).

fof(t7_margrel1,axiom,(
    ! [A,B] :
      ( v1_margrel1(B)
     => ( r1_tarski(A,B)
       => v1_margrel1(A) ) ) )).

fof(t8_margrel1,axiom,(
    ! [A] :
      ( ( v1_relat_1(A)
        & v1_funct_1(A)
        & v1_finseq_1(A) )
     => v1_margrel1(k1_tarski(A)) ) )).

fof(d2_margrel1,axiom,(
    ! [A] :
      ( v1_margrel1(A)
     => ! [B] :
          ( v1_margrel1(B)
         => ( A = B
          <=> ! [C] :
                ( ( v1_relat_1(C)
                  & v1_funct_1(C)
                  & v1_finseq_1(C) )
               => ( r2_hidden(C,A)
                <=> r2_hidden(C,B) ) ) ) ) ) )).

fof(t9_margrel1,axiom,(
    ! [A] :
      ( v1_margrel1(A)
     => ( ! [B] :
            ( ( v1_relat_1(B)
              & v1_funct_1(B)
              & v1_finseq_1(B) )
           => ~ r2_hidden(B,A) )
       => A = k1_xboole_0 ) ) )).

fof(d3_margrel1,axiom,(
    $true )).

fof(d4_margrel1,axiom,(
    ! [A] :
      ( v1_margrel1(A)
     => ( A != k1_xboole_0
       => ! [B] :
            ( m2_subset_1(B,k1_numbers,k5_numbers)
           => ( B = k2_margrel1(A)
            <=> ! [C] :
                  ( ( v1_relat_1(C)
                    & v1_funct_1(C)
                    & v1_finseq_1(C) )
                 => ( r2_hidden(C,A)
                   => B = k3_finseq_1(C) ) ) ) ) ) ) )).

fof(d5_margrel1,axiom,(
    ! [A] :
      ( m2_subset_1(A,k1_numbers,k5_numbers)
     => ! [B] :
          ( v1_margrel1(B)
         => ( m1_margrel1(B,A)
          <=> ! [C] :
                ( ( v1_relat_1(C)
                  & v1_funct_1(C)
                  & v1_finseq_1(C) )
               => ( r2_hidden(C,B)
                 => k3_finseq_1(C) = A ) ) ) ) ) )).

fof(d6_margrel1,axiom,(
    ! [A,B] :
      ( v1_margrel1(B)
     => ( m2_margrel1(B,A)
      <=> ! [C] :
            ( ( v1_relat_1(C)
              & v1_funct_1(C)
              & v1_finseq_1(C) )
           => ( r2_hidden(C,B)
             => r1_tarski(k2_relat_1(C),A) ) ) ) ) )).

fof(t10_margrel1,axiom,(
    $true )).

fof(t11_margrel1,axiom,(
    $true )).

fof(t12_margrel1,axiom,(
    $true )).

fof(t13_margrel1,axiom,(
    $true )).

fof(t14_margrel1,axiom,(
    $true )).

fof(t15_margrel1,axiom,(
    $true )).

fof(t16_margrel1,axiom,(
    $true )).

fof(t17_margrel1,axiom,(
    $true )).

fof(t18_margrel1,axiom,(
    $true )).

fof(t19_margrel1,axiom,(
    $true )).

fof(t20_margrel1,axiom,(
    ! [A] : m2_margrel1(k1_xboole_0,A) )).

fof(t21_margrel1,axiom,(
    ! [A] :
      ( m2_subset_1(A,k1_numbers,k5_numbers)
     => m1_margrel1(k1_xboole_0,A) ) )).

fof(d7_margrel1,axiom,(
    ! [A,B] :
      ( m2_subset_1(B,k1_numbers,k5_numbers)
     => ! [C] :
          ( v1_margrel1(C)
         => ( m3_margrel1(C,A,B)
          <=> ( m2_margrel1(C,A)
              & m1_margrel1(C,B) ) ) ) ) )).

fof(d8_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B] :
          ( B = k3_margrel1(A)
        <=> ! [C] :
              ( r2_hidden(C,B)
            <=> ( r1_tarski(C,k13_finseq_1(A))
                & ! [D] :
                    ( m2_finseq_1(D,A)
                   => ! [E] :
                        ( m2_finseq_1(E,A)
                       => ( ( r2_hidden(D,C)
                            & r2_hidden(E,C) )
                         => k3_finseq_1(D) = k3_finseq_1(E) ) ) ) ) ) ) ) )).

fof(t22_margrel1,axiom,(
    $true )).

fof(t23_margrel1,axiom,(
    $true )).

fof(t24_margrel1,axiom,(
    $true )).

fof(t25_margrel1,axiom,(
    $true )).

fof(t26_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B,C] :
          ( m1_subset_1(C,k3_margrel1(A))
         => ( r1_tarski(B,C)
           => m1_subset_1(B,k3_margrel1(A)) ) ) ) )).

fof(t27_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B] :
          ( m2_finseq_1(B,A)
         => m1_subset_1(k1_tarski(B),k3_margrel1(A)) ) ) )).

fof(t28_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B] :
          ( m1_subset_1(B,A)
         => ! [C] :
              ( m1_subset_1(C,A)
             => m1_subset_1(k1_tarski(k10_finseq_1(B,C)),k3_margrel1(A)) ) ) ) )).

fof(d9_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B] :
          ( m1_subset_1(B,k3_margrel1(A))
         => ! [C] :
              ( m1_subset_1(C,k3_margrel1(A))
             => ( r1_margrel1(A,B,C)
              <=> ! [D] :
                    ( m2_finseq_1(D,A)
                   => ( r2_hidden(D,B)
                    <=> r2_hidden(D,C) ) ) ) ) ) ) )).

fof(d10_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B] :
          ( m1_subset_1(B,k3_margrel1(A))
         => ( B = k4_margrel1(A)
          <=> ! [C] :
                ( m2_finseq_1(C,A)
               => ~ r2_hidden(C,B) ) ) ) ) )).

fof(t29_margrel1,axiom,(
    $true )).

fof(t30_margrel1,axiom,(
    $true )).

fof(t31_margrel1,axiom,(
    $true )).

fof(t32_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => k4_margrel1(A) = k1_xboole_0 ) )).

fof(d11_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => ! [B] :
          ( m1_subset_1(B,k3_margrel1(A))
         => ( B != k4_margrel1(A)
           => ! [C] :
                ( m2_subset_1(C,k1_numbers,k5_numbers)
               => ( C = k5_margrel1(A,B)
                <=> ! [D] :
                      ( m2_finseq_1(D,A)
                     => ( r2_hidden(D,B)
                       => C = k3_finseq_1(D) ) ) ) ) ) ) ) )).

fof(d12_margrel1,axiom,(
    k6_margrel1 = k2_tarski(np__0,np__1) )).

fof(d13_margrel1,axiom,(
    k7_margrel1 = np__0 )).

fof(d14_margrel1,axiom,(
    k8_margrel1 = np__1 )).

fof(t33_margrel1,axiom,(
    $true )).

fof(t34_margrel1,axiom,(
    $true )).

fof(t35_margrel1,axiom,(
    $true )).

fof(t36_margrel1,axiom,
    ( k7_margrel1 = np__0
    & k8_margrel1 = np__1 )).

fof(t37_margrel1,axiom,(
    k6_margrel1 = k2_tarski(k7_margrel1,k8_margrel1) )).

fof(t38_margrel1,axiom,(
    k7_margrel1 != k8_margrel1 )).

fof(d15_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
    <=> r2_hidden(A,k6_margrel1) ) )).

fof(t39_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ( A = k7_margrel1
        | A = k8_margrel1 ) ) )).

fof(d16_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ( ( A = k7_margrel1
         => k9_margrel1(A) = k8_margrel1 )
        & ( A != k7_margrel1
         => k9_margrel1(A) = k7_margrel1 ) ) ) )).

fof(d17_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ! [B] :
          ( v2_margrel1(B)
         => ( ( ( A = k8_margrel1
                & B = k8_margrel1 )
             => k10_margrel1(A,B) = k8_margrel1 )
            & ( ~ ( A = k8_margrel1
                  & B = k8_margrel1 )
             => k10_margrel1(A,B) = k7_margrel1 ) ) ) ) )).

fof(t40_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => k9_margrel1(k9_margrel1(A)) = A ) )).

fof(t41_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ( ( A = k7_margrel1
         => k9_margrel1(A) = k8_margrel1 )
        & ( k9_margrel1(A) = k8_margrel1
         => A = k7_margrel1 )
        & ( A = k8_margrel1
         => k9_margrel1(A) = k7_margrel1 )
        & ( k9_margrel1(A) = k7_margrel1
         => A = k8_margrel1 ) ) ) )).

fof(t42_margrel1,axiom,(
    $true )).

fof(t43_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ( A != k8_margrel1
      <=> A = k7_margrel1 ) ) )).

fof(t44_margrel1,axiom,(
    $true )).

fof(t45_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ! [B] :
          ( v2_margrel1(B)
         => ( ( k10_margrel1(A,B) = k8_margrel1
             => ( A = k8_margrel1
                & B = k8_margrel1 ) )
            & ( ( A = k8_margrel1
                & B = k8_margrel1 )
             => k10_margrel1(A,B) = k8_margrel1 )
            & ~ ( k10_margrel1(A,B) = k7_margrel1
                & A != k7_margrel1
                & B != k7_margrel1 )
            & ( ( A = k7_margrel1
                | B = k7_margrel1 )
             => k10_margrel1(A,B) = k7_margrel1 ) ) ) ) )).

fof(t46_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => k10_margrel1(A,k9_margrel1(A)) = k7_margrel1 ) )).

fof(t47_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => k9_margrel1(k10_margrel1(A,k9_margrel1(A))) = k8_margrel1 ) )).

fof(t48_margrel1,axiom,(
    $true )).

fof(t49_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => k10_margrel1(k7_margrel1,A) = k7_margrel1 ) )).

fof(t50_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => k10_margrel1(k8_margrel1,A) = A ) )).

fof(t51_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ( k10_margrel1(A,A) = k7_margrel1
       => A = k7_margrel1 ) ) )).

fof(t52_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => ! [B] :
          ( v2_margrel1(B)
         => ! [C] :
              ( v2_margrel1(C)
             => k10_margrel1(A,k10_margrel1(B,C)) = k10_margrel1(k10_margrel1(A,B),C) ) ) ) )).

fof(d18_margrel1,axiom,(
    ! [A] :
      ( ( ~ r2_hidden(k7_margrel1,A)
       => k13_margrel1(A) = k8_margrel1 )
      & ( r2_hidden(k7_margrel1,A)
       => k13_margrel1(A) = k7_margrel1 ) ) )).

fof(t53_margrel1,axiom,(
    ! [A] :
      ( ( ~ r2_hidden(k7_margrel1,A)
       => k14_margrel1(A) = k8_margrel1 )
      & ~ ( k14_margrel1(A) = k8_margrel1
          & r2_hidden(k7_margrel1,A) )
      & ( r2_hidden(k7_margrel1,A)
       => k14_margrel1(A) = k7_margrel1 )
      & ( k14_margrel1(A) = k7_margrel1
       => r2_hidden(k7_margrel1,A) ) ) )).

fof(s1_margrel1,axiom,
    ( ! [A] :
        ( ( v1_relat_1(A)
          & v1_funct_1(A)
          & v1_finseq_1(A) )
       => ! [B] :
            ( ( v1_relat_1(B)
              & v1_funct_1(B)
              & v1_finseq_1(B) )
           => ( ( p1_s1_margrel1(A)
                & p1_s1_margrel1(B) )
             => k3_finseq_1(A) = k3_finseq_1(B) ) ) )
   => ? [A] :
        ( v1_margrel1(A)
        & ! [B] :
            ( ( v1_relat_1(B)
              & v1_funct_1(B)
              & v1_finseq_1(B) )
           => ( r2_hidden(B,A)
            <=> ( r2_hidden(B,f1_s1_margrel1)
                & p1_s1_margrel1(B) ) ) ) ) )).

fof(s2_margrel1,axiom,
    ( ! [A] :
        ( m2_finseq_1(A,f1_s2_margrel1)
       => ! [B] :
            ( m2_finseq_1(B,f1_s2_margrel1)
           => ( ( p1_s2_margrel1(A)
                & p1_s2_margrel1(B) )
             => k3_finseq_1(A) = k3_finseq_1(B) ) ) )
   => ? [A] :
        ( m1_subset_1(A,k3_margrel1(f1_s2_margrel1))
        & ! [B] :
            ( m2_finseq_1(B,f1_s2_margrel1)
           => ( r2_hidden(B,A)
            <=> p1_s2_margrel1(B) ) ) ) )).

fof(s3_margrel1,axiom,(
    ? [A] :
      ( m1_subset_1(A,k3_margrel1(f1_s3_margrel1))
      & ! [B] :
          ( m2_finseq_1(B,f1_s3_margrel1)
         => ( k3_finseq_1(B) = f2_s3_margrel1
           => ( r2_hidden(B,A)
            <=> p1_s3_margrel1(B) ) ) ) ) )).

fof(dt_m1_margrel1,axiom,(
    ! [A] :
      ( m1_subset_1(A,k5_numbers)
     => ! [B] :
          ( m1_margrel1(B,A)
         => v1_margrel1(B) ) ) )).

fof(existence_m1_margrel1,axiom,(
    ! [A] :
      ( m1_subset_1(A,k5_numbers)
     => ? [B] : m1_margrel1(B,A) ) )).

fof(dt_m2_margrel1,axiom,(
    ! [A,B] :
      ( m2_margrel1(B,A)
     => v1_margrel1(B) ) )).

fof(existence_m2_margrel1,axiom,(
    ! [A] :
    ? [B] : m2_margrel1(B,A) )).

fof(dt_m3_margrel1,axiom,(
    ! [A,B] :
      ( m1_subset_1(B,k5_numbers)
     => ! [C] :
          ( m3_margrel1(C,A,B)
         => v1_margrel1(C) ) ) )).

fof(existence_m3_margrel1,axiom,(
    ! [A,B] :
      ( m1_subset_1(B,k5_numbers)
     => ? [C] : m3_margrel1(C,A,B) ) )).

fof(symmetry_r1_margrel1,axiom,(
    ! [A,B,C] :
      ( ( ~ v1_xboole_0(A)
        & m1_subset_1(B,k3_margrel1(A))
        & m1_subset_1(C,k3_margrel1(A)) )
     => ( r1_margrel1(A,B,C)
       => r1_margrel1(A,C,B) ) ) )).

fof(reflexivity_r1_margrel1,axiom,(
    ! [A,B,C] :
      ( ( ~ v1_xboole_0(A)
        & m1_subset_1(B,k3_margrel1(A))
        & m1_subset_1(C,k3_margrel1(A)) )
     => r1_margrel1(A,B,B) ) )).

fof(redefinition_r1_margrel1,axiom,(
    ! [A,B,C] :
      ( ( ~ v1_xboole_0(A)
        & m1_subset_1(B,k3_margrel1(A))
        & m1_subset_1(C,k3_margrel1(A)) )
     => ( r1_margrel1(A,B,C)
      <=> B = C ) ) )).

fof(dt_k1_margrel1,axiom,(
    ! [A,B,C] :
      ( ( ~ v1_xboole_0(A)
        & ~ v1_xboole_0(B)
        & m1_subset_1(C,A) )
     => m2_fraenkel(k1_margrel1(A,B,C),B,A,k1_fraenkel(B,A)) ) )).

fof(redefinition_k1_margrel1,axiom,(
    ! [A,B,C] :
      ( ( ~ v1_xboole_0(A)
        & ~ v1_xboole_0(B)
        & m1_subset_1(C,A) )
     => k1_margrel1(A,B,C) = k2_funcop_1(B,C) ) )).

fof(dt_k2_margrel1,axiom,(
    ! [A] :
      ( v1_margrel1(A)
     => m2_subset_1(k2_margrel1(A),k1_numbers,k5_numbers) ) )).

fof(dt_k3_margrel1,axiom,(
    $true )).

fof(dt_k4_margrel1,axiom,(
    ! [A] :
      ( ~ v1_xboole_0(A)
     => m1_subset_1(k4_margrel1(A),k3_margrel1(A)) ) )).

fof(dt_k5_margrel1,axiom,(
    ! [A,B] :
      ( ( ~ v1_xboole_0(A)
        & m1_subset_1(B,k3_margrel1(A)) )
     => m2_subset_1(k5_margrel1(A,B),k1_numbers,k5_numbers) ) )).

fof(dt_k6_margrel1,axiom,(
    $true )).

fof(dt_k7_margrel1,axiom,(
    m1_subset_1(k7_margrel1,k6_margrel1) )).

fof(dt_k8_margrel1,axiom,(
    m1_subset_1(k8_margrel1,k6_margrel1) )).

fof(dt_k9_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => v2_margrel1(k9_margrel1(A)) ) )).

fof(involutiveness_k9_margrel1,axiom,(
    ! [A] :
      ( v2_margrel1(A)
     => k9_margrel1(k9_margrel1(A)) = A ) )).

fof(dt_k10_margrel1,axiom,(
    $true )).

fof(commutativity_k10_margrel1,axiom,(
    ! [A,B] :
      ( ( v2_margrel1(A)
        & v2_margrel1(B) )
     => k10_margrel1(A,B) = k10_margrel1(B,A) ) )).

fof(dt_k11_margrel1,axiom,(
    ! [A] :
      ( m1_subset_1(A,k6_margrel1)
     => m1_subset_1(k11_margrel1(A),k6_margrel1) ) )).

fof(involutiveness_k11_margrel1,axiom,(
    ! [A] :
      ( m1_subset_1(A,k6_margrel1)
     => k11_margrel1(k11_margrel1(A)) = A ) )).

fof(redefinition_k11_margrel1,axiom,(
    ! [A] :
      ( m1_subset_1(A,k6_margrel1)
     => k11_margrel1(A) = k9_margrel1(A) ) )).

fof(dt_k12_margrel1,axiom,(
    ! [A,B] :
      ( ( m1_subset_1(A,k6_margrel1)
        & m1_subset_1(B,k6_margrel1) )
     => m1_subset_1(k12_margrel1(A,B),k6_margrel1) ) )).

fof(commutativity_k12_margrel1,axiom,(
    ! [A,B] :
      ( ( m1_subset_1(A,k6_margrel1)
        & m1_subset_1(B,k6_margrel1) )
     => k12_margrel1(A,B) = k12_margrel1(B,A) ) )).

fof(redefinition_k12_margrel1,axiom,(
    ! [A,B] :
      ( ( m1_subset_1(A,k6_margrel1)
        & m1_subset_1(B,k6_margrel1) )
     => k12_margrel1(A,B) = k10_margrel1(A,B) ) )).

fof(dt_k13_margrel1,axiom,(
    $true )).

fof(dt_k14_margrel1,axiom,(
    ! [A] : m1_subset_1(k14_margrel1(A),k6_margrel1) )).

fof(redefinition_k14_margrel1,axiom,(
    ! [A] : k14_margrel1(A) = k13_margrel1(A) )).
%------------------------------------------------------------------------------