Step * 1 2 of Lemma mrecind_wf


1. MutualRectypeSpec
2. mobj(L) ⟶ ℙ
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl {lbl:Atom| 0 < ||mrec-spec(L;lbl;k)||} 
6. (Atom Atom Type) List
7. mrec-spec(L;lbl;k) v ∈ ((Atom Atom Type) List)
8. 0 < ||v||
9. tuple-type(map(λx.case x
                          of inl(y) =>
                          case y
                           of inl(p) =>
                           prec(lbl,p.mrec-spec(L;lbl;p);p)
                           inr(p) =>
                           prec(lbl,p.mrec-spec(L;lbl;p);p) List
                          inr(E) =>
                          E;v))
10. : ℕ||v||
11. Atom Atom
12. v[j] (inl x) ∈ (Atom Atom Type)
13. Atom
14. (inr ) ∈ (Atom Atom)
⊢ (∀u∈t.j.P[<y, u>]) ∈ ℙ
BY
((GenConclTerm ⌜t.j⌝⋅ THENA (MemCD THEN Try (RWO "map-length" 0) THEN Auto))
   THEN Thin (-1)
   THEN (RWO "select-map" (-1) THENA Auto)
   THEN Reduce -1
   THEN Fold `mrec` (-1)
   THEN (GenConcl ⌜v1 X ∈ (mrec(L;y) List)⌝⋅ THENM Auto)
   THEN InferEqualType
   THEN Auto
   THEN ((RWO "-4" THEN Auto) THEN Reduce 0)
   THEN RWO "-2" 0
   THEN Auto) }


Latex:


Latex:

1.  L  :  MutualRectypeSpec
2.  P  :  mobj(L)  {}\mrightarrow{}  \mBbbP{}
3.  k  :  Atom
4.  (k  \mmember{}  eager-map(\mlambda{}p.(fst(p));L))
5.  lbl  :  \{lbl:Atom|  0  <  ||mrec-spec(L;lbl;k)||\} 
6.  v  :  (Atom  +  Atom  +  Type)  List
7.  mrec-spec(L;lbl;k)  =  v
8.  0  <  ||v||
9.  t  :  tuple-type(map(\mlambda{}x.case  x
                                                    of  inl(y)  =>
                                                    case  y
                                                      of  inl(p)  =>
                                                      prec(lbl,p.mrec-spec(L;lbl;p);p)
                                                      |  inr(p)  =>
                                                      prec(lbl,p.mrec-spec(L;lbl;p);p)  List
                                                    |  inr(E)  =>
                                                    E;v))
10.  j  :  \mBbbN{}||v||
11.  x  :  Atom  +  Atom
12.  v[j]  =  (inl  x)
13.  y  :  Atom
14.  x  =  (inr  y  )
\mvdash{}  (\mforall{}u\mmember{}t.j.P[<y,  u>])  \mmember{}  \mBbbP{}


By


Latex:
((GenConclTerm  \mkleeneopen{}t.j\mkleeneclose{}\mcdot{}  THENA  (MemCD  THEN  Try  (RWO  "map-length"  0)  THEN  Auto))
  THEN  Thin  (-1)
  THEN  (RWO  "select-map"  (-1)  THENA  Auto)
  THEN  Reduce  -1
  THEN  Fold  `mrec`  (-1)
  THEN  (GenConcl  \mkleeneopen{}v1  =  X\mkleeneclose{}\mcdot{}  THENM  Auto)
  THEN  InferEqualType
  THEN  Auto
  THEN  ((RWO  "-4"  0  THEN  Auto)  THEN  Reduce  0)
  THEN  RWO  "-2"  0
  THEN  Auto)




Home Index