Step * 1 of Lemma list-max-map

.....assertion..... 
1. Type
2. Type
3. A ⟶ T
4. T ⟶ ℤ
5. List
6. 0 < ||L||
⊢ list-max(x.f[x];map(g;L)) ((λp.<fst(p), (snd(p))>list-max(x.f[g x];L)) ∈ (i:ℤ × T)
BY
(Unfold `list-max` 0
   THEN Unfold `list-max-aux` 0
   THEN (RWO "list_accum-map" THENA Auto)
   THEN DVar `L'
   THEN Reduce (-1)
   THEN Try (Complete (Auto))
   THEN Thin (-1)
   THEN Reduce 0
   THEN (CallByValueReduceOn ⌜f[g u]⌝ 0⋅ THENA Auto)
   THEN (Subst' inl <f[g u], u> p.(inl <fst(outl(p)), (snd(outl(p)))>)) (inl <f[g u], u>0⋅ THENA (Reduce THE\000CN Trivial))
   THEN (GenConcl ⌜(inl <f[g u], u>Z ∈ {x:ℤ × Top| ↑isl(x)} ⌝⋅ THENA Auto)⋅
   THEN (Thin (-1) THEN MoveToConcl (-1) THEN ListInd (-1) THEN Reduce THEN Auto)⋅}

1
1. Type
2. Type
3. A ⟶ T
4. T ⟶ ℤ
5. A
6. u1 A
7. List
8. ∀Z:{x:ℤ × Top| ↑isl(x)} 
     (outl(accumulate (with value and list item x):
            eval f[g x] in
            case of inl(p) => if fst(p) <then inl <n, x> else fi  inr(q) => inl <n, x>
           over list:
             v
           with starting value:
            p.(inl <fst(outl(p)), (snd(outl(p)))>)) Z))
     = <fst(outl(accumulate (with value and list item x):
                  eval f[g x] in
                  case of inl(p) => if fst(p) <then inl <n, x> else fi  inr(q) => inl <n, x>
                 over list:
                   v
                 with starting value:
                  Z)))
       
         (snd(outl(accumulate (with value and list item x):
                    eval f[g x] in
                    case of inl(p) => if fst(p) <then inl <n, x> else fi  inr(q) => inl <n, x>
                   over list:
                     v
                   with starting value:
                    Z))))
       >
     ∈ (i:ℤ × T))
9. {x:ℤ × Top| ↑isl(x)} @i
⊢ outl(accumulate (with value and list item x):
        eval f[g x] in
        case of inl(p) => if fst(p) <then inl <n, x> else fi  inr(q) => inl <n, x>
       over list:
         v
       with starting value:
        eval f[g u1] in
        if fst(outl(Z)) <then inl <n, u1> else inl <fst(outl(Z)), (snd(outl(Z)))> fi ))
= <fst(outl(accumulate (with value and list item x):
             eval f[g x] in
             case of inl(p) => if fst(p) <then inl <n, x> else fi  inr(q) => inl <n, x>
            over list:
              v
            with starting value:
             eval f[g u1] in
             case of inl(p) => if fst(p) <then inl <n, u1> else fi  inr(q) => inl <n, u1>)))
  
    (snd(outl(accumulate (with value and list item x):
               eval f[g x] in
               case of inl(p) => if fst(p) <then inl <n, x> else fi  inr(q) => inl <n, x>
              over list:
                v
              with starting value:
               eval f[g u1] in
               case of inl(p) => if fst(p) <then inl <n, u1> else fi  inr(q) => inl <n, u1>))))
  >
∈ (i:ℤ × T)


Latex:


Latex:
.....assertion..... 
1.  T  :  Type
2.  A  :  Type
3.  g  :  A  {}\mrightarrow{}  T
4.  f  :  T  {}\mrightarrow{}  \mBbbZ{}
5.  L  :  A  List
6.  0  <  ||L||
\mvdash{}  list-max(x.f[x];map(g;L))  =  ((\mlambda{}p.<fst(p),  g  (snd(p))>)  list-max(x.f[g  x];L))


By


Latex:
(Unfold  `list-max`  0
  THEN  Unfold  `list-max-aux`  0
  THEN  (RWO  "list\_accum-map"  0  THENA  Auto)
  THEN  DVar  `L'
  THEN  Reduce  (-1)
  THEN  Try  (Complete  (Auto))
  THEN  Thin  (-1)
  THEN  Reduce  0
  THEN  (CallByValueReduceOn  \mkleeneopen{}f[g  u]\mkleeneclose{}  0\mcdot{}  THENA  Auto)
  THEN  (Subst'  inl  <f[g  u],  g  u>  \msim{}  (\mlambda{}p.(inl  <fst(outl(p)),  g  (snd(outl(p)))>))  (inl  <f[g  u],  u>)  0\mcdot{}  T\000CHENA  (Reduce  0  THEN  Trivial))
  THEN  (GenConcl  \mkleeneopen{}(inl  <f[g  u],  u>)  =  Z\mkleeneclose{}\mcdot{}  THENA  Auto)\mcdot{}
  THEN  (Thin  (-1)  THEN  MoveToConcl  (-1)  THEN  ListInd  (-1)  THEN  Reduce  0  THEN  Auto)\mcdot{})




Home Index