Step
*
1
2
1
2
1
of Lemma
prec-sub-size
1. P : Type
2. a : Atom ⟶ P ⟶ ((P + P + Type) List)
3. j : P
4. x : prec(lbl,p.a[lbl;p];j)
5. i : P
6. labl : {lbl:Atom| 0 < ||a[lbl;i]||} 
7. y1 : 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]))
8. k : ℕ||a[labl;i]||
9. (x ∈ y1.k)
10. y : P
11. a[labl;i][k] = (inl (inr y )) ∈ (P + P + Type)
12. True
13. y = j ∈ P
⊢ ||j;x|| ≤ l_sum(map(λz.||y;z||;y1.k))
BY
{ ((InstLemma `select-tuple_wf` [⌜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])⌝;⌜k⌝;⌜||a[labl;i]||⌝;⌜y1⌝]⋅
    THENA Auto
    )
   THEN (RWO "select-map" (-1) THENA Auto)
   THEN Reduce -1
   THEN (Assert y1.k ∈ prec(lbl,p.a[lbl;p];y) List BY
               (InferEqualType THEN HypSubst'  (-4) 0 THEN Auto))) }
1
1. P : Type
2. a : Atom ⟶ P ⟶ ((P + P + Type) List)
3. j : P
4. x : prec(lbl,p.a[lbl;p];j)
5. i : P
6. labl : {lbl:Atom| 0 < ||a[lbl;i]||} 
7. y1 : 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]))
8. k : ℕ||a[labl;i]||
9. (x ∈ y1.k)
10. y : P
11. a[labl;i][k] = (inl (inr y )) ∈ (P + P + Type)
12. True
13. y = j ∈ P
14. y1.k ∈ case a[labl;i][k]
     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
15. y1.k ∈ prec(lbl,p.a[lbl;p];y) List
⊢ ||j;x|| ≤ l_sum(map(λz.||y;z||;y1.k))
Latex:
Latex:
1.  P  :  Type
2.  a  :  Atom  {}\mrightarrow{}  P  {}\mrightarrow{}  ((P  +  P  +  Type)  List)
3.  j  :  P
4.  x  :  prec(lbl,p.a[lbl;p];j)
5.  i  :  P
6.  labl  :  \{lbl:Atom|  0  <  ||a[lbl;i]||\} 
7.  y1  :  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]))
8.  k  :  \mBbbN{}||a[labl;i]||
9.  (x  \mmember{}  y1.k)
10.  y  :  P
11.  a[labl;i][k]  =  (inl  (inr  y  ))
12.  True
13.  y  =  j
\mvdash{}  ||j;x||  \mleq{}  l\_sum(map(\mlambda{}z.||y;z||;y1.k))
By
Latex:
((InstLemma  `select-tuple\_wf`  [\mkleeneopen{}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])\mkleeneclose{};\mkleeneopen{}k\mkleeneclose{};\mkleeneopen{}||a[labl;i]||\mkleeneclose{};\mkleeneopen{}y1\mkleeneclose{}]\mcdot{}
    THENA  Auto
    )
  THEN  (RWO  "select-map"  (-1)  THENA  Auto)
  THEN  Reduce  -1
  THEN  (Assert  y1.k  \mmember{}  prec(lbl,p.a[lbl;p];y)  List  BY
                          (InferEqualType  THEN  HypSubst'    (-4)  0  THEN  Auto)))
Home
Index