Step * 2 1 1 of Lemma prec-ext


1. Type
2. Atom ⟶ P ⟶ ((P Type) List)
3. P
4. 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]))
5. 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]))
6. pcorec(lbl,p.a[lbl;p]) i ≡ ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p])) i
⊢ x ∈ pcorec(lbl,p.a[lbl;p]) i
BY
(D -1
   THEN SubsumeC ⌜ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p])) i⌝⋅
   THEN Try (Trivial)
   THEN RepUR ``ptuple`` 0
   THEN DVar `x'
   THEN (MemCD THENA Auto)
   THEN Try (Trivial)
   THEN DoSubsume
   THEN Try (Trivial)
   THEN BLemma `subtype_rel_tuple-type`
   THEN Auto
   THEN (RWO  "map-length" (-1) THENA Auto)
   THEN (RWO  "select-map" THENA Auto)
   THEN Reduce 0
   THEN (GenConclTerm ⌜a[labl;i][i1]⌝⋅ THENA Auto)
   THEN Thin (-1)
   THEN DProdsAndUnions
   THEN Reduce 0
   THEN Auto) }


Latex:


Latex:

1.  P  :  Type
2.  a  :  Atom  {}\mrightarrow{}  P  {}\mrightarrow{}  ((P  +  P  +  Type)  List)
3.  i  :  P
4.  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]))
5.  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]))
6.  pcorec(lbl,p.a[lbl;p])  i  \mequiv{}  ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p]))  i
\mvdash{}  x  \mmember{}  pcorec(lbl,p.a[lbl;p])  i


By


Latex:
(D  -1
  THEN  SubsumeC  \mkleeneopen{}ptuple(lbl,p.a[lbl;p];pcorec(lbl,p.a[lbl;p]))  i\mkleeneclose{}\mcdot{}
  THEN  Try  (Trivial)
  THEN  RepUR  ``ptuple``  0
  THEN  DVar  `x'
  THEN  (MemCD  THENA  Auto)
  THEN  Try  (Trivial)
  THEN  DoSubsume
  THEN  Try  (Trivial)
  THEN  BLemma  `subtype\_rel\_tuple-type`
  THEN  Auto
  THEN  (RWO    "map-length"  (-1)  THENA  Auto)
  THEN  (RWO    "select-map"  0  THENA  Auto)
  THEN  Reduce  0
  THEN  (GenConclTerm  \mkleeneopen{}a[labl;i][i1]\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  Thin  (-1)
  THEN  DProdsAndUnions
  THEN  Reduce  0
  THEN  Auto)




Home Index