CADiZ

Reference manual / Extended toolkit / section setlaws


Some Tactics and Laws for the CADi\num Theorem-prover

section setlaws parents setdefs, corelaws

This section contains general-purpose tactics, and laws, with (some of) their proofs, on the assumption that the definitions of setdefs.z are present.

Written by Sam Valentine.

Last updated September 1999.

The following tactics are supplied as part of the CADi\num system. They are intended to serve two purposes: a) to be directly useful in proof work; b) to be used as models when users develop their own tactics.

The current version of this library should be regarded as very provisional, since both the rules of inference and the tactic language are still in the course of development.

The proof system manipulates sequents. Each sequent used in a proof becomes a goal of the proof process, so in this document the words "goal" and "sequent" will be used interchangably. Tactics can take several sorts of argument. In this document we proceed "top-down", considering first those tactics which operate on goals, then those which operate on predicates, then those which operate on expressions, and finally those for schema texts and declarations.

The tactics given below are those which "blow" a predicate, one or more expressions, a schema text, a series of declarations, etc. They make frequent recursive calls on themselves and on each other. Their design aim is to apply all simplifications which one would always want, except perhaps in very special circumstances, but to do nothing else. They are intended never to fail, but may cause "Nothing changed" to be reported.

"blowPred" takes a single predicate argument, which may appear anywhere and be of any form. The main section of the tactic has a matcher which fans out into some eleven different cases, corresponding to the sort of predicate supplied. For each of these any applicable immediate simplifications are sought, usually after a recursive call to simplify the constituent elements. Finally, "resolution" and "linear decision" are tried, using the result of the previous simplifications. "blowPred" always succeeds. If it achieves nothing, the report "Nothing changed" is given.

blowPred pred p | rec repeat @

    match p ::     expr q, r | q = r @     "apply tactic" q "blowExpr"; "apply tactic" r "blowExpr";     !("absorption" p \lor     match p ::     | (_exprs) = (_exprs) @     "expansion" p; repeat ::     | \lblot _decls \rblot = \lblot _decls \rblot @     "expansion" p; repeat ::     | p @ skip :: .) ::     expr q, r | q \in r @     match r ::     | (_ \notin _) @ !("expansion" r \lor skip) ::     | (_ \neq _) @ !("expansion" r \lor skip) ::     | id _expr @ !("expansion" r \lor skip) ::     | r @ skip :: . ;     "apply tactic" q "blowExpr" ; "apply tactic" r "blowExpr";     !("absorption" p; repeat \lor "expansion" p; repeat \lor skip) ::     stxt dec; pred prred     | \exists dec @ prred @     | \forall dec @ prred @     "apply tactic" dec "blowStxt";     "apply tactic" prred "blowPred";     !("absorption" p; repeat \lor "one-point" p; repeat \lor skip) ::     stxt dec; pred prred | \exists1 dec @ prred @     "apply tactic" dec "blowStxt";     "apply tactic" prred "blowPred";     !("absorption" p \lor "one-point" p \lor "expansion" p); repeat ::     pred q | \lnot q @     "apply tactic" q "blowPred"; ("absorption" p \lor skip) ::     pred q, r     | q \land r @     | q \lor r @     | q \iff r @     | q \implies r @     "apply tactic" q "blowPred"; "apply tactic" r "blowPred";     !("absorption" p \lor skip) ::     | p @ !("predication" p; repeat \lor "expansion" p; repeat \lor skip) :: . ;     -- this  last  line  does  xor,  true,  false,  and  all  schemas     !("resolution" p; match p :: | true @ skip :: | false @ skip :: . \lor     "linear decision" p \lor skip)

"blowExpr" is the expression counterpart of "blowPred". It takes a single expression argument, which may appear anywhere and be of any form. The main section of the tactic has a matcher which fans out into over twenty different cases, corresponding to the sort of expression supplied. For each of these any applicable immediate simplifications are sought, usually after a recursive call to simplify the constituent elements. "blowExpr" always succeeds. If it achieves nothing, the report "Nothing changed" is given.

blowExpr expr t | rec repeat @ match t ::

    | \theta _expr @ "expansion" t ::     expr p | p . 1 @     | p . 2 @     "apply tactic" p "blowExpr"; !("absorption" t \lor skip) ::     exprs es | ( es ) @ "apply tactic" es "blowExprs" ::     decls ds | \lblot ds \rblot @ "apply tactic" ds "blowConstDecls" ::     expr e | \power e @ "apply tactic" e "blowExpr" ::     expr p, q | p \cross q @     "apply tactic" p "blowExpr"; "apply tactic" q "blowExpr" ::     pred p; expr q, r | if p then q else r @     "apply tactic" p "blowPred";     ("absorption" t; repeat \lor     "apply tactic" q "blowExpr"; "apply tactic" r "blowExpr";     ("absorption" t \lor skip)) ::     stxt s; expr ct | { s @ ct } @     | \lambda s @ ct @     "apply tactic" s "blowStxt";     "apply tactic" ct "blowExpr";     !("absorption" t \lor "one-point" t; repeat \lor skip) ::     stxt s; expr ct | \mu s @ ct @     | let s @ ct @     "apply tactic" s "blowStxt";     "apply tactic" ct "blowExpr";     !("absorption" t; repeat \lor "one-point" t; repeat \lor skip) ::     expr fun, args | fun  args @     match fun ::     | (_ \mapsto _) @ !("expansion" fun \lor skip) ::     | first @ !("expansion" fun \lor skip) ::     | second @ !("expansion" fun \lor skip) ::     | fun @ skip :: . ;     !("evaluation" t \lor     "apply tactic" fun "blowExpr";     !(("expansion" t;     match t :: pred prred |     \mu _decl | prred @ _expr @     "expansion" prred; repeat :: .) \lor     "apply tactic" args "blowExpr"));     !("evaluation" t \lor skip) ::     stxt s | [s] @ "apply tactic" s "blowStxt" ::     | \emptyset @ !("expansion" t; repeat \lor skip) ::     expr r, s | r \rel s @     "apply tactic" r "blowExpr"; "apply tactic" s "blowExpr";     !("expansion" t \lor skip) ::     exprs es | _name[es] @ "apply tactic" es "blowExprs" ::     | t @ !("evaluation" t \lor "absorption" t; repeat \lor skip) :: .

blowExprs exprs ts | match ts :: expr e; exprs es | e, es @

    "apply tactic" e "blowExpr";     "apply tactic" es "blowExprs" :: | ts @ skip :: .

blowStxt stxt s |

    match s     :: decls ds | ds | _pred @     "apply tactic" ds s "blowDecls";     match s :: pred barpart2 | _decls | barpart2 @     "apply tactic" barpart2 "blowPred"     :: .     :: .

blowDecls decls ds; stxt s |

    match ds     :: decl d; decls ds2 | d; ds2 @     match d     :: expr e | _name : e @     "apply tactic" e "blowExpr"     ; match e     :: | { _stxt @ _expr } @ "normalization" d     :: | { _exprs } @ "normalization" d     :: | e @ skip     :: .     :: expr e | _name == e @ "apply tactic" e "blowExpr"     :: expr e | e @     "apply tactic" e "blowExpr";     !("distribution" d \lor skip)     :: . ;     match ds     :: decl dd; decls dds2 | dd; dds2 @     "apply tactic" dds2 s "blowDecls"     :: .     :: | @ skip     :: .

blowConstDecls decls ds |

    match ds     :: expr e; decls ds2 | _name == e; ds2 @     "apply tactic" e "blowExpr" ; "apply tactic" ds2 "blowConstDecls"     :: | @ skip     :: .

Sets

neqCommutes ==

[X] \vdash? \forall x, y: X | x \neq y @ y \neq x

inNull ==

[X] \vdash? \forall x: X @ x \notin \emptyset

subDef ==

[X] \vdash? \forall S, T: \power X @ S \subseteq T \iff S \in \power T

subSelf ==

[X] \vdash? \forall S: \power X @ S \subseteq S

psubSelf ==

[X] \vdash? \forall S: \power X @ \lnot (S \subset S)

subsetSymEq ==

[X] \vdash? \forall S, T: \power X @ S \subseteq T \land T \subseteq S \iff S = T

L7 ==

[X] \vdash? \forall S, T: \power X @ \lnot (S \subset T \land T \subset S)

L8 ==

[X] \vdash? \forall S, T, V: \power X | S \subseteq T \land T \subseteq V @ S \subseteq V

L9 ==

[X] \vdash? \forall S, T, V: \power X | S \subset T \land T \subset V @ S \subset V

L10 ==

[X] \vdash? \forall S: \power X @ \emptyset \subseteq S

L11 ==

[X] \vdash? \forall S: \power X @ \emptyset \subset S \iff S \neq \emptyset

L12 ==

[Y] \vdash? \forall S: \power Y @ \power1 S = \emptyset \iff S = \emptyset

L13 ==

[Y] \vdash? \forall S: \power Y @ S \neq \emptyset \iff S \in \power1 S

L14 ==

[X] \vdash? \forall S: \power X @
S \cup S = S \cup \emptyset = S \cap S = S \symdiff \emptyset = S \ \emptyset = S

L15 ==

[X] \vdash? \forall S: \power X @
S \cap \emptyset = S \symdiff S = S \ S = \emptyset \ S = \emptyset

L16 ==

[X] \vdash? \forall S, T: \power X @ S \cup T = T \cup S

L17 ==

[X] \vdash? \forall S, T: \power X @ S \cap T = T \cap S

symdiffCommutes ==

[X] \vdash? \forall S, T: \power X @ S \symdiff T = T \symdiff S

L18 ==

[X] \vdash? \forall S, T, V: \power X @ S \cup (T \cup V) = (S \cup T) \cup V

L19 ==

[X] \vdash? \forall S, T, V: \power X @ S \cap (T \cap V) = (S \cap T) \cap V

symmdiffAssoc ==

[X] \vdash? \forall S, T, V: \power X @ S \symdiff (T \symdiff V) = (S \symdiff T) \symdiff V

L20 ==

[X] \vdash? \forall S, T, V: \power X @ S \cup (T \cap V) = (S \cup T) \cap (S \cup V)

L21 ==

[X] \vdash? \forall S, T, V: \power X @ S \cap (T \cup V) = (S \cap T) \cup (S \cap V)

intThruSymdiff ==

[X] \vdash? \forall S, T, V: \power X @ S \cap (T \symdiff V) = (S \cap T) \symdiff (S \cap V)

setsubThruSymdiff ==

[X] \vdash? \forall S, T, V: \power X @
(S \symdiff T) \ V = (S \ V) \symdiff (T \ V)

L24 ==

[X] \vdash? \forall S, T, V: \power X @ S \ (T \ V) = (S \ T) \cup (S \cap V)

L25 ==

[X] \vdash? \forall S, T, V: \power X @ (S \ T) \ V = S \ (T \cup V)

L26 ==

[X] \vdash? \forall S, T, V: \power X @ S \cup (T \ V) = (S \cup T) \ (V \ S)

L27 ==

[X] \vdash? \forall S, T, V: \power X @ S \cap (T \ V) = (S \cap T) \ V

L28 ==

[X] \vdash? \forall S, T, V: \power X @ (S \cup T) \ V = (S \ V) \cup (T \ V)

L29 ==

[X] \vdash? \forall S, T, V: \power X @ S \ (T \cap V) = (S \ T) \cup (S \ V)

subsetUnion ==

[X] \vdash? \forall S, T: \power X @ S \subseteq T \iff S \cup T = T

subsetInt ==

[X] \vdash? \forall S, T: \power X @ S \subseteq T \iff S \cap T = S

subsetSetminus ==

[X] \vdash? \forall S, T: \power X @ S \subseteq T \iff S \ T = \emptyset

powersetInt ==

[X] \vdash? \forall S, T: \power X @ \power (S \cap T) = \power S \cap \power T

L43 ==

[X] \vdash? \forall S, T: \power X @ S \subseteq S \cup T

L44 ==

[X] \vdash? \forall S, T: \power X @ T \subseteq S \cup T

L45 ==

[X] \vdash? \forall S, T, W: \power X | S \subseteq W \land T \subseteq W @
S \cup T \subseteq W

L48 ==

[X] \vdash? \forall S, T: \power X @ S \cap T \subseteq S

L49 ==

[X] \vdash? \forall S, T: \power X @ S \cap T \subseteq T

L50 ==

[X] \vdash? \forall S, T, W: \power X | W \subseteq S \land W \subseteq T @
W \subseteq S \cap T

L53 ==

[X] \vdash? \forall S, T: \power X @ S \ T \subseteq S

L54 ==

[X] \vdash? \forall S, T: \power X @ (S \ T) \cap T = \emptyset

L55 ==

[X] \vdash? \forall S, T, W: \power X | W \subseteq S \land W \cap T = \emptyset @
W \subseteq S \ T

L30 ==

[X] \vdash? \forall A, B: \power (\power X) @ \bigcup (A \cup B) = (\bigcup A) \cup (\bigcup B)

L31 ==

[X] \vdash? \forall A, B: \power (\power X) @ \bigcap (A \cup B) = (\bigcap A) \cap (\bigcap B)

L32 ==

[X] \vdash? \bigcup[X] \emptyset = \emptyset

L33 ==

[X] \vdash? \bigcap[X] \emptyset = X

L34 ==

[X] \vdash? \forall A: \power (\power X); S: \power X @
S \cap (\bigcup A) = \bigcup { T: A @ S \cap T }

L35 ==

[X] \vdash? \forall A: \power (\power X); S: \power X @
S \cup (\bigcap A) = \bigcap { T: A @ S \cup T }

L36 ==

[X] \vdash? \forall A: \power (\power X); S: \power X @
(\bigcup A) \ S = \bigcup { T: A @ T \ S }

L37 ==

[X] \vdash? \forall A: \power (\power X); S: \power X @
S \ (\bigcap A) = \bigcup { T: A @ S \ T }

cupBigcup ==

[X] \vdash? \forall A: \power1 \power X; S: \power X @
S \cup (\bigcup A) = \bigcup { T: A @ S \cup T }

capBigcap ==

[X] \vdash? \forall A: \power1 (\power X); S: \power X @
S \cap (\bigcap A) = \bigcap { T: A @ S \cap T }

bigcupCup ==

[X] \vdash? \forall A: \power1 \power X; S: \power X @
(\bigcup A) \cup S = \bigcup { T: A @ T \cup S }

bigcapCap ==

[X] \vdash? \forall A: \power1 (\power X); S: \power X @
(\bigcap A) \cap S = \bigcap { T: A @ T \cap S }

L38 ==

[X] \vdash? \forall A: \power1 (\power X); S: \power X @
S \ (\bigcup A) = \bigcap { T: A @ S \ T }

L39 ==

[X] \vdash? \forall A: \power1 (\power X); S: \power X @
(\bigcap A) \ S = \bigcap { T: A @ T \ S }

L40 ==

[X] \vdash? \forall A, B: \power (\power X) | A \subseteq B @ \bigcup A \subseteq \bigcup B

L41 ==

[X] \vdash? \forall A, B: \power (\power X) | A \subseteq B @ \bigcap B \subseteq \bigcap A

L46 ==

[X] \vdash? \forall A: \power (\power X) @ \forall S: A @ S \subseteq \bigcup A

L47 ==

[X] \vdash? \forall A: \power (\power X); W: \power X |
(\forall S: A @ S \subseteq W) @ \bigcup A \subseteq W

L51 ==

[X] \vdash? \forall A: \power (\power X) @ \forall S: A @ \bigcap A \subseteq S

L52 ==

[X] \vdash? \forall A: \power (\power X); W: \power X | (\forall S: A @ W \subseteq S) @
W \subseteq \bigcap A

olddef ==

[X] \vdash? \finset1 X =
\bigcap { A: \power (\power X) | \forall x: X @
{ x } \in A \land \forall a: A @ a \cup { x } \in A }

finiteNonEmptySets1 ==

[X] \vdash? \forall S: \power X @ \finset1 S = \finset S \ { \emptyset }

finiteNonEmptySets2 ==

[X] \vdash? \forall S: \power X @ \finset S = \finset1 S \cup { \emptyset }

auxfiniteIntersection ==

[X] \vdash? \forall S: \power X @ \finset S = \finset X \cap \power S

finiteIntersection ==

[X] \vdash? \forall S, T: \power X @ \finset (S \cap T) = \finset S \cap \power T

Proof by induction

Mathematical induction provides a method of proving properties of all members of finite sets. The induction principles are formulated as follows.

simpleFiniteSetInduction ==

[ X ] \vdash? \forall P: \power \power X | \emptyset \in P \land
\forall S: P; x: X @ S \cup { x } \in P @ \finset X \subseteq P

simpleNonemptyFiniteSetInduction ==

[ X ] \vdash? \forall P: \power \power X |
\forall x: X @ { x } \in P \land \forall S: P @ S \cup { x } \in P @
\finset1 X \subseteq P

cumulativeFiniteSetInduction ==

[ X ] \vdash? \forall P: \power \power X |
\forall S: \power X | \forall T: \power S | T \neq S @ T \in P @ S \in P @
\finset X \subseteq P

cumulativeNonemptyFiniteSetInduction ==

[ X ] \vdash? \forall P: \power \power X |
\forall S: \power X | \forall T: \power1 S | T \neq S @ T \in P @ S \in P @
\finset1 X \subseteq P

Relations

L42 ==

[X, Y] \vdash? \forall p: X \cross Y @ (first p, second p) = p

L56 ==

[X, Y] \vdash? \forall x: X; R: X \rel Y @ x \in dom R \iff (\exists y: Y @ x \mapsto y \in R)

L57 ==

[X, Y] \vdash? \forall y: Y; R: X \rel Y @ y \in ran R \iff (\exists x: X @ x \mapsto y \in R)

L58 ==

[X, Y] \vdash? \forall S, T: X \rel Y @ dom (S \cup T) = (dom S) \cup (dom T)

L59 ==

[X, Y] \vdash? \forall S, T: X \rel Y @ ran (S \cup T) = (ran S) \cup (ran T)

L60 ==

[X, Y] \vdash? \forall S, T: X \rel Y @ dom (S \cap T) \subseteq (dom S) \cap (dom T)

L61 ==

[X, Y] \vdash? \forall S, T: X \rel Y @ ran (S \cap T) \subseteq (ran S) \cap (ran T)

L62 ==

[X, Y] \vdash? dom[X,Y] \emptyset = \emptyset

L63 ==

[X, Y] \vdash? ran[X,Y] \emptyset = \emptyset

L64 ==

[X] \vdash? \forall x, x': X; s: \power X @ x \mapsto x' \in id s \iff x = x' \land x \in s

L65 ==

[X, Y, Z] \vdash? \forall x: X; z: Z; R: X \rel Y; S: Y \rel Z @
    x \mapsto z \in R \comp S \iff
( \exists y: Y @ x \mapsto y \in R \land y \mapsto z \in S)

L66 ==

[W, X, Y, Z] \vdash? \forall R: W \rel X; S: X \rel Y; T: Y \rel Z @
R \comp (S \comp T) = (R \comp S) \comp T

L67 ==

[X, Y] \vdash? \forall R: X \rel Y @ id X \comp R = R

L68 ==

[X, Y] \vdash? \forall R: X \rel Y @ R \comp id Y = R

L69 ==

[X] \vdash? \forall V, W: \power X @ id V \comp id W = id (V \cap W)

rightComposeThruUnion ==

[X, Y, Z] \vdash? \forall R, S: X \rel Y; T: Y \rel Z @
(R \cup S) \comp T = (R \comp T) \cup (S \comp T)

leftComposeThruUnion ==

[X, Y, Z] \vdash? \forall R: X \rel Y; S, T: Y \rel Z @
R \comp (S \cup T) = (R \comp S) \cup (R \comp T)

L71 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X @ S \dres R = id S \comp R = (S \cross Y) \cap R

L72 ==

[X, Y] \vdash? \forall R: X \rel Y; T: \power Y @ R \rres T = R \comp id T = R \cap (X \cross T)

L73 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X @ dom (S \dres R) = S \cap (dom R)

L74 ==

[X, Y] \vdash? \forall R: X \rel Y; T: \power Y @ ran (R \rres T) = (ran R) \cap T

L75 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X @ S \dres R \subseteq R

L76 ==

[X, Y] \vdash? \forall R: X \rel Y; T: \power Y @ R \rres T \subseteq R

L77 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X; T: \power Y @
(S \dres R) \rres T = S \dres (R \rres T)

L78 ==

[X, Y] \vdash? \forall R: X \rel Y; S, V: \power X @ S \dres (V \dres R) = (S \cap V) \dres R

L79 ==

[X, Y] \vdash? \forall R: X \rel Y; T, W: \power Y @ (R \rres T) \rres W = R \rres (T \cap W)

L80 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X @ S \ndres R = (X \ S) \dres R

L81 ==

[X, Y] \vdash? \forall R: X \rel Y; T: \power Y @
R \nrres T = R \rres (Y \ T)

L82 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X @ (S \dres R) \cup (S \ndres R) = R

L83 ==

[X, Y] \vdash? \forall R: X \rel Y; T: \power Y @ (R \rres T) \cup (R \nrres T) = R

L77a ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X; T: \power Y @
(S \ndres R) \nrres T = S \ndres (R \nrres T)

L77b ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X; T: \power Y @
(S \ndres R) \rres T = S \ndres (R \rres T)

L77c ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X; T: \power Y @
(S \dres R) \nrres T = S \dres (R \nrres T)

L84 ==

[X, Y] \vdash? \forall x: X; y: Y; R: X \rel Y @ y \mapsto x \in R~ \iff x \mapsto y \in R

L85 ==

[X, Y] \vdash? \forall R: X \rel Y @ (R~)~ = R

L86 ==

[X, Y, Z] \vdash? \forall R: X \rel Y; S: Y \rel Z @ (R \comp S)~ = S~ \comp R~

L87 ==

[V] \vdash? (id V)~ = id V

L88 ==

[X, Y] \vdash? \forall R: X \rel Y @ dom (R~) = ran R

L89 ==

[X, Y] \vdash? \forall R: X \rel Y @ ran (R~) = dom R

L90 ==

[X, Y] \vdash? \forall R: X \rel Y @ id (dom R) \subseteq R \comp R~

L91 ==

[X, Y] \vdash? \forall R: X \rel Y @ id (ran R) \subseteq R~ \comp R

L92 ==

[X, Y] \vdash? \forall y: Y; R: X \rel Y; S: \power X @
y \in R \limg S \rimg \iff (\exists x: X @ x \in S \land x \mapsto y \in R)

L93 ==

[X, Y] \vdash? \forall R: X \rel Y; S: \power X @ R \limg S \rimg = ran (S \dres R)

L94 ==

[X, Y, Z] \vdash? \forall Q: X \rel Y; R: Y \rel Z @ dom (Q \comp R) = Q~ \limg dom R \rimg

L95 ==

[X, Y, Z] \vdash? \forall Q: X \rel Y; R: Y \rel Z @ ran (Q \comp R) = R \limg ran Q \rimg

L96 ==

[X, Y] \vdash? \forall R: X \rel Y; S, T: \power X @
R \limg S \cup T \rimg = R \limg S \rimg \cup R \limg T \rimg

L97 ==

[X, Y] \vdash? \forall R: X \rel Y; S, T: \power X @
R \limg S \cap T \rimg \subseteq R \limg S \rimg \cap R \limg T \rimg

L98 ==

[X, Y] \vdash? \forall R: X \rel Y @ R \limg dom R \rimg = ran R

L99 ==

[X, Y] \vdash? \forall R: X \rel Y @ dom R = first \limg R \rimg

L100 ==

[X, Y] \vdash? \forall R: X \rel Y @ ran R = second \limg R \rimg

bound1 ==

[X, Y] \vdash? \forall y: Y; R: X \rel Y; S: \power X @
    y \in upperBound  R  S \iff (\forall x: S @ x \mapsto y \in R)

bound5 ==

[X, Y]
\vdash? \forall R: X \rel Y; S, T: \power X @
    (upperBound  R  S) \cup (upperBound  R  T) \subseteq upperBound  R  (S \cap T)

bound6 ==

[X, Y]
\vdash? \forall R: X \rel Y; S, T: \power X @
    (upperBound  R  S) \cap (upperBound  R  T) = upperBound  R  (S \cup T)

bound7 ==

[X, Y] \vdash? \forall R: X \rel Y; A, S: \power X; T: \power Y | A \subseteq S @
    T \ (upperBound  R  A) = ((S \cross T) \ R) \limg A \rimg

bound8 ==

[X, Y] \vdash? \forall R: X \rel Y; A, S: \power X; T: \power Y @
    ((S \cross T) \ R) \limg A \rimg = T \ (upperBound  R  (S \cap A))

L198 ==

[I, X]
\vdash? disjoint \emptyset[I \cross \power X]

otherPartition ==

[I, X]
\vdash? (_ partition _) =
    { S: I \rel \power X; T: \power X |
    (\forall x: T @ \exists1 p: S @ x \in p.2) \land (\forall p: S @ \forall x: p.2 @ x \in T) )

otherOverride ==

[X, Y] \vdash? (_ \oplus _) = \lambda Q, R: X \rel Y @
    { p: X \cross Y | p \in R \lor p \in Q \land \lnot \exists y: Y @ (p.1, y) \in R }

overrideClosed ==

[X, Y] \vdash? \forall Q, R: X \rel Y @ Q \oplus R \in X \rel Y

L101 ==

[X] \vdash? \forall R: X \rel X @ R \oplus R = R

L102 ==

[X, Y] \vdash? \forall P, Q, R: X \rel Y @ P \oplus (Q \oplus R) = (P \oplus Q) \oplus R

L103 ==

[X, Y] \vdash? \forall R: X \rel Y @ \emptyset \oplus R = R \oplus \emptyset = R

L104 ==

[X, Y] \vdash? \forall Q, R: X \rel Y @ dom (Q \oplus R) = (dom Q) \cup (dom R)

L105 ==

[X, Y] \vdash? \forall Q, R: X \rel Y | dom Q \cap dom R = \emptyset @ Q \oplus R = Q \cup R

L106 ==

[X, Y] \vdash? \forall V: \power X; Q, R: X \rel Y @
V \dres (Q \oplus R) = (V \dres Q) \oplus (V \dres R)

L107 ==

[X, Y] \vdash? \forall Q, R: X \rel Y; W: \power Y @
(Q \oplus R) \rres W \subseteq (Q \rres W) \oplus (R \rres W)

Orders

chainExample ==

[X] \vdash? \forall a, b, c: X @ { { a, b, c }, { a, b }, { a } } \in irreflexiveChain (_ \subseteq _) [ X ]

L110 ==

[X] \vdash? \forall R: X \rel X @ R \subseteq R+

L111 ==

[X] \vdash? \forall R: X \rel X @ R+ \comp R+ \subseteq R+

L112 ==

[X] \vdash? \forall R, Q: X \rel X | R \subseteq Q \land R \comp Q \subseteq Q @
R+ \subseteq Q

L113 ==

[X] \vdash? \forall R: X \rel X @ id X \subseteq R*

L114 ==

[X] \vdash? \forall R: X \rel X @ R \subseteq R*

L115 ==

[X] \vdash? \forall R: X \rel X @ R* \comp R* = R*

L116 ==

[X] \vdash? \forall R, Q: X \rel X | id X \subseteq Q \land R \comp Q \subseteq Q @
R* \subseteq Q

L117a ==

[X] \vdash? \forall R: X \rel X @ R* = R+ \cup id X

L117b ==

[X] \vdash? \forall R: X \rel X @ R* = (R \cup id X)+

L118a ==

[X] \vdash? \forall R: X \rel X @ R+ = R \comp R*

L118b ==

[X] \vdash? \forall R: X \rel X @ R+ = R* \comp R

L119 ==

[X] \vdash? \forall R: X \rel X @ (R+)+ = R+

L120 ==

[X] \vdash? \forall R: X \rel X @ (R*)* = R*

doAsClosure ==

[ X ] \vdash? \forall R: X \rel X @ do  R = R* \nrres dom R

doInduction ==

[ X ] \vdash? \forall R, Q: X \rel X |
id (X \ dom R) \subseteq Q \land R \comp Q \subseteq Q @
do  R \subseteq Q

L121 ==

[X] \vdash? \forall R: X \rel X; S: \power X @ S \subseteq R* \limg S \rimg

L122 ==

[X] \vdash? \forall R: X \rel X; S: \power X @
R \limg R* \limg S \rimg \rimg \subseteq R* \limg S \rimg

L123 ==

[X] \vdash? \forall R: X \rel X; S, T: \power X |
S \subseteq T \land R \limg T \rimg \subseteq T @ R* \limg S \rimg \subseteq T

Functions

L70 ==

[X, Y, Z] \vdash? \forall f: Y \fun Z; g: X \fun Y; x: X @ (f \circ g) x = f(g(x))

L108 ==

[X, Y] \vdash? \forall x: X; f, g: X \fun Y | x \in (dom f) \ (dom g) @
(f \oplus g) x = f x

L109 ==

[X, Y] \vdash? \forall x: X; f, g: X \fun Y | x \in dom g @ (f \oplus g) x = g x

L124 ==

[X, Y] \vdash? \forall f: \power (X \cross Y) @ f \in X \pfun Y \iff f \circ f~ = id (ran f)

L125 ==

[X, Y] \vdash? \forall f: \power (X \cross Y) @
f \in X \pinj Y \iff f \in X \pfun Y \land f~ \in Y \pfun X

L126 ==

[X, Y] \vdash? \forall f: \power (X \cross Y) @
f \in X \inj Y \iff f \in X \fun Y \land f~ \in Y \pfun X

L127 ==

[X, Y] \vdash? \forall f: \power (X \cross Y); S, T: \power X | f \in X \pinj Y @
f \limg S \cap T \rimg = f \limg S \rimg \cap f \limg T \rimg

L128 ==

[X, Y] \vdash? \forall f: \power (X \cross Y) @
f \in X \bij Y \iff f \in X \fun Y \land f~ \in Y \fun X

L129 ==

[X, Y] \vdash? \forall f: \power (X \cross Y) | f \in X \psurj Y @ f \circ f~ = id Y

L153 ==

[X, Y] \vdash? X \ffun Y = (X \pfun Y) \cap \finset (X \cross Y)

auxPigeonhole ==

[X] \vdash? \forall N == { V: \power X | \forall U: \power V; R: X \rel X | R \in U \psurj V @ U = V } @
\finset X \subseteq N

Pigeonhole ==

[X] \vdash? \forall S, T: \finset X; f: X \rel X | S \subseteq T \land f \in S \psurj T @ S = T

L148 ==

[X] \vdash? \forall S: \finset X @ \forall f: S \inj S @ ran f = S

Relational operations on functions

F1 ==

[X] \vdash? \forall S: \power X @ id S \in X \pinj X

F2 ==

[X] \vdash? id X \in X \bij X

F3 ==

[X,Y,Z] \vdash? \forall f: X \pfun Y; g: Y \pfun Z @ g \circ f \in X \pfun Z

F4 ==

[X,Y,Z] \vdash? \forall f: X \fun Y; g: Y \pfun Z | ran f \subseteq dom g @
g \circ f \in X \fun Z

F5 ==

[X,Y] \vdash? \forall S: \power X; f: X \pfun Y @ S \dres f \in X \pfun Y

F6 ==

[X,Y] \vdash? \forall T: \power Y; f: X \pfun Y @ f \rres T \in X \pfun Y

F7 ==

[X,Y] \vdash? \forall f: X \pfun Y; g: X \pfun Y @ f \oplus g \in X \pfun Y

F8 ==

[X,Y,Z] \vdash? \forall f: X \pinj Y; g: Y \pinj Z @ g \circ f \in X \pinj Z

F9 ==

[X,Y] \vdash? \forall S: \power X; f: X \pinj Y @ S \dres f \in X \pinj Y

F10 ==

[X,Y] \vdash? \forall T: \power Y; f: X \pinj Y @ f \rres T \in X \pinj Y

F11 ==

[X,Y] \vdash? \forall f: X \pinj Y @ f~ \in Y \pinj X

F12 ==

[X,Y] \vdash? \forall f: X \pfun Y; g: X \pfun Y |
(dom f) \dres g = (dom g) \dres f @ f \cup g \in X \pfun Y

F13 ==

[X,Y] \vdash? \forall f: X \pfun Y; g: X \rel Y @ f \cap g \in X \pfun Y

F14 ==

[X,Y] \vdash? \forall f: X \pinj Y; g: X \rel Y @ f \cap g \in X \pinj Y

F15 ==

[X,Y] \vdash? \forall f: X \pfun Y; g: \power (X \cross Y) | g \subseteq f @ g \in X \pfun Y

F16 ==

[X,Y] \vdash? \forall f: X \pinj Y; g: \power (X \cross Y) | g \subseteq f @ g \in X \pinj Y

IT 22-Jan-2002