Step
*
2
2
of Lemma
prec-ext
.....set predicate..... 
1. P : Type
2. a : Atom ⟶ P ⟶ ((P + P + Type) List)
3. pcorec(lbl,p.a[lbl;p]) ≡ ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p]))
4. i : P
5. pcorec(lbl,p.a[lbl;p]) i ≡ labl:{lbl:Atom| 0 < ||a[lbl;i]||}  × tuple-type(map(λx.case x
                                                     of inl(y) =>
                                                     case y
                                                      of inl(p) =>
                                                      pcorec(lbl,p.a[lbl;p]) p
                                                      | inr(p) =>
                                                      (pcorec(lbl,p.a[lbl;p]) p) List
                                                     | inr(E) =>
                                                     E;a[labl;i]))
6. x : 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]))
⊢ (pcorec-size(lbl,p.a[lbl;p]) i x)↓
BY
{ (D -1
   THEN (RWO "unroll-pcorec-size" 0 THENA Auto)
   THEN Reduce 0
   THEN MoveToConcl (-1)
   THEN (GenConclTerm ⌜a[labl;i]⌝⋅ THENA Auto)
   THEN Thin (-1)
   THEN ((ListInd (-1) THEN Reduce 0) THENL [Auto; (RWO "null-map" 0 THENA Auto)])
   THEN (SimpleBoolCase ⌜null(v)⌝⋅ THENA Auto)
   THEN (D 0 THENA Auto)
   THEN ((Unfold `add-sz` 0 THEN Reduce 0) THEN Unfold `tuple-sum` 0 THEN Reduce 0)
   THEN HypSubst' 10 0
   THEN Reduce 0) }
1
1. P : Type
2. a : Atom ⟶ P ⟶ ((P + P + Type) List)
3. pcorec(lbl,p.a[lbl;p]) ≡ ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p]))
4. i : P
5. pcorec(lbl,p.a[lbl;p]) i ≡ labl:{lbl:Atom| 0 < ||a[lbl;i]||}  × tuple-type(map(λx.case x
                                                     of inl(y) =>
                                                     case y
                                                      of inl(p) =>
                                                      pcorec(lbl,p.a[lbl;p]) p
                                                      | inr(p) =>
                                                      (pcorec(lbl,p.a[lbl;p]) p) List
                                                     | inr(E) =>
                                                     E;a[labl;i]))
6. labl : {lbl:Atom| 0 < ||a[lbl;i]||} 
7. u : P + P + Type
8. v : (P + P + Type) List
9. ∀x1: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;v))
     (1 + add-sz(pcorec-size(lbl,p.a[lbl;p]);v;x1))↓
10. null(v) = tt
11. x1 : case u
 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
⊢ (1
+ case u
   of inl(z) =>
   case z of inl(p) => pcorec-size(lbl,p.a[lbl;p]) p x1 | inr(p) => l_sum(map(pcorec-size(lbl,p.a[lbl;p]) p;x1))
   | inr(E) =>
   0)↓
2
1. P : Type
2. a : Atom ⟶ P ⟶ ((P + P + Type) List)
3. pcorec(lbl,p.a[lbl;p]) ≡ ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p]))
4. i : P
5. pcorec(lbl,p.a[lbl;p]) i ≡ labl:{lbl:Atom| 0 < ||a[lbl;i]||}  × tuple-type(map(λx.case x
                                                     of inl(y) =>
                                                     case y
                                                      of inl(p) =>
                                                      pcorec(lbl,p.a[lbl;p]) p
                                                      | inr(p) =>
                                                      (pcorec(lbl,p.a[lbl;p]) p) List
                                                     | inr(E) =>
                                                     E;a[labl;i]))
6. labl : {lbl:Atom| 0 < ||a[lbl;i]||} 
7. u : P + P + Type
8. v : (P + P + Type) List
9. ∀x1: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;v))
     (1 + add-sz(pcorec-size(lbl,p.a[lbl;p]);v;x1))↓
10. null(v) = ff
11. x1 : case u
 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 × 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;v))
⊢ (1
+ let u@0,v@0 = x1 
  in case u
      of inl(z) =>
      case z of inl(p) => pcorec-size(lbl,p.a[lbl;p]) p u@0 | inr(p) => l_sum(map(pcorec-size(lbl,p.a[lbl;p]) p;u@0))
      | inr(E) =>
      0
     + tuple-sum(λc,u. case c
                       of inl(z) =>
                       case z
                        of inl(p) =>
                        pcorec-size(lbl,p.a[lbl;p]) p u
                        | inr(p) =>
                        l_sum(map(pcorec-size(lbl,p.a[lbl;p]) p;u))
                       | inr(E) =>
                       0;v;v@0))↓
Latex:
Latex:
.....set  predicate..... 
1.  P  :  Type
2.  a  :  Atom  {}\mrightarrow{}  P  {}\mrightarrow{}  ((P  +  P  +  Type)  List)
3.  pcorec(lbl,p.a[lbl;p])  \mequiv{}  ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p]))
4.  i  :  P
5.  pcorec(lbl,p.a[lbl;p])  i  \mequiv{}  labl:\{lbl:Atom|  0  <  ||a[lbl;i]||\}    \mtimes{}  tuple-type(map(\mlambda{}x.case  x
                                                                                                          of  inl(y)  =>
                                                                                                          case  y
                                                                                                            of  inl(p)  =>
                                                                                                            pcorec(lbl,p.a[lbl;p])  p
                                                                                                            |  inr(p)  =>
                                                                                                            (pcorec(lbl,p.a[lbl;p])  p)  List
                                                                                                          |  inr(E)  =>
                                                                                                          E;a[labl;i]))
6.  x  :  labl:\{lbl:Atom|  0  <  ||a[lbl;i]||\}    \mtimes{}  tuple-type(map(\mlambda{}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]))
\mvdash{}  (pcorec-size(lbl,p.a[lbl;p])  i  x)\mdownarrow{}
By
Latex:
(D  -1
  THEN  (RWO  "unroll-pcorec-size"  0  THENA  Auto)
  THEN  Reduce  0
  THEN  MoveToConcl  (-1)
  THEN  (GenConclTerm  \mkleeneopen{}a[labl;i]\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  Thin  (-1)
  THEN  ((ListInd  (-1)  THEN  Reduce  0)  THENL  [Auto;  (RWO  "null-map"  0  THENA  Auto)])
  THEN  (SimpleBoolCase  \mkleeneopen{}null(v)\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  (D  0  THENA  Auto)
  THEN  ((Unfold  `add-sz`  0  THEN  Reduce  0)  THEN  Unfold  `tuple-sum`  0  THEN  Reduce  0)
  THEN  HypSubst'  10  0
  THEN  Reduce  0)
Home
Index