Journal of Formalized Mathematics
Volume 14, 2002
University of Bialystok
Copyright (c) 2002 Association of Mizar Users

The abstract of the Mizar article:

On Ordering of Bags

by
Gilbert Lee, and
Piotr Rudnicki

Received March 12, 2002

MML identifier: BAGORDER
[ Mizar article, MML identifier index ]


environ

 vocabulary DICKSON, BAGORDER, TARSKI, ARYTM_1, ARYTM_3, RELAT_1, WELLORD1,
      RELAT_2, MCART_1, CAT_1, ORDINAL2, ORDERS_1, FUNCT_1, RLVECT_1, RLVECT_2,
      FUNCOP_1, SEQM_3, ALGSEQ_1, BOOLE, PBOOLE, ORDINAL1, CARD_1, CARD_3,
      FINSET_1, FINSUB_1, NORMSP_1, POLYNOM1, FINSEQ_1, FINSEQ_2, GRAPH_2,
      WAYBEL_4, WELLFND1, FUNCT_4, WELLORD2, TRIANG_1, SQUARE_1, ORDERS_2,
      FINSEQ_4, PROB_1, FUNCT_2, RFINSEQ, PARTFUN1;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, STRUCT_0, RELAT_1, RELAT_2,
      RELSET_1, FINSET_1, FINSUB_1, CQC_LANG, ORDINAL1, MCART_1, WELLORD1,
      ORDERS_1, ORDERS_2, WELLFND1, NUMBERS, XREAL_0, REAL_1, NAT_1, FUNCT_1,
      SEQM_3, WAYBEL_0, CARD_1, NORMSP_1, PBOOLE, PRALG_1, CARD_3, DICKSON,
      BINARITH, FINSEQ_1, WSIERP_1, POLYNOM1, RVSUM_1, PRE_CIRC, YELLOW_1,
      WAYBEL_4, PARTFUN1, FUNCT_2, FUNCT_4, TRIANG_1, POLYNOM2, FINSEQ_4,
      CQC_SIM1, DOMAIN_1, FINSEQOP, RFINSEQ;
 constructors WELLFND1, PRE_CIRC, REAL_1, FINSEQOP, DOMAIN_1, BINARITH,
      DICKSON, WSIERP_1, WAYBEL_4, TRIANG_1, POLYNOM2, ORDERS_2, CQC_SIM1;
 clusters DICKSON, YELLOW_1, ORDERS_1, CARD_1, POLYNOM1, BINARITH, STRUCT_0,
      RELSET_1, SUBSET_1, WAYBEL_0, FINSET_1, FINSUB_1, CARD_5, CQC_LANG,
      ORDINAL1, FUNCT_1, FINSEQ_1, XREAL_0, MEMBERED, RELAT_1, FUNCT_2,
      NUMBERS, ORDINAL2;
 requirements SUBSET, NUMERALS, REAL, BOOLE, ARITHM;


begin :: Preliminaries

theorem :: BAGORDER:1
for x,y,z being set st z in x & z in y holds x \ {z} = y \ {z} iff x = y;

theorem :: BAGORDER:2
  for n, k being Nat holds k in Seg n iff k-1 is Nat & k-1 < n;

definition
  let f be natural-yielding Function, X be set;
  cluster f|X -> natural-yielding;
end;

definition
  let f be finite-support Function, X be set;
  cluster f|X -> finite-support;
end;

theorem :: BAGORDER:3
for f being Function, x being set st x in dom f holds f*<*x*> = <*f.x*>;

theorem :: BAGORDER:4
for f, g, h being Function
 st dom f = dom g & rng f c= dom h & rng g c= dom h &
    f, g are_fiberwise_equipotent
  holds h*f, h*g are_fiberwise_equipotent;

theorem :: BAGORDER:5
for fs being FinSequence of NAT holds Sum fs = 0 iff fs = (len fs) |-> 0;

definition
  let n,i,j be Nat, b be ManySortedSet of n;
  func (i,j)-cut b -> ManySortedSet of j-'i means
:: BAGORDER:def 1
    for k being Nat st k in j-'i holds it.k = b.(i+k);
end;

definition
  let n,i,j be Nat, b be natural-yielding ManySortedSet of n;
  cluster (i,j)-cut b -> natural-yielding;
end;

definition
  let n,i,j be Nat, b be finite-support ManySortedSet of n;
  cluster (i,j)-cut b -> finite-support;
end;

theorem :: BAGORDER:6
  for n,i being Nat, a,b being ManySortedSet of n holds
      a = b iff ((0,i+1)-cut a = (0,i+1)-cut b &
                 (i+1,n)-cut a = (i+1,n)-cut b);

definition
  let x be non empty set, n be non empty Nat;
  func Fin (x,n) equals
:: BAGORDER:def 2
    {y where y is Element of bool x : y is finite & y is non empty &
                                      Card y <=` n};
end;

definition
  let x be non empty set, n be non empty Nat;
  cluster Fin (x,n) -> non empty;
end;

theorem :: BAGORDER:7
for R being antisymmetric transitive non empty RelStr,
    X being finite Subset of R
 st X <> {} holds
  ex x being Element of R st x in X & x is_maximal_wrt X, the InternalRel of R;

theorem :: BAGORDER:8
for R being antisymmetric transitive non empty RelStr,
    X being finite Subset of R
 st X <> {} holds
  ex x being Element of R st x in X & x is_minimal_wrt X, the InternalRel of R;

theorem :: BAGORDER:9
  for R being non empty antisymmetric transitive RelStr, f being sequence of R
 st f is descending
  holds for j, i being Nat st i<j
          holds f.i<>f.j & [f.j,f.i] in the InternalRel of R;

definition
  let R be non empty RelStr, s be sequence of R;
  attr s is non-increasing means
:: BAGORDER:def 3
  for i being Nat holds [s.(i+1),s.i] in the InternalRel of R;
end;

theorem :: BAGORDER:10
for R being non empty transitive RelStr, f being sequence of R
 st f is non-increasing
  holds for j, i being Nat st i<j holds [f.j,f.i] in the InternalRel of R;

theorem :: BAGORDER:11
for R being non empty transitive RelStr, s being sequence of R
 st R is well_founded & s is non-increasing
  holds ex p being Nat st for r being Nat st p <= r holds s.p = s.r;

theorem :: BAGORDER:12
for X being set, a be Element of X, A being finite Subset of X,
    R being Order of X st A = {a} & R linearly_orders A
  holds SgmX (R, A) = <*a*>;

begin :: More about bags

definition
  let n be Ordinal, b be bag of n;
func TotDegree b -> Nat means
:: BAGORDER:def 4
ex f being FinSequence of NAT
 st it = Sum f & f = b*SgmX(RelIncl n, support b);
end;

theorem :: BAGORDER:13
for n being Ordinal, b being bag of n, s being finite Subset of n,
    f, g being FinSequence of NAT
 st f = b*SgmX(RelIncl n, support b) & g = b*SgmX(RelIncl n, support b \/ s)
  holds Sum f = Sum g;

theorem :: BAGORDER:14
for n being Ordinal, a, b being bag of n
  holds TotDegree (a+b) = TotDegree a + TotDegree b;

theorem :: BAGORDER:15
  for n be Ordinal, a,b being bag of n
 st b divides a holds TotDegree(a-'b) = TotDegree(a) - TotDegree(b);

theorem :: BAGORDER:16
for n being Ordinal, b being bag of n holds TotDegree b = 0 iff b = EmptyBag n;

theorem :: BAGORDER:17
for i,j,n being Nat holds (i,j)-cut EmptyBag n = EmptyBag (j-'i);

theorem :: BAGORDER:18
for i,j,n being Nat, a,b being bag of n
 holds (i,j)-cut (a+b) = (i,j)-cut(a) + (i,j)-cut(b);

theorem :: BAGORDER:19
  for X being set holds support EmptyBag X = {};

theorem :: BAGORDER:20
for X being set, b be bag of X st support b = {} holds b = EmptyBag X;

theorem :: BAGORDER:21
for n, m being Ordinal, b being bag of n st m in n holds b|m is bag of m;

theorem :: BAGORDER:22
  for n being Ordinal, a, b being bag of n
 st b divides a holds support b c= support a;

begin :: Some Special Orders (Section 4.4)

definition
  let n be set;
  mode TermOrder of n is Order of Bags n;
  canceled;
end;

definition
  let n be Ordinal;
  redefine func BagOrder n;
  synonym LexOrder n;
  canceled;
end;

definition :: Definition 4.59 - admissible (specific for Bags)
  let n be Ordinal, T be TermOrder of n;
  attr T is admissible means
:: BAGORDER:def 7
  T is_strongly_connected_in Bags n &
  (for a being bag of n holds [EmptyBag n, a] in T) &
  for a, b, c being bag of n st [a, b] in T holds [a+c, b+c] in T;
end;

theorem :: BAGORDER:23  :: 4.61 i) Lexicographical order is admissible
for n being Ordinal holds LexOrder n is admissible;

definition
  let n be Ordinal;
  cluster admissible TermOrder of n;
end;

definition
  let n be Ordinal;
  cluster LexOrder n -> admissible;
end;

theorem :: BAGORDER:24
  for o being infinite Ordinal holds LexOrder o is non well-ordering;

definition
  let n be Ordinal;
  func InvLexOrder n -> TermOrder of n means
:: BAGORDER:def 8
  for p,q being bag of n holds [p,q] in it iff
      p = q or
      ex i being Ordinal st i in n & p.i < q.i &
       for k being Ordinal st i in k & k in n holds p.k = q.k;
end;

theorem :: BAGORDER:25  :: Ex 4.61 ii
for n being Ordinal holds InvLexOrder n is admissible;

definition
  let n be Ordinal;
  cluster InvLexOrder n -> admissible;
end;

theorem :: BAGORDER:26
for o being Ordinal holds InvLexOrder o is well-ordering;

definition
   let n be Ordinal, o be TermOrder of n such that
 for a,b,c being bag of n st [a,b] in o holds [a+c, b+c] in o;
   func Graded o -> TermOrder of n means
:: BAGORDER:def 9
       for a, b being bag of n holds [a,b] in it iff
        ((TotDegree a < TotDegree b) or
         (TotDegree a = TotDegree b & [a,b] in o));
end;

theorem :: BAGORDER:27  :: Exercise 4.61: iiia
for n being Ordinal, o being TermOrder of n
 st (for a,b,c being bag of n st [a,b] in o
          holds [a+c, b+c] in o) & o is_strongly_connected_in Bags n
  holds Graded o is admissible;

definition
  let n be Ordinal;
  func GrLexOrder n -> TermOrder of n equals
:: BAGORDER:def 10
    Graded LexOrder n;
  func GrInvLexOrder n -> TermOrder of n equals
:: BAGORDER:def 11         :: Ex 4.61: iiic
    Graded InvLexOrder n;
end;

theorem :: BAGORDER:28
                                           :: Ex 4.61: iiib
for n being Ordinal holds GrLexOrder n is admissible;

definition
  let n be Ordinal;
  cluster GrLexOrder n -> admissible;
end;

theorem :: BAGORDER:29
  for o being infinite Ordinal holds GrLexOrder o is non well-ordering;

theorem :: BAGORDER:30
for n being Ordinal holds GrInvLexOrder n is admissible;

definition
  let n be Ordinal;
  cluster GrInvLexOrder n -> admissible;
end;

theorem :: BAGORDER:31
  for o being Ordinal holds GrInvLexOrder o is well-ordering;

definition
  let i,n be Nat, o1 be TermOrder of (i+1), o2 be TermOrder of (n-'(i+1));
  func BlockOrder(i,n,o1,o2) -> TermOrder of n means
:: BAGORDER:def 12
   for p,q being bag of n holds [p,q] in it iff
     ((0,i+1)-cut p <> (0,i+1)-cut q & [(0,i+1)-cut p,(0,i+1)-cut q] in o1) or
     ((0,i+1)-cut p = (0,i+1)-cut q & [(i+1,n)-cut p,(i+1,n)-cut q] in o2);
end;

theorem :: BAGORDER:32 ::E_4_61_iv:  :: Exercise 4.61: iv
  for i,n being Nat, o1 being TermOrder of (i+1),o2 being TermOrder of (n-'(i+1
)
)
 st o1 is admissible & o2 is admissible
  holds BlockOrder(i,n,o1,o2) is admissible;

definition
  let n be Nat;
  func NaivelyOrderedBags n -> strict RelStr means
:: BAGORDER:def 13
     the carrier of it = Bags n &
   for x,y being bag of n holds [x,y] in the InternalRel of it iff x divides y;
end;

theorem :: BAGORDER:33
for n being Nat holds the carrier of product(n --> OrderedNAT) = Bags n;

theorem :: BAGORDER:34
for n being Nat holds NaivelyOrderedBags n = product (n --> OrderedNAT);

theorem :: BAGORDER:35 ::T_4_62: :: Theorem 4.62
  for n being Nat, o be TermOrder of n
 st o is admissible
  holds the InternalRel of NaivelyOrderedBags n c= o & o is well-ordering;

begin :: Ordering of finite subsets

definition
  let R be connected (non empty Poset),
      X be Element of Fin the carrier of R such that
 X is non empty;
  func PosetMin X -> Element of R means
:: BAGORDER:def 14 :: FPOSMIN :
      it in X & it is_minimal_wrt X, the InternalRel of R;
  func PosetMax X -> Element of R means
:: BAGORDER:def 15
    it in X & it is_maximal_wrt X, the InternalRel of R;
end;

definition
  let R be connected (non empty Poset);
  func FinOrd-Approx R ->
           Function of NAT, bool[: Fin the carrier of R, Fin the carrier of R:]
    means
:: BAGORDER:def 16
  dom it = NAT &
  it.0 = {[x,y] where x, y is Element of Fin the carrier of R :
         x = {} or (x<>{} & y <> {} & PosetMax x <> PosetMax y &
                    [PosetMax x,PosetMax y] in the InternalRel of R)} &
  for n being Element of NAT holds
     it.(n+1) = {[x,y] where x,y is Element of Fin the carrier of R :
         x <> {} & y <> {} &
         PosetMax x = PosetMax y & [x \{PosetMax x}, y \{PosetMax y}] in it.n};
end;

theorem :: BAGORDER:36
for R being connected (non empty Poset),
    x,y being Element of Fin the carrier of R
  holds [x,y] in union rng FinOrd-Approx R iff
         x = {} or
         x<>{} & y<>{} & PosetMax x <> PosetMax y &
          [PosetMax x,PosetMax y] in the InternalRel of R or
         x<>{} & y<>{} & PosetMax x = PosetMax y &
          [x\{PosetMax x},y\{PosetMax y}] in union rng FinOrd-Approx R;

theorem :: BAGORDER:37
for R being connected (non empty Poset),
    x being Element of Fin the carrier of R
 st x <> {} holds not [x,{}] in union rng FinOrd-Approx R;

theorem :: BAGORDER:38
for R being connected (non empty Poset),
    a being Element of Fin the carrier of R
 holds a\{PosetMax a} is Element of Fin the carrier of R;

theorem :: BAGORDER:39
for R being connected (non empty Poset)
  holds union (rng FinOrd-Approx R) is Order of Fin the carrier of R;

definition
  let R be connected (non empty Poset);
  func FinOrd R -> Order of Fin (the carrier of R) equals
:: BAGORDER:def 17
       union rng FinOrd-Approx R;
end;

definition
  let R be connected (non empty Poset);
  func FinPoset R -> Poset equals
:: BAGORDER:def 18
     RelStr (# Fin the carrier of R, FinOrd R #);
end;

definition
  let R be connected (non empty Poset);
  cluster FinPoset R -> non empty;
end;

theorem :: BAGORDER:40
for R being connected (non empty Poset),a,b being Element of FinPoset R
  holds [a,b] in the InternalRel of FinPoset R iff
        ex x,y being Element of Fin the carrier of R st
           a = x & b = y &
           (x = {} or
            x<>{} & y<>{} & PosetMax x <> PosetMax y &
             [PosetMax x,PosetMax y] in the InternalRel of R or
            x<>{} & y<>{} & PosetMax x = PosetMax y &
             [x\{PosetMax x},y\{PosetMax y}] in FinOrd R);

definition
  let R be connected (non empty Poset);
  cluster FinPoset R -> connected;
end;

definition
   let R be connected (non empty RelStr), C be non empty set such that
 R is well_founded and
 C c= the carrier of R;
  func MinElement (C,R)-> Element of R means
:: BAGORDER:def 19
   it in C & it is_minimal_wrt C, the InternalRel of R;
end;

definition
  let R  be non empty RelStr, s be sequence of R, j  be Nat;
  func SeqShift (s, j) -> sequence of R means
:: BAGORDER:def 20
    for i being Nat holds it.i = s.(i+j);
end;

theorem :: BAGORDER:41
for R being non empty RelStr, s being sequence of R, j being Nat
 st s is descending holds SeqShift(s, j) is descending;

theorem :: BAGORDER:42 :: Theorem 4:69
  for R being connected (non empty Poset)
  st R is well_founded holds FinPoset R is well_founded;


Back to top