It seems that the minimal setup needed to talk about a product of a sequence is a set with a binary operation. Such object is called "magma". However, interesting properties show up when the binary operation is associative and such alebraic structure is called a semigroup. In this theory file we define and study sequences of partial products of sequences of magma and semigroup elements.
Semigroup is a a magma in which the binary operation is associative. In this section we mostly study the products of sequences of elements of semigroup. The goal is to establish the fact that taking the product of a sequence is distributive with respect to concatenation of sequences, i.e for two sequences \(a,b\) of the semigroup elements we have \(\prod (a\sqcup b) = (\prod a)\cdot (\prod b)\), where "\(a \sqcup b\)" is concatenation of \(a\) and \(b\) (\(a\)\( ++ \)\(b\) in Haskell notation). Less formally, we want to show that we can discard parantheses in expressions of the form \((a_0\cdot a_1\cdot .. \cdot a_n)\cdot (b_0\cdot .. \cdot b_k)\).
First we define a notion similar to Fold, except that that the initial element of the fold is given by the first element of sequence. By analogy with Haskell fold we call that Fold1
definition
\( \text{Fold1}(f,a) \equiv \text{Fold}(f,a(0), \text{Tail}(a)) \)
The definition of the semigr0 context below introduces notation for writing about finite sequences and semigroup products. In the context we fix the carrier and denote it \(G\). The binary operation on \(G\) is called \(f\). All theorems proven in the context semigr0 will implicitly assume that \(f\) is an associative operation on \(G\). We will use multiplicative notation for the semigroup operation. The product of a sequence \(a\) is denoted \(\prod a\). We will write \(a\hookleftarrow x\) for the result of appending an element \(x\) to the finite sequence (list) \(a\). This is a bit nonstandard, but I don't have a better idea for the "append" notation. Finally, \(a\sqcup b\) will denote the concatenation of the lists \(a\) and \(b\).
locale semigr0
assumes assoc_assum: \( f \text{ is associative on } G \)
defines \( x \cdot y \equiv f\langle x,y\rangle \)
defines \( \prod a \equiv \text{Fold1}(f,a) \)
defines \( a \hookleftarrow x \equiv \text{Append}(a,x) \)
defines \( a \sqcup b \equiv \text{Concat}(a,b) \)
The next lemma shows our assumption on the associativity of the semigroup operation in the notation defined in in the semigr0 context.
lemma (in semigr0) semigr_assoc:
assumes \( x \in G \), \( y \in G \), \( z \in G \)
shows \( x\cdot y\cdot z = x\cdot (y\cdot z) \) using assms, assoc_assum, IsAssociative_defIn the way we define associativity the assumption that \(f\) is associative on \(G\) also implies that it is a binary operation on \(X\).
lemma (in semigr0) semigr_binop:
shows \( f : G\times G \rightarrow G \) using assoc_assum, IsAssociative_defSemigroup operation is closed.
lemma (in semigr0) semigr_closed:
assumes \( a\in G \), \( b\in G \)
shows \( a\cdot b \in G \) using assms, semigr_binop, apply_funtypeLemma append_1elem written in the notation used in the semigr0 context.
lemma (in semigr0) append_1elem_nice:
assumes \( n \in nat \) and \( a: n \rightarrow X \) and \( b : 1 \rightarrow X \)
shows \( a \sqcup b = a \hookleftarrow b(0) \) using assms, append_1elemLemma concat_init_last_elem rewritten in the notation used in the semigr0 context.
lemma (in semigr0) concat_init_last:
assumes \( n \in nat \), \( k \in nat \) and \( a: n \rightarrow X \) and \( b : succ(k) \rightarrow X \)
shows \( (a \sqcup \text{Init}(b)) \hookleftarrow b(k) = a \sqcup b \) using assms, concat_init_last_elemThe product of semigroup (actually, magma -- we don't need associativity for this) elements is in the semigroup.
lemma (in semigr0) prod_type:
assumes \( n \in nat \) and \( a : succ(n) \rightarrow G \)
shows \( (\prod a) \in G \)proofWhat is the product of one element list?
lemma (in semigr0) prod_of_1elem:
assumes A1: \( a: 1 \rightarrow G \)
shows \( (\prod a) = a(0) \)proofWhat happens to the product of a list when we append an element to the list?
lemma (in semigr0) prod_append:
assumes A1: \( n \in nat \) and A2: \( a : succ(n) \rightarrow G \) and A3: \( x\in G \)
shows \( (\prod a\hookleftarrow x) = (\prod a) \cdot x \)proofThe main theorem of the section: taking the product of a sequence is distributive with respect to concatenation of sequences. The proof is by induction on the length of the second list.
theorem (in semigr0) prod_conc_distr:
assumes A1: \( n \in nat \), \( k \in nat \) and A2: \( a : succ(n) \rightarrow G \), \( b: succ(k) \rightarrow G \)
shows \( (\prod a) \cdot (\prod b) = \prod (a \sqcup b) \)proof\(a\cdot b \cdot (c\cdot d) = a\cdot (b \cdot c) \cdot d\) for semigrouop elements \(a,b,c,d \in G\). The Commutative semigroups section below contains a couple of rearrangements that need commutativity of the semigroup operation, but this one uses only associativity, so it's here.
lemma (in semigr0) rearr4elem_assoc:
assumes \( a\in G \), \( b\in G \), \( c\in G \), \( d\in G \)
shows \( a\cdot b\cdot (c\cdot d) = a\cdot (b\cdot c)\cdot d \)proofIn this section we study the properties of expressions of the form \(\prod_{i\in \Lambda} a_i = a_{i_0}\cdot a_{i_1} \cdot .. \cdot a_{i-1}\), i.e. what we denote as \( \prod (\Lambda ,a) \). \(\Lambda\) here is a finite subset of some set \(X\) and \(a\) is a function defined on \(X\) with values in the semigroup \(G\).
Suppose \(a: X \rightarrow G\) is an indexed family of elements of a semigroup \(G\) and \(\Lambda = \{i_0, i_1, .. , i_{n-1}\} \subseteq \mathbb{N}\) is a finite set of indices. We want to define \(\prod_{i\in \Lambda} a_i = a_{i_0}\cdot a_{i_1} \cdot .. \cdot a_{i-1}\). To do that we use the notion of Enumeration defined in the Enumeration_ZF theory file that takes a set of indices and lists them in increasing order, thus converting it to list. Then we use the Fold1 to multiply the resulting list. Recall that in Isabelle/ZF the capital letter ''O'' denotes the composition of two functions (or relations).
definition
\( \text{SetFold}(f,a,\Lambda ,r) = \text{Fold1}(f,a\circ \text{Enumeration}(\Lambda ,r)) \)
For a finite subset \(\Lambda\) of a linearly ordered set \(X\) we will write \(\sigma (\Lambda )\) to denote the enumeration of the elements of \(\Lambda\), i.e. the only order isomorphism \(|\Lambda | \rightarrow \Lambda\), where \(|\Lambda | \in \mathbb{N}\) is the number of elements of \(\Lambda \). We also define notation for taking a product over a set of indices of some sequence of semigroup elements. The product of semigroup elements over some set \(\Lambda \subseteq X\) of indices of a sequence \(a: X \rightarrow G\) (i.e. \(\prod_{i\in \Lambda} a_i\)) is denoted \( \prod (\Lambda ,a) \). In the semigr1 context we assume that \(a\) is a function defined on some linearly ordered set \(X\) with values in the semigroup \(G\).
locale semigr1 = semigr0 +
assumes linord: \( \text{IsLinOrder}(X,r) \)
assumes a_is_fun: \( a : X \rightarrow G \)
defines \( \sigma (A) \equiv \text{Enumeration}(A,r) \)
defines \( \prod (\Lambda ,b) \equiv \text{SetFold}(f,b,\Lambda ,r) \)
We can use the enums locale in the semigr0 context.
lemma (in semigr1) enums_valid_in_semigr1:
shows \( enums(X,r) \) using linord, enums_defDefinition of product over a set expressed in notation of the semigr0 locale.
lemma (in semigr1) setproddef:
shows \( \prod (\Lambda ,a) = \prod (a\circ \sigma (\Lambda )) \) using SetFold_defA composition of enumeration of a nonempty finite subset of \(\mathbb{N}\) with a sequence of elements of \(G\) is a nonempty list of elements of \(G\). This implies that a product over set of a finite set of indices belongs to the (carrier of) semigroup.
lemma (in semigr1) setprod_type:
assumes A1: \( \Lambda \in \text{FinPow}(X) \) and A2: \( \Lambda \neq 0 \)
shows \( \exists n \in nat .\ |\Lambda | = succ(n) \wedge a\circ \sigma (\Lambda ) : succ(n) \rightarrow G \) and \( \prod (\Lambda ,a) \in G \)proofThe enum_append lemma from the Enemeration theory specialized for natural numbers.
lemma (in semigr1) semigr1_enum_append:
assumes \( \Lambda \in \text{FinPow}(X) \) and \( n \in X - \Lambda \) and \( \forall k\in \Lambda .\ \langle k,n\rangle \in r \)
shows \( \sigma (\Lambda \cup \{n\}) = \sigma (\Lambda )\hookleftarrow n \) using assms, FinPow_def, enums_valid_in_semigr1, enum_appendWhat is product over a singleton?
lemma (in semigr1) gen_prod_singleton:
assumes A1: \( x \in X \)
shows \( \prod (\{x\},a) = a(x) \)proofA generalization of prod_append to the products over sets of indices.
lemma (in semigr1) gen_prod_append:
assumes A1: \( \Lambda \in \text{FinPow}(X) \) and A2: \( \Lambda \neq 0 \) and A3: \( n \in X - \Lambda \) and A4: \( \forall k\in \Lambda .\ \langle k,n\rangle \in r \)
shows \( \prod (\Lambda \cup \{n\}, a) = (\prod (\Lambda ,a)) \cdot a(n) \)proofVery similar to gen_prod_append: a relation between a product over a set of indices and the product over the set with the maximum removed.
lemma (in semigr1) gen_product_rem_point:
assumes A1: \( A \in \text{FinPow}(X) \) and A2: \( n \in A \) and A4: \( A - \{n\} \neq 0 \) and A3: \( \forall k\in A.\ \langle k, n\rangle \in r \)
shows \( (\prod (A - \{n\},a)) \cdot a(n) = \prod (A, a) \)proofCommutative semigroups are those whose operation is commutative, i.e. \(a\cdot b = b\cdot a\). This implies that for any permutation \(s : n \rightarrow n\) we have \(\prod_{j=0}^n a_j = \prod_{j=0}^n a_{s (j)}\), or, closer to the notation we are using in the semigr0 context, \(\prod a = \prod (a \circ s )\). Maybe one day we will be able to prove this, but for now the goal is to prove something simpler: that if the semigroup operation is commutative taking the product of a sequence is distributive with respect to the operation: \(\prod_{j=0}^n (a_j\cdot b_j) = \left(\prod_{j=0}^n a_j)\right) \left(\prod_{j=0}^n b_j)\right)\). Many of the rearrangements (namely those that don't use the inverse) proven in the AbelianGroup_ZF theory hold in fact in semigroups. Some of them will be reproven in this section.
A rearrangement with 3 elements.
lemma (in semigr0) rearr3elems:
assumes \( f \text{ is commutative on } G \) and \( a\in G \), \( b\in G \), \( c\in G \)
shows \( a\cdot b\cdot c = a\cdot c\cdot b \) using assms, semigr_assoc, IsCommutative_defA rearrangement of four elements.
lemma (in semigr0) rearr4elems:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( a\in G \), \( b\in G \), \( c\in G \), \( d\in G \)
shows \( a\cdot b\cdot (c\cdot d) = a\cdot c\cdot (b\cdot d) \)proofWe start with a version of prod_append that will shorten a bit the proof of the main theorem.
lemma (in semigr0) shorter_seq:
assumes A1: \( k \in nat \) and A2: \( a \in succ(succ(k)) \rightarrow G \)
shows \( (\prod a) = (\prod \text{Init}(a)) \cdot a(succ(k)) \)proofA lemma useful in the induction step of the main theorem.
lemma (in semigr0) prod_distr_ind_step:
assumes A1: \( k \in nat \) and A2: \( a : succ(succ(k)) \rightarrow G \) and A3: \( b : succ(succ(k)) \rightarrow G \) and A4: \( c : succ(succ(k)) \rightarrow G \) and A5: \( \forall j\in succ(succ(k)).\ c(j) = a(j) \cdot b(j) \)
shows \( \text{Init}(a) : succ(k) \rightarrow G \), \( \text{Init}(b) : succ(k) \rightarrow G \), \( \text{Init}(c) : succ(k) \rightarrow G \), \( \forall j\in succ(k).\ \text{Init}(c)(j) = \text{Init}(a)(j) \cdot \text{Init}(b)(j) \)proofFor commutative operations taking the product of a sequence is distributive with respect to the operation. This version will probably not be used in applications, it is formulated in a way that is easier to prove by induction. For a more convenient formulation see prod_comm_distrib. The proof by induction on the length of the sequence.
theorem (in semigr0) prod_comm_distr:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( n\in nat \)
shows \( \forall a b c.\ \) \( (a : succ(n)\rightarrow G \wedge b : succ(n)\rightarrow G \wedge c : succ(n)\rightarrow G \wedge \) \( (\forall j\in succ(n).\ c(j) = a(j) \cdot b(j))) \longrightarrow \) \( (\prod c) = (\prod a) \cdot (\prod b) \)proofA reformulation of prod_comm_distr that is more convenient in applications.
theorem (in semigr0) prod_comm_distrib:
assumes \( f \text{ is commutative on } G \) and \( n\in nat \) and \( a : succ(n)\rightarrow G \), \( b : succ(n)\rightarrow G \), \( c : succ(n)\rightarrow G \) and \( \forall j\in succ(n).\ c(j) = a(j) \cdot b(j) \)
shows \( (\prod c) = (\prod a) \cdot (\prod b) \) using assms, prod_comm_distrA product of two products over disjoint sets of indices is the product over the union.
lemma (in semigr1) prod_bisect:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( \Lambda \in \text{FinPow}(X) \)
shows \( \forall P \in \text{Bisections}(\Lambda ).\ \prod (\Lambda ,a) = (\prod (\text{fst}(P),a))\cdot (\prod (\text{snd}(P),a)) \)proofA better looking reformulation of prod_bisect.
theorem (in semigr1) prod_disjoint:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( A \in \text{FinPow}(X) \), \( A \neq 0 \) and A3: \( B \in \text{FinPow}(X) \), \( B \neq 0 \) and A4: \( A \cap B = 0 \)
shows \( \prod (A\cup B,a) = (\prod (A,a))\cdot (\prod (B,a)) \)proofA generalization of prod_disjoint.
lemma (in semigr1) prod_list_of_lists:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( n \in nat \)
shows \( \forall M \in succ(n) \rightarrow \text{FinPow}(X).\ \) \( M \text{ is partition } \longrightarrow \) \( (\prod \{\langle i,\prod (M(i),a)\rangle .\ i \in succ(n)\}) = \) \( (\prod (\bigcup i \in succ(n).\ M(i),a)) \)proofA more convenient reformulation of prod_list_of_lists.
theorem (in semigr1) prod_list_of_sets:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( n \in nat \), \( n \neq 0 \) and A3: \( M : n \rightarrow \text{FinPow}(X) \), \( M \text{ is partition } \)
shows \( (\prod \{\langle i,\prod (M(i),a)\rangle .\ i \in n\}) = (\prod (\bigcup i \in n.\ M(i),a)) \)proofThe definition of the product \( \prod (A,a) \equiv \text{SetFold}(f,a,A,r) \) of a some (finite) set of semigroup elements requires that \(r\) is a linear order on the set of indices \(A\). This is necessary so that we know in which order we are multiplying the elements. The product over \(A\) is defined so that we have \(\prod_A a = \prod a \circ \sigma(A)\) where \(\sigma : |A| \rightarrow A\) is the enumeration of \(A\) (the only order isomorphism between the number of elements in \(A\) and \(A\)), see lemma setproddef. However, if the operation is commutative, the order is irrelevant. The next theorem formalizes that fact stating that we can replace the enumeration \(\sigma (A)\) by any bijection between \(|A|\) and \(A\). In a way this is a generalization of setproddef. The proof is based on application of prod_list_of_sets to the finite collection of singletons that comprise \(A\).
theorem (in semigr1) prod_order_irr:
assumes A1: \( f \text{ is commutative on } G \) and A2: \( A \in \text{FinPow}(X) \), \( A \neq 0 \) and A3: \( b \in \text{bij}(|A|,A) \)
shows \( (\prod (a\circ b)) = \prod (A,a) \)proofAnother way of expressing the fact that the product dos not depend on the order.
corollary (in semigr1) prod_bij_same:
assumes \( f \text{ is commutative on } G \) and \( A \in \text{FinPow}(X) \), \( A \neq 0 \) and \( b \in \text{bij}(|A|,A) \), \( c \in \text{bij}(|A|,A) \)
shows \( (\prod (a\circ b)) = (\prod (a\circ c)) \) using assms, prod_order_irrassumes \( n \in nat \) and \( a: n \rightarrow X \) and \( b : 1 \rightarrow X \)
shows \( \text{Concat}(a,b) = \text{Append}(a,b(0)) \)assumes \( n \in nat \), \( k \in nat \) and \( a: n \rightarrow X \) and \( b : succ(k) \rightarrow X \)
shows \( \text{Append}( \text{Concat}(a, \text{Init}(b)),b(k)) = \text{Concat}(a,b) \)assumes \( n \in nat \) and \( a: succ(n) \rightarrow X \)
shows \( \text{Tail}(a) : n \rightarrow X \), \( \forall k \in n.\ \text{Tail}(a)(k) = a(succ(k)) \)assumes \( n \in nat \)
shows \( 0 \in succ(n) \)assumes \( n \in nat \) and \( f : X\times Y \rightarrow X \), \( a:n \rightarrow Y \), \( x\in X \), \( Y\neq 0 \)
shows \( \text{Fold}(f,x,a) = \text{FoldSeq}(f,x,a)(n) \) and \( \text{Fold}(f,x,a) \in X \)assumes \( f : X\times Y \rightarrow X \) and \( a:0\rightarrow Y \), \( x\in X \), \( Y\neq 0 \)
shows \( \text{Fold}(f,x,a) = x \)assumes \( n\in nat \) and \( a: succ(n) \rightarrow X \) and \( x\in X \)
shows \( \text{Append}(a,x)(0) = a(0) \)assumes \( n \in nat \) and \( a: succ(n) \rightarrow X \) and \( x\in X \)
shows \( \text{Append}( \text{Tail}(a),x) = \text{Tail}( \text{Append}(a,x)) \)assumes \( n \in nat \) and \( f : X\times Y \rightarrow X \) and \( a:n\rightarrow Y \) and \( x\in X \) and \( y\in Y \)
shows \( \text{FoldSeq}(f,x, \text{Append}(a,y))(n) = \text{Fold}(f,x,a) \) and \( \text{Fold}(f,x, \text{Append}(a,y)) = f\langle \text{Fold}(f,x,a), y\rangle \)assumes \( n \in nat \) and \( a: n \rightarrow X \) and \( b : 1 \rightarrow X \)
shows \( a \sqcup b = a \hookleftarrow b(0) \)assumes \( n \in nat \) and \( a : succ(n) \rightarrow G \) and \( x\in G \)
shows \( (\prod a\hookleftarrow x) = (\prod a) \cdot x \)assumes \( a: 1 \rightarrow G \)
shows \( (\prod a) = a(0) \)assumes \( n \in nat \) and \( a: succ(n) \rightarrow X \)
shows \( \text{Init}(a) : n \rightarrow X \), \( \forall k\in n.\ \text{Init}(a)(k) = a(k) \), \( a = \text{Append}( \text{Init}(a), a(n)) \)assumes \( n \in nat \), \( k \in nat \) and \( a: n \rightarrow X \) and \( b : succ(k) \rightarrow X \)
shows \( (a \sqcup \text{Init}(b)) \hookleftarrow b(k) = a \sqcup b \)assumes \( n \in nat \) and \( a : succ(n) \rightarrow G \)
shows \( (\prod a) \in G \)assumes \( x \in G \), \( y \in G \), \( z \in G \)
shows \( x\cdot y\cdot z = x\cdot (y\cdot z) \)assumes \( n \in nat \), \( k \in nat \) and \( a:n\rightarrow X \), \( b:k\rightarrow X \)
shows \( \text{Concat}(a,b): n + k \rightarrow X \), \( \forall i\in n.\ \text{Concat}(a,b)(i) = a(i) \), \( \forall i \in Nat \text{Interval}(n,k).\ \text{Concat}(a,b)(i) = b(i - n) \), \( \forall j \in k.\ \text{Concat}(a,b)(n + j) = b(j) \)assumes \( n \in nat \), \( k \in nat \)
shows \( succ(n + j) \in nat \), \( succ(n) + succ(j) = succ(succ(n + j)) \)assumes \( n\in nat \) and \( P(0) \) and \( \forall k\in nat.\ P(k)\longrightarrow P(succ(k)) \)
shows \( P(n) \)assumes \( a\in G \), \( b\in G \)
shows \( a\cdot b \in G \)assumes \( A \in \text{FinPow}(X) \) and \( A \neq 0 \)
shows \( \exists n \in nat.\ |A| = succ(n) \)assumes \( A \in \text{FinPow}(X) \)
shows \( \sigma (A) \in ord\_iso(|A|,Le, A,r) \), \( \sigma (A) \in \text{bij}(|A|,A) \), \( \sigma (A) : |A| \rightarrow A \)assumes \( g:A\rightarrow B \) and \( f:C\rightarrow D \) and \( B \subseteq C \)
shows \( f\circ g : A \rightarrow D \)assumes \( A \in \text{FinPow}(X) \) and \( b \in X-A \) and \( \forall a\in A.\ a\leq b \)
shows \( \sigma (A \cup \{b\}) = \sigma (A)\hookleftarrow b \)assumes \( x\in X \)
shows \( \sigma (\{x\}): 1 \rightarrow X \) and \( \sigma (\{x\})(0) = x \)assumes \( \Lambda \in \text{FinPow}(X) \) and \( n \in X - \Lambda \) and \( \forall k\in \Lambda .\ \langle k,n\rangle \in r \)
shows \( \sigma (\Lambda \cup \{n\}) = \sigma (\Lambda )\hookleftarrow n \)assumes \( A \in \text{FinPow}(X) \)
shows \( |A| \in nat \) and \( A \approx |A| \)assumes \( A \in \text{FinPow}(X) \)
shows \( \sigma (A) : |A| \rightarrow X \)assumes \( n \in nat \) and \( a : n \rightarrow X \) and \( x \in X \) and \( c : X \rightarrow Y \)
shows \( c\circ \text{Append}(a,x) : succ(n) \rightarrow Y \), \( c\circ \text{Append}(a,x) = \text{Append}(c\circ a, c(x)) \)assumes \( \Lambda \in \text{FinPow}(X) \) and \( \Lambda \neq 0 \)
shows \( \exists n \in nat .\ |\Lambda | = succ(n) \wedge a\circ \sigma (\Lambda ) : succ(n) \rightarrow G \) and \( \prod (\Lambda ,a) \in G \)assumes \( A \in \text{FinPow}(X) \)
shows \( A - \{a\} \in \text{FinPow}(X) \)assumes \( \Lambda \in \text{FinPow}(X) \) and \( \Lambda \neq 0 \) and \( n \in X - \Lambda \) and \( \forall k\in \Lambda .\ \langle k,n\rangle \in r \)
shows \( \prod (\Lambda \cup \{n\}, a) = (\prod (\Lambda ,a)) \cdot a(n) \)assumes \( a\in A \)
shows \( (A-\{a\}) \cup \{a\} = A \)assumes \( k \in nat \) and \( a \in succ(succ(k)) \rightarrow G \)
shows \( (\prod a) = (\prod \text{Init}(a)) \cdot a(succ(k)) \)assumes \( k \in nat \) and \( a : succ(succ(k)) \rightarrow G \) and \( b : succ(succ(k)) \rightarrow G \) and \( c : succ(succ(k)) \rightarrow G \) and \( \forall j\in succ(succ(k)).\ c(j) = a(j) \cdot b(j) \)
shows \( \text{Init}(a) : succ(k) \rightarrow G \), \( \text{Init}(b) : succ(k) \rightarrow G \), \( \text{Init}(c) : succ(k) \rightarrow G \), \( \forall j\in succ(k).\ \text{Init}(c)(j) = \text{Init}(a)(j) \cdot \text{Init}(b)(j) \)assumes \( f \text{ is commutative on } G \) and \( a\in G \), \( b\in G \), \( c\in G \), \( d\in G \)
shows \( a\cdot b\cdot (c\cdot d) = a\cdot c\cdot (b\cdot d) \)assumes \( f \text{ is commutative on } G \) and \( n\in nat \)
shows \( \forall a b c.\ \) \( (a : succ(n)\rightarrow G \wedge b : succ(n)\rightarrow G \wedge c : succ(n)\rightarrow G \wedge \) \( (\forall j\in succ(n).\ c(j) = a(j) \cdot b(j))) \longrightarrow \) \( (\prod c) = (\prod a) \cdot (\prod b) \)assumes \( x \in X \)
shows \( \{x\} \in \text{FinPow}(X) \)assumes \( A \in \text{FinPow}(X) \) and \( B \in \text{FinPow}(X) \)
shows \( A \cup B \in \text{FinPow}(X) \)assumes \( A \in \text{FinPow}(X) \) and \( Q \in \text{Bisections}(A) \)
shows \( \text{fst}(Q) \in \text{FinPow}(X) \) and \( \text{snd}(Q) \in \text{FinPow}(X) \)assumes \( Q \in \text{Bisections}(X) \)
shows \( Q = \langle \text{fst}(Q), \text{snd}(Q)\rangle \)assumes \( r \text{ is total on } X \)
shows \( \text{refl}(X,r) \)assumes \( \text{refl}(X,r) \) and \( A \subseteq B \cup \{x\} \) and \( B \subseteq X \) and \( x \in X \) and \( \forall y\in B.\ \langle y,x\rangle \in r \)
shows \( \forall a\in A.\ \langle a,x\rangle \in r \)assumes \( x \notin X \) and \( \langle A,B\rangle \in \text{Bisections}(X \cup \{x\}) \)
shows \( (A = \{x\} \vee B = \{x\}) \vee (\langle A - \{x\}, B - \{x\}\rangle \in \text{Bisections}(X)) \)assumes \( x \notin X \) and \( \langle A, \{x\}\rangle \in \text{Bisections}(X \cup \{x\}) \)
shows \( A = X \) and \( X \neq 0 \)assumes \( x \in X \)
shows \( \prod (\{x\},a) = a(x) \)assumes \( x \notin X \) and \( \langle \{x\}, A\rangle \in \text{Bisections}(X \cup \{x\}) \)
shows \( A = X \) and \( X \neq 0 \)assumes \( \langle A,B\rangle \in \text{Bisections}(X \cup \{x\}) \) and \( \langle A - \{x\}, B - \{x\}\rangle \in \text{Bisections}(X) \)
shows \( (\langle A, B - \{x\}\rangle \in \text{Bisections}(X) \wedge x \in B) \vee \) \( (\langle A - \{x\}, B\rangle \in \text{Bisections}(X) \wedge x \in A) \)assumes \( \langle A,B\rangle \in \text{Bisections}(X) \)
shows \( A\neq 0 \), \( B\neq 0 \), \( A \subseteq X \), \( B \subseteq X \), \( A \cap B = 0 \), \( A \cup B = X \), \( X \neq 0 \)assumes \( A \in \text{FinPow}(X) \) and \( n \in A \) and \( A - \{n\} \neq 0 \) and \( \forall k\in A.\ \langle k, n\rangle \in r \)
shows \( (\prod (A - \{n\},a)) \cdot a(n) = \prod (A, a) \)assumes \( f \text{ is commutative on } G \) and \( a\in G \), \( b\in G \), \( c\in G \)
shows \( a\cdot b\cdot c = a\cdot c\cdot b \)assumes \( \text{IsLinOrder}(X,r) \) and \( P(0) \) and \( \forall A \in \text{FinPow}(X).\ \) \( ( \forall x \in X-A.\ P(A) \wedge (\forall a\in A.\ \langle a,x\rangle \in r ) \longrightarrow P(A \cup \{x\})) \) and \( B \in \text{FinPow}(X) \)
shows \( P(B) \)assumes \( A\neq 0 \), \( B\neq 0 \), \( A \cap B = 0 \)
shows \( \langle A,B\rangle \in \text{Bisections}(A\cup B) \)assumes \( f \text{ is commutative on } G \) and \( \Lambda \in \text{FinPow}(X) \)
shows \( \forall P \in \text{Bisections}(\Lambda ).\ \prod (\Lambda ,a) = (\prod (\text{fst}(P),a))\cdot (\prod (\text{snd}(P),a)) \)assumes \( f:A\rightarrow C \)
shows \( domain(f) = A \)assumes \( x\in X \)
shows \( \{\langle 0,x\rangle \} : 1 \rightarrow X \) and \( \{\langle 0,x\rangle \} \in \text{NELists}(X) \)assumes \( \forall x\in X.\ b(x) \in Y \)
shows \( \{\langle x,b(x)\rangle .\ x\in X\} : X\rightarrow Y \)assumes \( \forall i \in succ(k).\ b(i) \in X \) and \( a = \{\langle i,b(i)\rangle .\ i \in succ(k)\} \)
shows \( a: succ(k) \rightarrow X \), \( \{\langle i,b(i)\rangle .\ i \in k\}: k \rightarrow X \), \( a = \text{Append}(\{\langle i,b(i)\rangle .\ i \in k\},b(k)) \)assumes \( n \in nat \) and \( \forall k \in n.\ N(k) \in \text{FinPow}(X) \)
shows \( \{N(k).\ k \in n\} \in \text{FinPow}( \text{FinPow}(X)) \) and \( (\bigcup k \in n.\ N(k)) \in \text{FinPow}(X) \)assumes \( n \in nat \) and \( a : succ(n) \rightarrow X \), \( a \text{ is partition } \)
shows \( (\bigcup i\in n.\ a(i)) \cap a(n) = 0 \)assumes \( f \text{ is commutative on } G \) and \( A \in \text{FinPow}(X) \), \( A \neq 0 \) and \( B \in \text{FinPow}(X) \), \( B \neq 0 \) and \( A \cap B = 0 \)
shows \( \prod (A\cup B,a) = (\prod (A,a))\cdot (\prod (B,a)) \)assumes \( n \in nat \) and \( n\neq 0 \)
shows \( \exists k\in nat.\ n = succ(k) \)assumes \( f \text{ is commutative on } G \) and \( n \in nat \)
shows \( \forall M \in succ(n) \rightarrow \text{FinPow}(X).\ \) \( M \text{ is partition } \longrightarrow \) \( (\prod \{\langle i,\prod (M(i),a)\rangle .\ i \in succ(n)\}) = \) \( (\prod (\bigcup i \in succ(n).\ M(i),a)) \)assumes \( b \in \text{inj}(X,Y) \)
shows \( \forall x \in X.\ \{\langle x, \{b(x)\}\rangle .\ x \in X\}(x) = \{b(x)\} \) and \( \{\langle x, \{b(x)\}\rangle .\ x \in X\} \text{ is partition } \)assumes \( f:X\rightarrow Y \) and \( Y\subseteq Z \)
shows \( f:X\rightarrow Z \)assumes \( f:X\rightarrow Y \)
shows \( f = \{\langle x, f(x)\rangle .\ x \in X\} \)assumes \( A \in \text{FinPow}(X) \) and \( A \neq 0 \)
shows \( |A| \neq 0 \)assumes \( f \text{ is commutative on } G \) and \( n \in nat \), \( n \neq 0 \) and \( M : n \rightarrow \text{FinPow}(X) \), \( M \text{ is partition } \)
shows \( (\prod \{\langle i,\prod (M(i),a)\rangle .\ i \in n\}) = (\prod (\bigcup i \in n.\ M(i),a)) \)assumes \( f \in \text{surj}(X,Y) \)
shows \( (\bigcup x\in X.\ \{f(x)\}) = Y \)assumes \( f \text{ is commutative on } G \) and \( A \in \text{FinPow}(X) \), \( A \neq 0 \) and \( b \in \text{bij}(|A|,A) \)
shows \( (\prod (a\circ b)) = \prod (A,a) \)