%--------------------------------------------------------------------------
% File     : SET505-6 : TPTP v2.2.1. Bugfixed v2.1.0.
% Domain   : Set Theory
% Problem  : Corollary 2 to universal class not set
% Version  : [Qua92] axioms.
% English  : 

% Refs     : [BL+86] Boyer et al. (1986), Set Theory in First-Order Logic: 
%          : [Qua92] Quaife (1992), Automated Deduction in von Neumann-Bern
% Source   : [Quaife]
% Names    : SP6 cor.2 [Qua92]

% Status   : unsatisfiable
% Rating   : 0.83 v2.2.0, 0.67 v2.1.0
% Syntax   : Number of clauses    :  113 (   8 non-Horn;  38 unit;  80 RR)
%            Number of literals   :  219 (  49 equality)
%            Maximal clause size  :    5 (   1 average)
%            Number of predicates :   11 (   0 propositional; 1-3 arity)
%            Number of functors   :   47 (  13 constant; 0-3 arity)
%            Number of variables  :  214 (  32 singleton)
%            Maximal term depth   :    6 (   1 average)

% Comments : Quaife proves all these problems by augmenting the axioms with 
%            all previously proved theorems. With a few exceptions (the
%            problems that correspond to [BL+86] problems), the TPTP has
%            retained the order in which Quaife presents the problems. The
%            user may create an augmented version of this problem by adding
%            all previously proved theorems (the ones that correspond to
%            [BL+86] are easily identified and positioned using Quaife's
%            naming scheme).
%          : tptp2X -f dfg -t rm_equality:rstfp SET505-6.p 
% Bugfixes : v1.0.1 - Bugfix in SET004-1.ax.
%          : v2.1.0 - Bugfix in SET004-0.ax.
%--------------------------------------------------------------------------

begin_problem(TPTP_Problem).

list_of_descriptions.
name({*[ File     : SET505-6 : TPTP v2.2.1. Bugfixed v2.1.0.],[ Names    : SP6 cor.2 [Qua92]]*}).
author({*[ Source   : [Quaife]]*}).
status(unsatisfiable).
description({*[ Refs     : [BL+86] Boyer et al. (1986), Set Theory in First-Order Logic: ,          : [Qua92] Quaife (1992), Automated Deduction in von Neumann-Bern]*}).
end_of_list.

list_of_symbols.
functions[(application_function,0), (apply,2), (cantor,1), (choice,0), (complement,1), (compose,2), (compose_class,1), (composition_function,0), (cross_product,2), (diagonalise,1), (domain,3), (domain_of,1), (domain_relation,0), (element_relation,0), (first,1), (flip,1), (identity_relation,0), (image,2), (intersection,2), (inverse,1), (not_homomorphism1,3), (not_homomorphism2,3), (not_subclass_element,2), (null_class,0), (omega,0), (ordered_pair,2), (power_class,1), (range,3), (range_of,1), (regular,1), (restrict,3), (rotate,1), (second,1), (single_valued1,1), (single_valued2,1), (single_valued3,1), (singleton,1), (singleton_relation,0), (subset_relation,0), (successor,1), (successor_relation,0), (sum_class,1), (symmetric_difference,2), (union,2), (universal_class,0), (unordered_pair,2), (y,0)].
predicates[(compatible,3), (function,1), (homomorphism,3), (inductive,1), (maps,3), (member,2), (one_to_one,1), (operation,1), (single_valued_class,1), (subclass,2)].
end_of_list.

list_of_clauses(axioms,cnf).

clause(
forall([U,X,Y],
or( not(subclass(X,Y)),
    not(member(U,X)),
    member(U,Y))),
subclass_members ).

clause(
forall([X,Y],
or( member(not_subclass_element(X,Y),X),
    subclass(X,Y))),
not_subclass_members1 ).

clause(
forall([X,Y],
or( not(member(not_subclass_element(X,Y),Y)),
    subclass(X,Y))),
not_subclass_members2 ).

clause(
forall([X],
or( subclass(X,universal_class))),
class_elements_are_sets ).

clause(
forall([X,Y],
or( not(equal(X,Y)),
    subclass(X,Y))),
equal_implies_subclass1 ).

clause(
forall([X,Y],
or( not(equal(X,Y)),
    subclass(Y,X))),
equal_implies_subclass2 ).

clause(
forall([X,Y],
or( not(subclass(X,Y)),
    not(subclass(Y,X)),
    equal(X,Y))),
subclass_implies_equal ).

clause(
forall([U,X,Y],
or( not(member(U,unordered_pair(X,Y))),
    equal(U,X),
    equal(U,Y))),
unordered_pair_member ).

clause(
forall([X,Y],
or( not(member(X,universal_class)),
    member(X,unordered_pair(X,Y)))),
unordered_pair2 ).

clause(
forall([X,Y],
or( not(member(Y,universal_class)),
    member(Y,unordered_pair(X,Y)))),
unordered_pair3 ).

clause(
forall([X,Y],
or( member(unordered_pair(X,Y),universal_class))),
unordered_pairs_in_universal ).

clause(
forall([X],
or( equal(unordered_pair(X,X),singleton(X)))),
singleton_set ).

clause(
forall([X,Y],
or( equal(unordered_pair(singleton(X),unordered_pair(X,singleton(Y))),ordered_pair(X,Y)))),
ordered_pair ).

clause(
forall([U,V,X,Y],
or( not(member(ordered_pair(U,V),cross_product(X,Y))),
    member(U,X))),
cartesian_product1 ).

clause(
forall([U,V,X,Y],
or( not(member(ordered_pair(U,V),cross_product(X,Y))),
    member(V,Y))),
cartesian_product2 ).

clause(
forall([U,V,X,Y],
or( not(member(U,X)),
    not(member(V,Y)),
    member(ordered_pair(U,V),cross_product(X,Y)))),
cartesian_product3 ).

clause(
forall([X,Y,Z],
or( not(member(Z,cross_product(X,Y))),
    equal(ordered_pair(first(Z),second(Z)),Z))),
cartesian_product4 ).

clause(
or( subclass(element_relation,cross_product(universal_class,universal_class))),
element_relation1 ).

clause(
forall([X,Y],
or( not(member(ordered_pair(X,Y),element_relation)),
    member(X,Y))),
element_relation2 ).

clause(
forall([X,Y],
or( not(member(ordered_pair(X,Y),cross_product(universal_class,universal_class))),
    not(member(X,Y)),
    member(ordered_pair(X,Y),element_relation))),
element_relation3 ).

clause(
forall([X,Y,Z],
or( not(member(Z,intersection(X,Y))),
    member(Z,X))),
intersection1 ).

clause(
forall([X,Y,Z],
or( not(member(Z,intersection(X,Y))),
    member(Z,Y))),
intersection2 ).

clause(
forall([X,Y,Z],
or( not(member(Z,X)),
    not(member(Z,Y)),
    member(Z,intersection(X,Y)))),
intersection3 ).

clause(
forall([X,Z],
or( not(member(Z,complement(X))),
    not(member(Z,X)))),
complement1 ).

clause(
forall([X,Z],
or( not(member(Z,universal_class)),
    member(Z,complement(X)),
    member(Z,X))),
complement2 ).

clause(
forall([X,Y],
or( equal(complement(intersection(complement(X),complement(Y))),union(X,Y)))),
union ).

clause(
forall([X,Y],
or( equal(intersection(complement(intersection(X,Y)),complement(intersection(complement(X),complement(Y)))),symmetric_difference(X,Y)))),
symmetric_difference ).

clause(
forall([X,Xr,Y],
or( equal(intersection(Xr,cross_product(X,Y)),restrict(Xr,X,Y)))),
restriction1 ).

clause(
forall([X,Xr,Y],
or( equal(intersection(cross_product(X,Y),Xr),restrict(Xr,X,Y)))),
restriction2 ).

clause(
forall([X,Z],
or( not(equal(restrict(X,singleton(Z),universal_class),null_class)),
    not(member(Z,domain_of(X))))),
domain1 ).

clause(
forall([X,Z],
or( not(member(Z,universal_class)),
    equal(restrict(X,singleton(Z),universal_class),null_class),
    member(Z,domain_of(X)))),
domain2 ).

clause(
forall([X],
or( subclass(rotate(X),cross_product(cross_product(universal_class,universal_class),universal_class)))),
rotate1 ).

clause(
forall([U,V,W,X],
or( not(member(ordered_pair(ordered_pair(U,V),W),rotate(X))),
    member(ordered_pair(ordered_pair(V,W),U),X))),
rotate2 ).

clause(
forall([U,V,W,X],
or( not(member(ordered_pair(ordered_pair(V,W),U),X)),
    not(member(ordered_pair(ordered_pair(U,V),W),cross_product(cross_product(universal_class,universal_class),universal_class))),
    member(ordered_pair(ordered_pair(U,V),W),rotate(X)))),
rotate3 ).

clause(
forall([X],
or( subclass(flip(X),cross_product(cross_product(universal_class,universal_class),universal_class)))),
flip1 ).

clause(
forall([U,V,W,X],
or( not(member(ordered_pair(ordered_pair(U,V),W),flip(X))),
    member(ordered_pair(ordered_pair(V,U),W),X))),
flip2 ).

clause(
forall([U,V,W,X],
or( not(member(ordered_pair(ordered_pair(V,U),W),X)),
    not(member(ordered_pair(ordered_pair(U,V),W),cross_product(cross_product(universal_class,universal_class),universal_class))),
    member(ordered_pair(ordered_pair(U,V),W),flip(X)))),
flip3 ).

clause(
forall([Y],
or( equal(domain_of(flip(cross_product(Y,universal_class))),inverse(Y)))),
inverse ).

clause(
forall([Z],
or( equal(domain_of(inverse(Z)),range_of(Z)))),
range_of ).

clause(
forall([X,Y,Z],
or( equal(first(not_subclass_element(restrict(Z,X,singleton(Y)),null_class)),domain(Z,X,Y)))),
domain ).

clause(
forall([X,Y,Z],
or( equal(second(not_subclass_element(restrict(Z,singleton(X),Y),null_class)),range(Z,X,Y)))),
range ).

clause(
forall([X,Xr],
or( equal(range_of(restrict(Xr,X,universal_class)),image(Xr,X)))),
image ).

clause(
forall([X],
or( equal(union(X,singleton(X)),successor(X)))),
successor ).

clause(
or( subclass(successor_relation,cross_product(universal_class,universal_class))),
successor_relation1 ).

clause(
forall([X,Y],
or( not(member(ordered_pair(X,Y),successor_relation)),
    equal(successor(X),Y))),
successor_relation2 ).

clause(
forall([X,Y],
or( not(equal(successor(X),Y)),
    not(member(ordered_pair(X,Y),cross_product(universal_class,universal_class))),
    member(ordered_pair(X,Y),successor_relation))),
successor_relation3 ).

clause(
forall([X],
or( not(inductive(X)),
    member(null_class,X))),
inductive1 ).

clause(
forall([X],
or( not(inductive(X)),
    subclass(image(successor_relation,X),X))),
inductive2 ).

clause(
forall([X],
or( not(member(null_class,X)),
    not(subclass(image(successor_relation,X),X)),
    inductive(X))),
inductive3 ).

clause(
or( inductive(omega)),
omega_is_inductive1 ).

clause(
forall([Y],
or( not(inductive(Y)),
    subclass(omega,Y))),
omega_is_inductive2 ).

clause(
or( member(omega,universal_class)),
omega_in_universal ).

clause(
forall([X],
or( equal(domain_of(restrict(element_relation,universal_class,X)),sum_class(X)))),
sum_class_definition ).

clause(
forall([X],
or( not(member(X,universal_class)),
    member(sum_class(X),universal_class))),
sum_class2 ).

clause(
forall([X],
or( equal(complement(image(element_relation,complement(X))),power_class(X)))),
power_class_definition ).

clause(
forall([U],
or( not(member(U,universal_class)),
    member(power_class(U),universal_class))),
power_class2 ).

clause(
forall([Xr,Yr],
or( subclass(compose(Yr,Xr),cross_product(universal_class,universal_class)))),
compose1 ).

clause(
forall([Xr,Y,Yr,Z],
or( not(member(ordered_pair(Y,Z),compose(Yr,Xr))),
    member(Z,image(Yr,image(Xr,singleton(Y)))))),
compose2 ).

clause(
forall([Xr,Y,Yr,Z],
or( not(member(Z,image(Yr,image(Xr,singleton(Y))))),
    not(member(ordered_pair(Y,Z),cross_product(universal_class,universal_class))),
    member(ordered_pair(Y,Z),compose(Yr,Xr)))),
compose3 ).

clause(
forall([X],
or( not(single_valued_class(X)),
    subclass(compose(X,inverse(X)),identity_relation))),
single_valued_class1 ).

clause(
forall([X],
or( not(subclass(compose(X,inverse(X)),identity_relation)),
    single_valued_class(X))),
single_valued_class2 ).

clause(
forall([Xf],
or( not(function(Xf)),
    subclass(Xf,cross_product(universal_class,universal_class)))),
function1 ).

clause(
forall([Xf],
or( not(function(Xf)),
    subclass(compose(Xf,inverse(Xf)),identity_relation))),
function2 ).

clause(
forall([Xf],
or( not(subclass(Xf,cross_product(universal_class,universal_class))),
    not(subclass(compose(Xf,inverse(Xf)),identity_relation)),
    function(Xf))),
function3 ).

clause(
forall([X,Xf],
or( not(function(Xf)),
    not(member(X,universal_class)),
    member(image(Xf,X),universal_class))),
replacement ).

clause(
forall([X],
or( equal(X,null_class),
    member(regular(X),X))),
regularity1 ).

clause(
forall([X],
or( equal(X,null_class),
    equal(intersection(X,regular(X)),null_class))),
regularity2 ).

clause(
forall([Xf,Y],
or( equal(sum_class(image(Xf,singleton(Y))),apply(Xf,Y)))),
apply ).

clause(
or( function(choice)),
choice1 ).

clause(
forall([Y],
or( not(member(Y,universal_class)),
    equal(Y,null_class),
    member(apply(choice,Y),Y))),
choice2 ).

clause(
forall([Xf],
or( not(one_to_one(Xf)),
    function(Xf))),
one_to_one1 ).

clause(
forall([Xf],
or( not(one_to_one(Xf)),
    function(inverse(Xf)))),
one_to_one2 ).

clause(
forall([Xf],
or( not(function(inverse(Xf))),
    not(function(Xf)),
    one_to_one(Xf))),
one_to_one3 ).

clause(
or( equal(intersection(cross_product(universal_class,universal_class),intersection(cross_product(universal_class,universal_class),complement(compose(complement(element_relation),inverse(element_relation))))),subset_relation)),
subset_relation ).

clause(
or( equal(intersection(inverse(subset_relation),subset_relation),identity_relation)),
identity_relation ).

clause(
forall([Xr],
or( equal(complement(domain_of(intersection(Xr,identity_relation))),diagonalise(Xr)))),
diagonalisation ).

clause(
forall([X],
or( equal(intersection(domain_of(X),diagonalise(compose(inverse(element_relation),X))),cantor(X)))),
cantor_class ).

clause(
forall([Xf],
or( not(operation(Xf)),
    function(Xf))),
operation1 ).

clause(
forall([Xf],
or( not(operation(Xf)),
    equal(cross_product(domain_of(domain_of(Xf)),domain_of(domain_of(Xf))),domain_of(Xf)))),
operation2 ).

clause(
forall([Xf],
or( not(operation(Xf)),
    subclass(range_of(Xf),domain_of(domain_of(Xf))))),
operation3 ).

clause(
forall([Xf],
or( not(function(Xf)),
    not(equal(cross_product(domain_of(domain_of(Xf)),domain_of(domain_of(Xf))),domain_of(Xf))),
    not(subclass(range_of(Xf),domain_of(domain_of(Xf)))),
    operation(Xf))),
operation4 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(compatible(Xh,Xf1,Xf2)),
    function(Xh))),
compatible1 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(compatible(Xh,Xf1,Xf2)),
    equal(domain_of(domain_of(Xf1)),domain_of(Xh)))),
compatible2 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(compatible(Xh,Xf1,Xf2)),
    subclass(range_of(Xh),domain_of(domain_of(Xf2))))),
compatible3 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(function(Xh)),
    not(equal(domain_of(domain_of(Xf1)),domain_of(Xh))),
    not(subclass(range_of(Xh),domain_of(domain_of(Xf2)))),
    compatible(Xh,Xf1,Xf2))),
compatible4 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(homomorphism(Xh,Xf1,Xf2)),
    operation(Xf1))),
homomorphism1 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(homomorphism(Xh,Xf1,Xf2)),
    operation(Xf2))),
homomorphism2 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(homomorphism(Xh,Xf1,Xf2)),
    compatible(Xh,Xf1,Xf2))),
homomorphism3 ).

clause(
forall([X,Xf1,Xf2,Xh,Y],
or( not(homomorphism(Xh,Xf1,Xf2)),
    not(member(ordered_pair(X,Y),domain_of(Xf1))),
    equal(apply(Xf2,ordered_pair(apply(Xh,X),apply(Xh,Y))),apply(Xh,apply(Xf1,ordered_pair(X,Y)))))),
homomorphism4 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(operation(Xf1)),
    not(operation(Xf2)),
    not(compatible(Xh,Xf1,Xf2)),
    member(ordered_pair(not_homomorphism1(Xh,Xf1,Xf2),not_homomorphism2(Xh,Xf1,Xf2)),domain_of(Xf1)),
    homomorphism(Xh,Xf1,Xf2))),
homomorphism5 ).

clause(
forall([Xf1,Xf2,Xh],
or( not(operation(Xf1)),
    not(operation(Xf2)),
    not(compatible(Xh,Xf1,Xf2)),
    not(equal(apply(Xf2,ordered_pair(apply(Xh,not_homomorphism1(Xh,Xf1,Xf2)),apply(Xh,not_homomorphism2(Xh,Xf1,Xf2)))),apply(Xh,apply(Xf1,ordered_pair(not_homomorphism1(Xh,Xf1,Xf2),not_homomorphism2(Xh,Xf1,Xf2)))))),
    homomorphism(Xh,Xf1,Xf2))),
homomorphism6 ).

clause(
forall([X],
or( subclass(compose_class(X),cross_product(universal_class,universal_class)))),
compose_class_definition1 ).

clause(
forall([X,Y,Z],
or( not(member(ordered_pair(Y,Z),compose_class(X))),
    equal(compose(X,Y),Z))),
compose_class_definition2 ).

clause(
forall([X,Y,Z],
or( not(member(ordered_pair(Y,Z),cross_product(universal_class,universal_class))),
    not(equal(compose(X,Y),Z)),
    member(ordered_pair(Y,Z),compose_class(X)))),
compose_class_definition3 ).

clause(
or( subclass(composition_function,cross_product(universal_class,cross_product(universal_class,universal_class)))),
definition_of_composition_function1 ).

clause(
forall([X,Y,Z],
or( not(member(ordered_pair(X,ordered_pair(Y,Z)),composition_function)),
    equal(compose(X,Y),Z))),
definition_of_composition_function2 ).

clause(
forall([X,Y],
or( not(member(ordered_pair(X,Y),cross_product(universal_class,universal_class))),
    member(ordered_pair(X,ordered_pair(Y,compose(X,Y))),composition_function))),
definition_of_composition_function3 ).

clause(
or( subclass(domain_relation,cross_product(universal_class,universal_class))),
definition_of_domain_relation1 ).

clause(
forall([X,Y],
or( not(member(ordered_pair(X,Y),domain_relation)),
    equal(domain_of(X),Y))),
definition_of_domain_relation2 ).

clause(
forall([X],
or( not(member(X,universal_class)),
    member(ordered_pair(X,domain_of(X)),domain_relation))),
definition_of_domain_relation3 ).

clause(
forall([X],
or( equal(first(not_subclass_element(compose(X,inverse(X)),identity_relation)),single_valued1(X)))),
single_valued_term_defn1 ).

clause(
forall([X],
or( equal(second(not_subclass_element(compose(X,inverse(X)),identity_relation)),single_valued2(X)))),
single_valued_term_defn2 ).

clause(
forall([X],
or( equal(domain(X,image(inverse(X),singleton(single_valued1(X))),single_valued2(X)),single_valued3(X)))),
single_valued_term_defn3 ).

clause(
or( equal(intersection(complement(compose(element_relation,complement(identity_relation))),element_relation),singleton_relation)),
compose_can_define_singleton ).

clause(
or( subclass(application_function,cross_product(universal_class,cross_product(universal_class,universal_class)))),
application_function_defn1 ).

clause(
forall([X,Y,Z],
or( not(member(ordered_pair(X,ordered_pair(Y,Z)),application_function)),
    member(Y,domain_of(X)))),
application_function_defn2 ).

clause(
forall([X,Y,Z],
or( not(member(ordered_pair(X,ordered_pair(Y,Z)),application_function)),
    equal(apply(X,Y),Z))),
application_function_defn3 ).

clause(
forall([X,Y,Z],
or( not(member(ordered_pair(X,ordered_pair(Y,Z)),cross_product(universal_class,cross_product(universal_class,universal_class)))),
    not(member(Y,domain_of(X))),
    member(ordered_pair(X,ordered_pair(Y,apply(X,Y))),application_function))),
application_function_defn4 ).

clause(
forall([X,Xf,Y],
or( not(maps(Xf,X,Y)),
    function(Xf))),
maps1 ).

clause(
forall([X,Xf,Y],
or( not(maps(Xf,X,Y)),
    equal(domain_of(Xf),X))),
maps2 ).

clause(
forall([X,Xf,Y],
or( not(maps(Xf,X,Y)),
    subclass(range_of(Xf),Y))),
maps3 ).

clause(
forall([Xf,Y],
or( not(function(Xf)),
    not(subclass(range_of(Xf),Y)),
    maps(Xf,domain_of(Xf),Y))),
maps4 ).

end_of_list.

list_of_clauses(conjectures,cnf).

clause(  %(conjecture)
or( member(ordered_pair(universal_class,y),cross_product(universal_class,universal_class))),
prove_corollary_2_to_universal_class_not_set_1 ).

end_of_list.

end_problem.
%--------------------------------------------------------------------------
