Step
*
1
of Lemma
list_accum-set-equal-idemp
1. T : Type
2. eq : EqDecider(T)
3. A : Type
4. g : T ⟶ A
5. f : A ⟶ A ⟶ A
6. Comm(A;λx,y. f[x;y])
7. Assoc(A;λx,y. f[x;y])
8. ∀x:A. (f[x;x] = x ∈ A)
9. ∀[as:T List]. ∀[n:A].
     (accumulate (with value a and list item z):
       f[a;g[z]]
      over list:
        as
      with starting value:
       n)
     = accumulate (with value a and list item z):
        f[a;g[z]]
       over list:
         remove-repeats(eq;as)
       with starting value:
        n)
     ∈ A)
10. as : T List
11. bs : T List
12. set-equal(T;as;bs)
13. n : A
⊢ accumulate (with value a and list item z):
   f[a;g[z]]
  over list:
    as
  with starting value:
   n)
= accumulate (with value a and list item z):
   f[a;g[z]]
  over list:
    bs
  with starting value:
   n)
∈ A
BY
{ (RWO "9" 0
   THEN Auto
   THEN (InstLemma `list_accum_set-equal` [⌜T⌝;⌜A⌝;⌜g⌝;⌜f⌝]⋅ THENA Auto)
   THEN BHyp -1 
   THEN Auto
   THEN Try ((BLemma `remove-repeats_property` THEN Auto))) }
1
1. T : Type
2. eq : EqDecider(T)
3. A : Type
4. g : T ⟶ A
5. f : A ⟶ A ⟶ A
6. Comm(A;λx,y. f[x;y])
7. Assoc(A;λx,y. f[x;y])
8. ∀x:A. (f[x;x] = x ∈ A)
9. ∀[as:T List]. ∀[n:A].
     (accumulate (with value a and list item z):
       f[a;g[z]]
      over list:
        as
      with starting value:
       n)
     = accumulate (with value a and list item z):
        f[a;g[z]]
       over list:
         remove-repeats(eq;as)
       with starting value:
        n)
     ∈ A)
10. as : T List
11. bs : T List
12. set-equal(T;as;bs)
13. n : A
14. ∀[as,bs:T List].
      (∀[n:A]
         (accumulate (with value a and list item z):
           f[a;g[z]]
          over list:
            as
          with starting value:
           n)
         = accumulate (with value a and list item z):
            f[a;g[z]]
           over list:
             bs
           with starting value:
            n)
         ∈ A)) supposing 
         (no_repeats(T;bs) and 
         no_repeats(T;as) and 
         set-equal(T;as;bs))
⊢ set-equal(T;remove-repeats(eq;as);remove-repeats(eq;bs))
Latex:
Latex:
1.  T  :  Type
2.  eq  :  EqDecider(T)
3.  A  :  Type
4.  g  :  T  {}\mrightarrow{}  A
5.  f  :  A  {}\mrightarrow{}  A  {}\mrightarrow{}  A
6.  Comm(A;\mlambda{}x,y.  f[x;y])
7.  Assoc(A;\mlambda{}x,y.  f[x;y])
8.  \mforall{}x:A.  (f[x;x]  =  x)
9.  \mforall{}[as:T  List].  \mforall{}[n:A].
          (accumulate  (with  value  a  and  list  item  z):
              f[a;g[z]]
            over  list:
                as
            with  starting  value:
              n)
          =  accumulate  (with  value  a  and  list  item  z):
                f[a;g[z]]
              over  list:
                  remove-repeats(eq;as)
              with  starting  value:
                n))
10.  as  :  T  List
11.  bs  :  T  List
12.  set-equal(T;as;bs)
13.  n  :  A
\mvdash{}  accumulate  (with  value  a  and  list  item  z):
      f[a;g[z]]
    over  list:
        as
    with  starting  value:
      n)
=  accumulate  (with  value  a  and  list  item  z):
      f[a;g[z]]
    over  list:
        bs
    with  starting  value:
      n)
By
Latex:
(RWO  "9"  0
  THEN  Auto
  THEN  (InstLemma  `list\_accum\_set-equal`  [\mkleeneopen{}T\mkleeneclose{};\mkleeneopen{}A\mkleeneclose{};\mkleeneopen{}g\mkleeneclose{};\mkleeneopen{}f\mkleeneclose{}]\mcdot{}  THENA  Auto)
  THEN  BHyp  -1 
  THEN  Auto
  THEN  Try  ((BLemma  `remove-repeats\_property`  THEN  Auto)))
Home
Index