#--------------------------------------------------------------------------
# File     : SET012-3 : TPTP v2.1.0. Released v1.0.0.
# Domain   : Set Theory
# Problem  : Complement is an involution
# Version  : [BL+86] axioms.
# English  : 

# Refs     : [BL+86] Boyer et al. (1986), Set Theory in First-Order Logic: 
# Source   : [TPTP]
# Names    : 

# Status   : unknown
# Rating   : 1.00 v2.0.0
# Syntax   : Number of clauses    :  144 (  20 non-Horn;  14 unit; 121 RR)
#            Number of literals   :  358 (  50 equality)
#            Maximal clause size  :    8 (   2 average)
#            Number of predicates :   14 (   0 propositional; 1-5 arity)
#            Number of functors   :   62 (   9 constant; 0-5 arity)
#            Number of variables  :  320 (  28 singleton)
#            Maximal term depth   :    4 (   1 average)

# Comments : 
#          : tptp2X -f setheo:sign -t rm_equality:rstfp SET012-3.p 
#--------------------------------------------------------------------------
# a2, axiom.
little_set(X) <- 
    member(X, Y).

# extensionality1, axiom.
little_set(f1(X, Y));
equal(X, Y) <- .

# extensionality2, axiom.
member(f1(X, Y), X);
member(f1(X, Y), Y);
equal(X, Y) <- .

# extensionality3, axiom.
equal(X, Y) <- 
    member(f1(X, Y), X),
    member(f1(X, Y), Y).

# non_ordered_pair1, axiom.
equal(U, X);
equal(U, Y) <- 
    member(U, non_ordered_pair(X, Y)).

# non_ordered_pair2, axiom.
member(U, non_ordered_pair(X, Y)) <- 
    little_set(U),
    equal(U, X).

# non_ordered_pair3, axiom.
member(U, non_ordered_pair(X, Y)) <- 
    little_set(U),
    equal(U, Y).

# non_ordered_pair4, axiom.
little_set(non_ordered_pair(X, Y)) <- .

# singleton_set, axiom.
equal(singleton_set(X), non_ordered_pair(X, X)) <- .

# ordered_pair, axiom.
equal(ordered_pair(X, Y), non_ordered_pair(singleton_set(X), non_ordered_pair(X, Y))) <- .

# ordered_pair_predicate1, axiom.
little_set(f2(X)) <- 
    ordered_pair_predicate(X).

# ordered_pair_predicate2, axiom.
little_set(f3(X)) <- 
    ordered_pair_predicate(X).

# ordered_pair_predicate3, axiom.
equal(X, ordered_pair(f2(X), f3(X))) <- 
    ordered_pair_predicate(X).

# ordered_pair_predicate4, axiom.
ordered_pair_predicate(X) <- 
    little_set(Y),
    little_set(Z),
    equal(X, ordered_pair(Y, Z)).

# first1, axiom.
little_set(f4(Z, X)) <- 
    member(Z, first(X)).

# first2, axiom.
little_set(f5(Z, X)) <- 
    member(Z, first(X)).

# first3, axiom.
equal(X, ordered_pair(f4(Z, X), f5(Z, X))) <- 
    member(Z, first(X)).

# first4, axiom.
member(Z, f4(Z, X)) <- 
    member(Z, first(X)).

# first5, axiom.
member(Z, first(X)) <- 
    little_set(U),
    little_set(V),
    equal(X, ordered_pair(U, V)),
    member(Z, U).

# second1, axiom.
little_set(f6(Z, X)) <- 
    member(Z, second(X)).

# second2, axiom.
little_set(f7(Z, X)) <- 
    member(Z, second(X)).

# second3, axiom.
equal(X, ordered_pair(f6(Z, X), f7(Z, X))) <- 
    member(Z, second(X)).

# second4, axiom.
member(Z, f7(Z, X)) <- 
    member(Z, second(X)).

# second5, axiom.
member(Z, second(X)) <- 
    little_set(U),
    little_set(V),
    equal(X, ordered_pair(U, V)),
    member(Z, V).

# element_relation1, axiom.
ordered_pair_predicate(Z) <- 
    member(Z, estin).

# element_relation2, axiom.
member(first(Z), second(Z)) <- 
    member(Z, estin).

# element_relation3, axiom.
member(Z, estin) <- 
    little_set(Z),
    ordered_pair_predicate(Z),
    member(first(Z), second(Z)).

# intersection1, axiom.
member(Z, X) <- 
    member(Z, intersection(X, Y)).

# intersection2, axiom.
member(Z, Y) <- 
    member(Z, intersection(X, Y)).

# intersection3, axiom.
member(Z, intersection(X, Y)) <- 
    member(Z, X),
    member(Z, Y).

# complement1, axiom.
 <- member(Z, complement(X)),
    member(Z, X).

# complement2, axiom.
member(Z, complement(X));
member(Z, X) <- 
    little_set(Z).

# union, axiom.
equal(union(X, Y), complement(intersection(complement(X), complement(Y)))) <- .

# domain1, axiom.
ordered_pair_predicate(f8(Z, X)) <- 
    member(Z, domain_of(X)).

# domain2, axiom.
member(f8(Z, X), X) <- 
    member(Z, domain_of(X)).

# domain3, axiom.
equal(Z, first(f8(Z, X))) <- 
    member(Z, domain_of(X)).

# domain4, axiom.
member(Z, domain_of(X)) <- 
    little_set(Z),
    ordered_pair_predicate(Xp),
    member(Xp, X),
    equal(Z, first(Xp)).

# cross_product1, axiom.
ordered_pair_predicate(Z) <- 
    member(Z, cross_product(X, Y)).

# cross_product2, axiom.
member(first(Z), X) <- 
    member(Z, cross_product(X, Y)).

# cross_product3, axiom.
member(second(Z), Y) <- 
    member(Z, cross_product(X, Y)).

# cross_product4, axiom.
member(Z, cross_product(X, Y)) <- 
    little_set(Z),
    ordered_pair_predicate(Z),
    member(first(Z), X),
    member(second(Z), Y).

# converse1, axiom.
ordered_pair_predicate(Z) <- 
    member(Z, converse(X)).

# converse2, axiom.
member(ordered_pair(second(Z), first(Z)), X) <- 
    member(Z, converse(X)).

# converse3, axiom.
member(Z, converse(X)) <- 
    little_set(Z),
    ordered_pair_predicate(Z),
    member(ordered_pair(second(Z), first(Z)), X).

# rotate_right1, axiom.
little_set(f9(Z, X)) <- 
    member(Z, rotate_right(X)).

# rotate_right2, axiom.
little_set(f10(Z, X)) <- 
    member(Z, rotate_right(X)).

# rotate_right3, axiom.
little_set(f11(Z, X)) <- 
    member(Z, rotate_right(X)).

# rotate_right4, axiom.
equal(Z, ordered_pair(f9(Z, X), ordered_pair(f10(Z, X), f11(Z, X)))) <- 
    member(Z, rotate_right(X)).

# rotate_right5, axiom.
member(ordered_pair(f10(Z, X), ordered_pair(f11(Z, X), f9(Z, X))), X) <- 
    member(Z, rotate_right(X)).

# rotate_right6, axiom.
member(Z, rotate_right(X)) <- 
    little_set(Z),
    little_set(U),
    little_set(V),
    little_set(W),
    equal(Z, ordered_pair(U, ordered_pair(V, W))),
    member(ordered_pair(V, ordered_pair(W, U)), X).

# flip_range1, axiom.
little_set(f12(Z, X)) <- 
    member(Z, flip_range_of(X)).

# flip_range2, axiom.
little_set(f13(Z, X)) <- 
    member(Z, flip_range_of(X)).

# flip_range3, axiom.
little_set(f14(Z, X)) <- 
    member(Z, flip_range_of(X)).

# flip_range4, axiom.
equal(Z, ordered_pair(f12(Z, X), ordered_pair(f13(Z, X), f14(Z, X)))) <- 
    member(Z, flip_range_of(X)).

# flip_range5, axiom.
member(ordered_pair(f12(Z, X), ordered_pair(f14(Z, X), f13(Z, X))), X) <- 
    member(Z, flip_range_of(X)).

# flip_range6, axiom.
member(Z, flip_range_of(X)) <- 
    little_set(Z),
    little_set(U),
    little_set(V),
    little_set(W),
    equal(Z, ordered_pair(U, ordered_pair(V, W))),
    member(ordered_pair(U, ordered_pair(W, V)), X).

# successor, axiom.
equal(successor(X), union(X, singleton_set(X))) <- .

# empty_set, axiom.
 <- member(Z, empty_set).

# universal_set, axiom.
member(Z, universal_set) <- 
    little_set(Z).

# infinity1, axiom.
little_set(infinity) <- .

# infinity2, axiom.
member(empty_set, infinity) <- .

# infinity3, axiom.
member(successor(X), infinity) <- 
    member(X, infinity).

# sigma1, axiom.
member(f16(Z, X), X) <- 
    member(Z, sigma(X)).

# sigma2, axiom.
member(Z, f16(Z, X)) <- 
    member(Z, sigma(X)).

# sigma3, axiom.
member(Z, sigma(X)) <- 
    member(Y, X),
    member(Z, Y).

# sigma4, axiom.
little_set(sigma(U)) <- 
    little_set(U).

# subset1, axiom.
member(U, Y) <- 
    subset(X, Y),
    member(U, X).

# subset2, axiom.
subset(X, Y);
member(f17(X, Y), X) <- .

# subset3, axiom.
subset(X, Y) <- 
    member(f17(X, Y), Y).

# proper_subset1, axiom.
subset(X, Y) <- 
    proper_subset(X, Y).

# proper_subset2, axiom.
 <- proper_subset(X, Y),
    equal(X, Y).

# proper_subset3, axiom.
proper_subset(X, Y);
equal(X, Y) <- 
    subset(X, Y).

# powerset1, axiom.
subset(Z, X) <- 
    member(Z, powerset(X)).

# powerset2, axiom.
member(Z, powerset(X)) <- 
    little_set(Z),
    subset(Z, X).

# powerset3, axiom.
little_set(powerset(U)) <- 
    little_set(U).

# relation1, axiom.
ordered_pair_predicate(X) <- 
    relation(Z),
    member(X, Z).

# relation2, axiom.
relation(Z);
member(f18(Z), Z) <- .

# relation3, axiom.
relation(Z) <- 
    ordered_pair_predicate(f18(Z)).

# single_valued_set1, axiom.
equal(V, W) <- 
    single_valued_set(X),
    little_set(U),
    little_set(V),
    little_set(W),
    member(ordered_pair(U, V), X),
    member(ordered_pair(U, W), X).

# single_valued_set2, axiom.
single_valued_set(X);
little_set(f19(X)) <- .

# single_valued_set3, axiom.
single_valued_set(X);
little_set(f20(X)) <- .

# single_valued_set4, axiom.
single_valued_set(X);
little_set(f21(X)) <- .

# single_valued_set5, axiom.
single_valued_set(X);
member(ordered_pair(f19(X), f20(X)), X) <- .

# single_valued_set6, axiom.
single_valued_set(X);
member(ordered_pair(f19(X), f21(X)), X) <- .

# single_valued_set7, axiom.
single_valued_set(X) <- 
    equal(f20(X), f21(X)).

# function1, axiom.
relation(Xf) <- 
    function(Xf).

# function2, axiom.
single_valued_set(Xf) <- 
    function(Xf).

# function3, axiom.
function(Xf) <- 
    relation(Xf),
    single_valued_set(Xf).

# image_and_substitution1, axiom.
ordered_pair_predicate(f22(Z, X, Xf)) <- 
    member(Z, image(X, Xf)).

# image_and_substitution2, axiom.
member(f22(Z, X, Xf), Xf) <- 
    member(Z, image(X, Xf)).

# image_and_substitution3, axiom.
member(first(f22(Z, X, Xf)), X) <- 
    member(Z, image(X, Xf)).

# image_and_substitution4, axiom.
equal(second(f22(Z, X, Xf)), Z) <- 
    member(Z, image(X, Xf)).

# image_and_substitution5, axiom.
member(Z, image(X, Xf)) <- 
    little_set(Z),
    ordered_pair_predicate(Y),
    member(Y, Xf),
    member(first(Y), X),
    equal(second(Y), Z).

# image_and_substitution6, axiom.
little_set(image(X, Xf)) <- 
    little_set(X),
    function(Xf).

# disjoint1, axiom.
 <- disjoint(X, Y),
    member(U, X),
    member(U, Y).

# disjoint2, axiom.
disjoint(X, Y);
member(f23(X, Y), X) <- .

# disjoint3, axiom.
disjoint(X, Y);
member(f23(X, Y), Y) <- .

# regularity1, axiom.
equal(X, empty_set);
member(f24(X), X) <- .

# regularity2, axiom.
equal(X, empty_set);
disjoint(f24(X), X) <- .

# choice1, axiom.
function(f25) <- .

# choice2, axiom.
equal(X, empty_set);
member(f26(X), X) <- 
    little_set(X).

# choice3, axiom.
equal(X, empty_set);
member(ordered_pair(X, f26(X)), f25) <- 
    little_set(X).

# range_of1, axiom.
ordered_pair_predicate(f27(Z, X)) <- 
    member(Z, range_of(X)).

# range_of2, axiom.
member(f27(Z, X), X) <- 
    member(Z, range_of(X)).

# range_of3, axiom.
equal(Z, second(f27(Z, X))) <- 
    member(Z, range_of(X)).

# range_of4, axiom.
member(Z, range_of(X)) <- 
    little_set(Z),
    ordered_pair_predicate(Xp),
    member(Xp, X),
    equal(Z, second(Xp)).

# identity_relation1, axiom.
ordered_pair_predicate(Z) <- 
    member(Z, identity_relation).

# identity_relation2, axiom.
equal(first(Z), second(Z)) <- 
    member(Z, identity_relation).

# identity_relation3, axiom.
member(Z, identity_relation) <- 
    little_set(Z),
    ordered_pair_predicate(Z),
    equal(first(Z), second(Z)).

# restrict, axiom.
equal(restrict(X, Y), intersection(X, cross_product(Y, universal_set))) <- .

# one_to_one_function1, axiom.
function(Xf) <- 
    one_to_one_function(Xf).

# one_to_one_function2, axiom.
function(converse(Xf)) <- 
    one_to_one_function(Xf).

# one_to_one_function3, axiom.
one_to_one_function(Xf) <- 
    function(Xf),
    function(converse(Xf)).

# apply1, axiom.
ordered_pair_predicate(f28(Z, Xf, Y)) <- 
    member(Z, apply(Xf, Y)).

# apply2, axiom.
member(f28(Z, Xf, Y), Xf) <- 
    member(Z, apply(Xf, Y)).

# apply3, axiom.
equal(first(f28(Z, Xf, Y)), Y) <- 
    member(Z, apply(Xf, Y)).

# apply4, axiom.
member(Z, second(f28(Z, Xf, Y))) <- 
    member(Z, apply(Xf, Y)).

# apply5, axiom.
member(Z, apply(Xf, Y)) <- 
    ordered_pair_predicate(W),
    member(W, Xf),
    equal(first(W), Y),
    member(Z, second(W)).

# apply_to_two_arguments, axiom.
equal(apply_to_two_arguments(Xf, X, Y), apply(Xf, ordered_pair(X, Y))) <- .

# maps1, axiom.
function(Xf) <- 
    maps(Xf, X, Y).

# maps2, axiom.
equal(domain_of(Xf), X) <- 
    maps(Xf, X, Y).

# maps3, axiom.
subset(range_of(Xf), Y) <- 
    maps(Xf, X, Y).

# maps4, axiom.
maps(Xf, X, Y) <- 
    function(Xf),
    equal(domain_of(Xf), X),
    subset(range_of(Xf), Y).

# closed1, axiom.
little_set(Xs) <- 
    closed(Xs, Xf).

# closed2, axiom.
little_set(Xf) <- 
    closed(Xs, Xf).

# closed3, axiom.
maps(Xf, cross_product(Xs, Xs), Xs) <- 
    closed(Xs, Xf).

# closed4, axiom.
closed(Xs, Xf) <- 
    little_set(Xs),
    little_set(Xf),
    maps(Xf, cross_product(Xs, Xs), Xs).

# compose1, axiom.
little_set(f29(Z, Xf, Xg)) <- 
    member(Z, compose(Xf, Xg)).

# compose2, axiom.
little_set(f30(Z, Xf, Xg)) <- 
    member(Z, compose(Xf, Xg)).

# compose3, axiom.
little_set(f31(Z, Xf, Xg)) <- 
    member(Z, compose(Xf, Xg)).

# compose4, axiom.
equal(Z, ordered_pair(f29(Z, Xf, Xg), f30(Z, Xf, Xg))) <- 
    member(Z, compose(Xf, Xg)).

# compose5, axiom.
member(ordered_pair(f29(Z, Xf, Xg), f31(Z, Xf, Xg)), Xf) <- 
    member(Z, compose(Xf, Xg)).

# compose6, axiom.
member(ordered_pair(f31(Z, Xf, Xg), f30(Z, Xf, Xg)), Xg) <- 
    member(Z, compose(Xf, Xg)).

# compose7, axiom.
member(Z, compose(Xf, Xg)) <- 
    little_set(Z),
    little_set(X),
    little_set(Y),
    little_set(W),
    equal(Z, ordered_pair(X, Y)),
    member(ordered_pair(X, W), Xf),
    member(ordered_pair(W, Y), Xg).

# homomorphism1, axiom.
closed(Xs1, Xf1) <- 
    homomorphism(Xh, Xs1, Xf1, Xs2, Xf2).

# homomorphism2, axiom.
closed(Xs2, Xf2) <- 
    homomorphism(Xh, Xs1, Xf1, Xs2, Xf2).

# homomorphism3, axiom.
maps(Xh, Xs1, Xs2) <- 
    homomorphism(Xh, Xs1, Xf1, Xs2, Xf2).

# homomorphism4, axiom.
equal(apply(Xh, apply_to_two_arguments(Xf1, X, Y)), apply_to_two_arguments(Xf2, apply(Xh, X), apply(Xh, Y))) <- 
    homomorphism(Xh, Xs1, Xf1, Xs2, Xf2),
    member(X, Xs1),
    member(Y, Xs1).

# homomorphism5, axiom.
homomorphism(Xh, Xs1, Xf1, Xs2, Xf2);
member(f32(Xh, Xs1, Xf1, Xs2, Xf2), Xs1) <- 
    closed(Xs1, Xf1),
    closed(Xs2, Xf2),
    maps(Xh, Xs1, Xs2).

# homomorphism6, axiom.
homomorphism(Xh, Xs1, Xf1, Xs2, Xf2);
member(f33(Xh, Xs1, Xf1, Xs2, Xf2), Xs1) <- 
    closed(Xs1, Xf1),
    closed(Xs2, Xf2),
    maps(Xh, Xs1, Xs2).

# homomorphism7, axiom.
homomorphism(Xh, Xs1, Xf1, Xs2, Xf2) <- 
    closed(Xs1, Xf1),
    closed(Xs2, Xf2),
    maps(Xh, Xs1, Xs2),
    equal(apply(Xh, apply_to_two_arguments(Xf1, f32(Xh, Xs1, Xf1, Xs2, Xf2), f33(Xh, Xs1, Xf1, Xs2, Xf2))), apply_to_two_arguments(Xf2, apply(Xh, f32(Xh, Xs1, Xf1, Xs2, Xf2)), apply(Xh, f33(Xh, Xs1, Xf1, Xs2, Xf2)))).

# complement_of_a_is_b, hypothesis.
equal(complement(as), bs) <- .

# complement_of_b_is_c, hypothesis.
equal(complement(bs), cs) <- .

# prove_a_equals_c, conjecture.
 ?- equal(as, cs).

#--------------------------------------------------------------------------
