rm -f *_ml.o *_ml.l *.th 
===> library finite_sets: object code and theory files deleted
rm -f finite_sets.th
echo 'set_flag(`abort_when_fail`,true);;'\
     'loadt `mk_finite_sets`;;' | ../../hol 

           __  _     _    __   __  _   __     _  _   __   _
   |___   |    |    /_\  |__  |__  |  |       |__|  |  |  |
   |      |__  |__ /   \  __|  __| |  |__     |  |  |__|  |__

          HOL88 Version 2.01 (Franz: pre-release), built on Jun 25 1992

#false : bool


() : void

IS_SET_REP = 
"\s. !P. P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==> P s"
: term

IS_SET_REP_EMPTY = 
|- (\s.
     !P. P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==> P s)
   (\x. F)

INSERTION_PRESERVES_IS_SET_REP = 
|- !s.
    (\s.
      !P. P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==> P s)
    s ==>
    (!x.
      (\s.
        !P.
         P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==> P s)
      (\y. (y = x) \/ s y))

REP_INDUCT = 
|- !P.
    P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==>
    (!s.
      (\s.
        !P.
         P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==> P s)
      s ==>
      P s)

IS_SET_REP_EXISTS = 
|- ?IS_SET_REP.
    IS_SET_REP(\x. F) /\
    (!s. IS_SET_REP s ==> (!x. IS_SET_REP(\y. (y = x) \/ s y))) /\
    (!P.
      P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==>
      (!s. IS_SET_REP s ==> P s))

IS_SET_REP = 
|- IS_SET_REP(\x. F) /\
   (!s. IS_SET_REP s ==> (!x. IS_SET_REP(\y. (y = x) \/ s y))) /\
   (!P.
     P(\x. F) /\ (!t. P t ==> (!x. P(\y. (y = x) \/ t y))) ==>
     (!s. IS_SET_REP s ==> P s))

STRONG_SET_REP_INDUCT = 
|- !P.
    P(\x. F) /\
    (!t. IS_SET_REP t ==> P t ==> (!x. P(\y. (y = x) \/ t y))) ==>
    (!s. IS_SET_REP s ==> P s)

EXISTENCE_THM = |- ?s. IS_SET_REP s

set_TY_DEF = |- ?rep. TYPE_DEFINITION IS_SET_REP rep

EXISTENCE_LEMMA = 
|- ?EMPTY INSERT IN.
    (!x. ~IN x EMPTY) /\
    (!x y s. IN x(INSERT y s) = (x = y) \/ IN x s) /\
    (!x s. INSERT x(INSERT x s) = INSERT x s) /\
    (!x y s. INSERT x(INSERT y s) = INSERT y(INSERT x s)) /\
    (!P. P EMPTY /\ (!s. P s ==> (!e. P(INSERT e s))) ==> (!s. P s))

FINITE_SET_DEF = 
|- (!x. ~x IN EMPTY) /\
   (!x y s. x IN (y INSERT s) = (x = y) \/ x IN s) /\
   (!x s. x INSERT (x INSERT s) = x INSERT s) /\
   (!x y s. x INSERT (y INSERT s) = y INSERT (x INSERT s)) /\
   (!P. P EMPTY /\ (!s. P s ==> (!e. P(e INSERT s))) ==> (!s. P s))

() : void

NOT_IN_EMPTY = |- !x. ~x IN {}
IN_INSERT = |- !x y s. x IN (y INSERT s) = (x = y) \/ x IN s
INSERT_INSERT = |- !x s. x INSERT (x INSERT s) = x INSERT s
INSERT_COMM = |- !x y s. x INSERT (y INSERT s) = y INSERT (x INSERT s)

|- !x. ~x IN {}

|- !x y s. x IN (y INSERT s) = (x = y) \/ x IN s

|- !x s. x INSERT (x INSERT s) = x INSERT s

|- !x y s. x INSERT (y INSERT s) = y INSERT (x INSERT s)

COMPONENT = |- !x s. x IN (x INSERT s)

NOT_EMPTY_INSERT = |- !x s. ~({} = x INSERT s)

NOT_INSERT_EMPTY = |- !x s. ~(x INSERT s = {})

lemma = |- !x s. x IN s ==> (x INSERT s = s)

ABSORPTION = |- !x s. x IN s = (x INSERT s = s)

SET_INDUCT = 
|- !P.
    P{} /\ (!s. P s ==> (!e. ~e IN s ==> P(e INSERT s))) ==> (!s. P s)


SET_INDUCT_TAC = - : tactic


File set_ind.ml loaded
() : void

DECOMPOSITION = |- !s x. x IN s = (?t. (s = x INSERT t) /\ ~x IN t)

MEMBER_NOT_EMPTY = |- !s. (?x. x IN s) = ~(s = {})

lemma = |- !s t. (!x. x IN s = x IN t) ==> (s = t)

EXTENSION = |- !s t. (s = t) = (!x. x IN s = x IN t)

NOT_EQUAL_SETS = |- !s t. ~(s = t) = (?x. x IN t = ~x IN s)

SET_CASES = |- !s. (s = {}) \/ (?x t. (s = x INSERT t) /\ ~x IN t)

SUBSET_DEF = |- !s t. s SUBSET t = (!x. x IN s ==> x IN t)

SUBSET_TRANS = |- !s t u. s SUBSET t /\ t SUBSET u ==> s SUBSET u

SUBSET_REFL = |- !s. s SUBSET s

SUBSET_ANTISYM = |- !s t. s SUBSET t /\ t SUBSET s ==> (s = t)

EMPTY_SUBSET = |- !s. {} SUBSET s

SUBSET_EMPTY = |- !s. s SUBSET {} = (s = {})

INSERT_SUBSET = |- !x s t. (x INSERT s) SUBSET t = x IN t /\ s SUBSET t

SUBSET_INSERT = 
|- !x s. ~x IN s ==> (!t. s SUBSET (x INSERT t) = s SUBSET t)

PSUBSET_DEF = |- !s t. s PSUBSET t = s SUBSET t /\ ~(s = t)

PSUBSET_TRANS = |- !s t u. s PSUBSET t /\ t PSUBSET u ==> s PSUBSET u

PSUBSET_IRREFL = |- !s. ~s PSUBSET s

NOT_PSUBSET_EMPTY = |- !s. ~s PSUBSET {}

PSUBSET_INSERT_SUBSET = 
|- !s t. s PSUBSET t = (?x. ~x IN s /\ (x INSERT s) SUBSET t)

lemma = |- ~(a = b) = (b = ~a)

PSUBSET_MEMBER = 
|- !s t. s PSUBSET t = s SUBSET t /\ (?y. y IN t /\ ~y IN s)

UNION_EXISTS = |- !s t. ?u. !x. x IN u = x IN s \/ x IN t

IN_UNION = |- !s t x. x IN (s UNION t) = x IN s \/ x IN t

UNION_ASSOC = |- !s t u. (s UNION t) UNION u = s UNION (t UNION u)

UNION_IDEMPOT = |- !s. s UNION s = s

UNION_COMM = |- !s t. s UNION t = t UNION s

SUBSET_UNION = 
|- (!s t. s SUBSET (s UNION t)) /\ (!s t. s SUBSET (t UNION s))

SUBSET_UNION_ABSORPTION = |- !s t. s SUBSET t = (s UNION t = t)

UNION_EMPTY = |- (!s. {} UNION s = s) /\ (!s. s UNION {} = s)

EMPTY_UNION = |- !s t. (s UNION t = {}) = (s = {}) /\ (t = {})

INSERT_UNION = 
|- !x s t.
    (x INSERT s) UNION t = (x IN t => s UNION t | x INSERT (s UNION t))

INSERT_UNION_EQ = |- !x s t. (x INSERT s) UNION t = x INSERT (s UNION t)

INTER_EXISTS = |- !s t. ?i. !x. x IN i = x IN s /\ x IN t

IN_INTER = |- !s t x. x IN (s INTER t) = x IN s /\ x IN t

INTER_ASSOC = |- !s t u. (s INTER t) INTER u = s INTER (t INTER u)

INTER_IDEMPOT = |- !s. s INTER s = s

INTER_COMM = |- !s t. s INTER t = t INTER s

INTER_SUBSET = 
|- (!s t. (s INTER t) SUBSET s) /\ (!s t. (t INTER s) SUBSET s)

SUBSET_INTER_ABSORPTION = |- !s t. s SUBSET t = (s INTER t = s)

INTER_EMPTY = |- (!s. {} INTER s = {}) /\ (!s. s INTER {} = {})

INSERT_INTER = 
|- !x s t.
    (x INSERT s) INTER t = (x IN t => x INSERT (s INTER t) | s INTER t)

UNION_OVER_INTER = 
|- !s t u. s INTER (t UNION u) = (s INTER t) UNION (s INTER u)

INTER_OVER_UNION = 
|- !s t u. s UNION (t INTER u) = (s UNION t) INTER (s UNION u)

DISJOINT_DEF = |- !s t. DISJOINT s t = (s INTER t = {})

IN_DISJOINT = |- !s t. DISJOINT s t = ~(?x. x IN s /\ x IN t)

DISJOINT_SYM = |- !s t. DISJOINT s t = DISJOINT t s

DISJOINT_EMPTY = |- !s. DISJOINT{}s /\ DISJOINT s{}

DISJOINT_EMPTY_REFL = |- !s. (s = {}) = DISJOINT s s

DISJOINT_INSERT = 
|- !x s t. DISJOINT(x INSERT s)t = DISJOINT s t /\ ~x IN t

DISJOINT_UNION = 
|- !s t u. DISJOINT(s UNION t)u = DISJOINT s u /\ DISJOINT t u

DIFF_EXISTS = |- !s t. ?d. !x. x IN d = x IN s /\ ~x IN t

IN_DIFF = |- !s t x. x IN (s DIFF t) = x IN s /\ ~x IN t

DIFF_EMPTY = |- !s. s DIFF {} = s

EMPTY_DIFF = |- !s. {} DIFF s = {}

DIFF_DIFF = |- !s t. (s DIFF t) DIFF t = s DIFF t

DIFF_EQ_EMPTY = |- !s. s DIFF s = {}

DELETE_DEF = |- !s x. s DELETE x = s DIFF {x}

IN_DELETE = |- !s x y. x IN (s DELETE y) = x IN s /\ ~(x = y)

DELETE_NON_ELEMENT = |- !x s. ~x IN s = (s DELETE x = s)

IN_DELETE_EQ = 
|- !s x x'.
    (x IN s = x' IN s) = (x IN (s DELETE x') = x' IN (s DELETE x))

EMPTY_DELETE = |- !x. {} DELETE x = {}

DELETE_DELETE = |- !x s. (s DELETE x) DELETE x = s DELETE x

DELETE_COMM = |- !x y s. (s DELETE x) DELETE y = (s DELETE y) DELETE x

DELETE_SUBSET = |- !x s. (s DELETE x) SUBSET s

SUBSET_DELETE = |- !x s t. s SUBSET (t DELETE x) = ~x IN s /\ s SUBSET t

SUBSET_INSERT_DELETE = 
|- !x s t. s SUBSET (x INSERT t) = (s DELETE x) SUBSET t

DIFF_INSERT = |- !s t x. s DIFF (x INSERT t) = (s DELETE x) DIFF t

DELETE_INSERT = 
|- !x y s.
    (x INSERT s) DELETE y =
    ((x = y) => s DELETE y | x INSERT (s DELETE y))

INSERT_DELETE = |- !x s. x IN s ==> (x INSERT (s DELETE x) = s)

DELETE_INTER = |- !s t x. (s DELETE x) INTER t = (s INTER t) DELETE x

DISJOINT_DELETE_SYM = 
|- !s t x. DISJOINT(s DELETE x)t = DISJOINT(t DELETE x)s

CHOICE_EXISTS = |- ?CHOICE. !s. ~(s = {}) ==> (CHOICE s) IN s

CHOICE_DEF = |- !s. ~(s = {}) ==> (CHOICE s) IN s

REST_DEF = |- !s. REST s = s DELETE (CHOICE s)

CHOICE_NOT_IN_REST = |- !s. ~(CHOICE s) IN (REST s)

CHOICE_INSERT_REST = 
|- !s. ~(s = {}) ==> ((CHOICE s) INSERT (REST s) = s)

REST_SUBSET = |- !s. (REST s) SUBSET s

lemma = |- (P /\ Q = P) = P ==> Q

REST_PSUBSET = |- !s. ~(s = {}) ==> (REST s) PSUBSET s

SING_DEF = |- !s. SING s = (?x. s = {x})

SING = |- !x. SING{x}

IN_SING = |- !x y. x IN {y} = (x = y)

NOT_SING_EMPTY = |- !x. ~({x} = {})

NOT_EMPTY_SING = |- !x. ~({} = {x})

EQUAL_SING = |- !x y. ({x} = {y}) = (x = y)

DISJOINT_SING_EMPTY = |- !x. DISJOINT{x}{}

INSERT_SING_UNION = |- !s x. x INSERT s = {x} UNION s

SING_DELETE = |- !x. {x} DELETE x = {}

DELETE_EQ_SING = |- !s x. x IN s ==> ((s DELETE x = {}) = (s = {x}))

CHOICE_SING = |- !x. CHOICE{x} = x

REST_SING = |- !x. REST{x} = {}

SING_IFF_EMPTY_REST = |- !s. SING s = ~(s = {}) /\ (REST s = {})

IMAGE_EXISTS = |- !f s. ?t. !y. y IN t = (?x. (y = f x) /\ x IN s)

IN_IMAGE = |- !f s y. y IN (IMAGE f s) = (?x. (y = f x) /\ x IN s)

IMAGE_IN = |- !x s. x IN s ==> (!f. (f x) IN (IMAGE f s))

IMAGE_EMPTY = |- !f. IMAGE f{} = {}

IMAGE_ID = |- !s. IMAGE(\x. x)s = s

Theorem o_THM autoloading from theory `combin` ...
o_THM = |- !f g x. (f o g)x = f(g x)

IMAGE_COMPOSE = |- !f g s. IMAGE(f o g)s = IMAGE f(IMAGE g s)

IMAGE_INSERT = |- !f x s. IMAGE f(x INSERT s) = (f x) INSERT (IMAGE f s)

IMAGE_EQ_EMPTY = |- !s f. (IMAGE f s = {}) = (s = {})

IMAGE_DELETE = |- !f x s. ~x IN s ==> (IMAGE f(s DELETE x) = IMAGE f s)

IMAGE_UNION = 
|- !f s t. IMAGE f(s UNION t) = (IMAGE f s) UNION (IMAGE f t)

IMAGE_SUBSET = 
|- !s t. s SUBSET t ==> (!f. (IMAGE f s) SUBSET (IMAGE f t))

IMAGE_INTER = 
|- !f s t. (IMAGE f(s INTER t)) SUBSET ((IMAGE f s) INTER (IMAGE f t))

INJ_DEF = 
|- !f s t.
    INJ f s t =
    (!x. x IN s ==> (f x) IN t) /\
    (!x y. x IN s /\ y IN s ==> (f x = f y) ==> (x = y))

INJ_ID = |- !s. INJ(\x. x)s s

INJ_COMPOSE = |- !f g s t u. INJ f s t /\ INJ g t u ==> INJ(g o f)s u

INJ_EMPTY = |- !f. (!s. INJ f{}s) /\ (!s. INJ f s{} = (s = {}))

SURJ_DEF = 
|- !f s t.
    SURJ f s t =
    (!x. x IN s ==> (f x) IN t) /\
    (!x. x IN t ==> (?y. y IN s /\ (f y = x)))

SURJ_ID = |- !s. SURJ(\x. x)s s

SURJ_COMPOSE = 
|- !f g s t u. SURJ f s t /\ SURJ g t u ==> SURJ(g o f)s u

SURJ_EMPTY = 
|- !f. (!s. SURJ f{}s = (s = {})) /\ (!s. SURJ f s{} = (s = {}))

IMAGE_SURJ = |- !f s t. SURJ f s t = (IMAGE f s = t)

BIJ_DEF = |- !f s t. BIJ f s t = INJ f s t /\ SURJ f s t

BIJ_ID = |- !s. BIJ(\x. x)s s

BIJ_EMPTY = 
|- !f. (!s. BIJ f{}s = (s = {})) /\ (!s. BIJ f s{} = (s = {}))

BIJ_COMPOSE = |- !f g s t u. BIJ f s t /\ BIJ g t u ==> BIJ(g o f)s u

lemma1 = 
|- !f s.
    (!x y. x IN s /\ y IN s ==> (f x = f y) ==> (x = y)) =
    (!y. y IN s ==> (!x. x IN s /\ (f x = f y) = y IN s /\ (x = y)))

lemma2 = |- !f s. ?g. !t. INJ f s t ==> (!x. x IN s ==> (g(f x) = x))

LINV_DEF = |- !f s t. INJ f s t ==> (!x. x IN s ==> (LINV f s(f x) = x))

lemma3 = |- !f s. ?g. !t. SURJ f s t ==> (!x. x IN t ==> (f(g x) = x))

RINV_DEF = 
|- !f s t. SURJ f s t ==> (!x. x IN t ==> (f(RINV f s x) = x))

card_rel_def = 
"(!s. R s 0 = (s = {})) /\
 (!s n. R s(SUC n) = (?x. x IN s /\ R(s DELETE x)n))"
: term

Theorem num_Axiom autoloading from theory `prim_rec` ...
num_Axiom = |- !e f. ?! fn. (fn 0 = e) /\ (!n. fn(SUC n) = f(fn n)n)

CARD_REL_EXISTS = 
|- ?R.
    (!s. R s 0 = (s = {})) /\
    (!s n. R s(SUC n) = (?x. x IN s /\ R(s DELETE x)n))

CARD_REL_DEL_LEMMA = 
.. |- !n s x.
       x IN s ==> R(s DELETE x)n ==> (!y. y IN s ==> R(s DELETE y)n)

Theorem INV_SUC_EQ autoloading from theory `prim_rec` ...
INV_SUC_EQ = |- !m n. (SUC m = SUC n) = (m = n)

Theorem NOT_SUC autoloading from theory `num` ...
NOT_SUC = |- !n. ~(SUC n = 0)

CARD_REL_UNIQUE = .. |- !n s. R s n ==> (!m. R s m ==> (n = m))

CARD_REL_EXISTS_LEMMA = .. |- !s. ?n. R s n

CARD_REL_THM = .. |- !m s. ((@n. R s n) = m) = R s m

CARD_EXISTS = 
|- ?CARD.
    (CARD{} = 0) /\
    (!s x. CARD(x INSERT s) = (x IN s => CARD s | SUC(CARD s)))

CARD_DEF = 
|- (CARD{} = 0) /\
   (!s x. CARD(x INSERT s) = (x IN s => CARD s | SUC(CARD s)))

CARD_EMPTY = |- CARD{} = 0

CARD_INSERT = 
|- !s x. CARD(x INSERT s) = (x IN s => CARD s | SUC(CARD s))

CARD_EQ_0 = |- !s. (CARD s = 0) = (s = {})

Theorem num_CASES autoloading from theory `arithmetic` ...
num_CASES = |- !m. (m = 0) \/ (?n. m = SUC n)

Theorem SUC_SUB1 autoloading from theory `arithmetic` ...
SUC_SUB1 = |- !m. (SUC m) - 1 = m

CARD_DELETE = 
|- !s x. CARD(s DELETE x) = (x IN s => (CARD s) - 1 | CARD s)

Theorem LESS_MONO_EQ autoloading from theory `arithmetic` ...
LESS_MONO_EQ = |- !m n. (SUC m) < (SUC n) = m < n

Definition LESS_OR_EQ autoloading from theory `arithmetic` ...
LESS_OR_EQ = |- !m n. m <= n = m < n \/ (m = n)

lemma1 = |- !n m. (SUC n) <= (SUC m) = n <= m

Theorem LESS_THM autoloading from theory `prim_rec` ...
LESS_THM = |- !m n. m < (SUC n) = (m = n) \/ m < n

lemma2 = |- !n m. n <= (SUC m) = n <= m \/ (n = SUC m)

Theorem LESS_EQ_REFL autoloading from theory `arithmetic` ...
LESS_EQ_REFL = |- !m. m <= m

CARD_INTER_LESS_EQ = |- !s t. (CARD(s INTER t)) <= (CARD s)

Theorem ADD_CLAUSES autoloading from theory `arithmetic` ...
ADD_CLAUSES = 
|- (0 + m = m) /\
   (m + 0 = m) /\
   ((SUC m) + n = SUC(m + n)) /\
   (m + (SUC n) = SUC(m + n))

CARD_UNION = 
|- !s t. (CARD(s UNION t)) + (CARD(s INTER t)) = (CARD s) + (CARD t)

lemma = |- !n m. n <= (SUC m) = n <= m \/ (n = SUC m)

Theorem LESS_0 autoloading from theory `prim_rec` ...
LESS_0 = |- !n. 0 < (SUC n)

CARD_SUBSET = |- !s t. t SUBSET s ==> (CARD t) <= (CARD s)

Theorem LESS_EQ autoloading from theory `arithmetic` ...
LESS_EQ = |- !m n. m < n = (SUC m) <= n

CARD_PSUBSET = |- !s t. t PSUBSET s ==> (CARD t) < (CARD s)

CARD_SING = |- !x. CARD{x} = 1

SING_IFF_CARD1 = |- !s. SING s = (CARD s = 1)

Theorem SUB_PLUS autoloading from theory `arithmetic` ...
SUB_PLUS = |- !a b c. a - (b + c) = (a - b) - c

Theorem SUB_0 autoloading from theory `arithmetic` ...
SUB_0 = |- !m. (0 - m = 0) /\ (m - 0 = m)

CARD_DIFF = |- !t s. CARD(s DIFF t) = (CARD s) - (CARD(s INTER t))

Theorem NOT_LESS autoloading from theory `arithmetic` ...
NOT_LESS = |- !m n. ~m < n = n <= m

Theorem SUB_LESS_0 autoloading from theory `arithmetic` ...
SUB_LESS_0 = |- !n m. m < n = 0 < (n - m)

LESS_CARD_DIFF = |- !t s. (CARD t) < (CARD s) ==> 0 < (CARD(s DIFF t))

echo 'set_flag(`abort_when_fail`,true);;'\
     'load_theory `finite_sets`;;'\
     'compilet `set_ind`;;'\
     'quit();;' | ../../hol

           __  _     _    __   __  _   __     _  _   __   _
   |___   |    |    /_\  |__  |__  |  |       |__|  |  |  |
   |      |__  |__ /   \  __|  __| |  |__     |  |  |__|  |__

          HOL88 Version 2.01 (Franz: pre-release), built on Jun 25 1992

#false : bool

Theory finite_sets loaded
() : void


SET_INDUCT_TAC = - : tactic

Calling Lisp compiler

File set_ind compiled
() : void

#echo 'set_flag(`abort_when_fail`,true);;'\
     'load_theory `finite_sets`;;'\
     'compilet `fset_conv`;;'\
     'quit();;' | ../../hol

           __  _     _    __   __  _   __     _  _   __   _
   |___   |    |    /_\  |__  |__  |  |       |__|  |  |  |
   |      |__  |__ /   \  __|  __| |  |__     |  |  |__|  |__

          HOL88 Version 2.01 (Franz: pre-release), built on Jun 25 1992

#false : bool

Theory finite_sets loaded
() : void


IN_CONV = - : (conv -> conv)

DELETE_CONV = - : (conv -> conv)

UNION_CONV = - : (conv -> conv)

INSERT_CONV = - : (conv -> conv)

IMAGE_CONV = - : (conv -> conv -> conv)

Calling Lisp compiler

File fset_conv compiled
() : void

#===> library finite_sets rebuilt
