Step * of Lemma prec-size-unfold

[P:Type]. ∀[a:Atom ⟶ P ⟶ ((P Type) List)]. ∀[i:P]. ∀[x:prec(lbl,p.a[lbl;p];i)].
  (||i;x||
  let lbl,z 
    in 1
       tuple-sum(λc,x. case c
                         of inl(p) =>
                         case of inl(j) => ||j;x|| inr(j) => l_sum(map(λz.||j;z||;x))
                         inr(_) =>
                         0;a[lbl;i];z)
  ∈ ℤ)
BY
(InstLemma `prec-ext` []
   THEN RepeatFor (ParallelLast')
   THEN (D THENA Auto)
   THEN -2
   THEN (GenConcl ⌜x
                   t
                   ∈ (labl:{lbl:Atom| 0 < ||a[lbl;i]||}  × tuple-type(map(λx.case x
                                                                       of inl(y) =>
                                                                       case y
                                                                        of inl(p) =>
                                                                        prec(lbl,p.a[lbl;p];p)
                                                                        inr(p) =>
                                                                        prec(lbl,p.a[lbl;p];p) List
                                                                       inr(E) =>
                                                                       E;a[labl;i])))⌝⋅
         THENA Auto
         )
   THEN -2
   THEN Reduce 0
   THEN Unfold `prec-size` 0
   THEN RepeatFor (Thin 4)
   THEN ThinVar `x'
   THEN ((RW (AddrC [2;1;1] (LemmaC `unroll-pcorec-size`)) 0 ⋅ THENA Auto) THEN Reduce 0)
   THEN MoveToConcl (-1)
   THEN (GenConclTerm ⌜a[labl;i]⌝⋅ THENA Auto)
   THEN ((Unfold `add-sz` THEN Fold `prec-size` 0) ORELSE Auto)
   THEN (D THENA Auto)
   THEN RepeatFor (EqCDA)
   THEN (DVar `c' THEN Try (DVar `x'))
   THEN All Reduce
   THEN ((Fold `member` THEN Auto)
   ORELSE ((Assert 0 ≤ l_sum(map(λz.||y;z||;u)) BY
                  (BLemma `l_sum_nonneg`
                   THEN Auto
                   THEN (D THENA Auto)
                   THEN (RWO "map-length" (-1) THENA Auto)
                   THEN RWO "select-map" 0
                   THEN Auto))
           THEN (Symmetry THEN EqTypeCD)
           THEN Try (EqCDA)
           THEN Auto)
   )) }

1
.....subterm..... T:t
1:n
1. Type
2. Atom ⟶ P ⟶ ((P Type) List)
3. P
4. labl {lbl:Atom| 0 < ||a[lbl;i]||} 
5. (P Type) List
6. a[labl;i] v ∈ ((P Type) List)
7. t1 tuple-type(map(λx.case x
                           of inl(y) =>
                           case of inl(p) => prec(lbl,p.a[lbl;p];p) inr(p) => prec(lbl,p.a[lbl;p];p) List
                           inr(E) =>
                           E;v))
8. P
9. prec(lbl,p.a[lbl;p];y) List
10. 0 ≤ l_sum(map(λz.||y;z||;u))
⊢ map(λz.||y;z||;u) map(pcorec-size(lbl,p.a[lbl;p]) y;u) ∈ (ℤ List)


Latex:


Latex:
\mforall{}[P:Type].  \mforall{}[a:Atom  {}\mrightarrow{}  P  {}\mrightarrow{}  ((P  +  P  +  Type)  List)].  \mforall{}[i:P].  \mforall{}[x:prec(lbl,p.a[lbl;p];i)].
    (||i;x||
    =  let  lbl,z  =  x 
        in  1
              +  tuple-sum(\mlambda{}c,x.  case  c
                                                  of  inl(p)  =>
                                                  case  p  of  inl(j)  =>  ||j;x||  |  inr(j)  =>  l\_sum(map(\mlambda{}z.||j;z||;x))
                                                  |  inr($_{}$)  =>
                                                  0;a[lbl;i];z))


By


Latex:
(InstLemma  `prec-ext`  []
  THEN  RepeatFor  3  (ParallelLast')
  THEN  (D  0  THENA  Auto)
  THEN  D  -2
  THEN  (GenConcl  \mkleeneopen{}x  =  t\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  D  -2
  THEN  Reduce  0
  THEN  Unfold  `prec-size`  0
  THEN  RepeatFor  2  (Thin  4)
  THEN  ThinVar  `x'
  THEN  ((RW  (AddrC  [2;1;1]  (LemmaC  `unroll-pcorec-size`))  0  \mcdot{}  THENA  Auto)  THEN  Reduce  0)
  THEN  MoveToConcl  (-1)
  THEN  (GenConclTerm  \mkleeneopen{}a[labl;i]\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  ((Unfold  `add-sz`  0  THEN  Fold  `prec-size`  0)  ORELSE  Auto)
  THEN  (D  0  THENA  Auto)
  THEN  RepeatFor  4  (EqCDA)
  THEN  (DVar  `c'  THEN  Try  (DVar  `x'))
  THEN  All  Reduce
  THEN  ((Fold  `member`  0  THEN  Auto)
  ORELSE  ((Assert  0  \mleq{}  l\_sum(map(\mlambda{}z.||y;z||;u))  BY
                                (BLemma  `l\_sum\_nonneg`
                                  THEN  Auto
                                  THEN  (D  0  THENA  Auto)
                                  THEN  (RWO  "map-length"  (-1)  THENA  Auto)
                                  THEN  RWO  "select-map"  0
                                  THEN  Auto))
                  THEN  (Symmetry  THEN  EqTypeCD)
                  THEN  Try  (EqCDA)
                  THEN  Auto)
  ))




Home Index