Step * 1 1 of Lemma istype-mrecind


1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl Atom
6. 0 < ||mrec-spec(L;lbl;k)||
7. (Atom Atom Type) List
8. mrec-spec(L;lbl;k) v ∈ ((Atom Atom Type) List)
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||
⊢ istype(case v[j] of inl(y) => case of inl(p) => P[<p, t.j>inr(p) => (∀u∈t.j.P[<p, u>]) inr(_) => True)
BY
((GenConclTerm ⌜v[j]⌝⋅ THENA Auto) THEN (D -2 THEN Try (DVar `x')) THEN Reduce 0) }

1
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl Atom
6. 0 < ||mrec-spec(L;lbl;k)||
7. (Atom Atom Type) List
8. mrec-spec(L;lbl;k) v ∈ ((Atom Atom Type) List)
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. x1 Atom
12. v[j] (inl inl x1) ∈ (Atom Atom Type)
⊢ istype(P[<x1, t.j>])

2
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl Atom
6. 0 < ||mrec-spec(L;lbl;k)||
7. (Atom Atom Type) List
8. mrec-spec(L;lbl;k) v ∈ ((Atom Atom Type) List)
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
12. v[j] (inl (inr )) ∈ (Atom Atom Type)
⊢ istype((∀u∈t.j.P[<y, u>]))

3
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl Atom
6. 0 < ||mrec-spec(L;lbl;k)||
7. (Atom Atom Type) List
8. mrec-spec(L;lbl;k) v ∈ ((Atom Atom Type) List)
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. Type
12. v[j] (inr ) ∈ (Atom Atom Type)
⊢ istype(True)


Latex:


Latex:

1.  L  :  MutualRectypeSpec
2.  P  :  mobj(L)  {}\mrightarrow{}  TYPE
3.  k  :  Atom
4.  (k  \mmember{}  eager-map(\mlambda{}p.(fst(p));L))
5.  lbl  :  Atom
6.  0  <  ||mrec-spec(L;lbl;k)||
7.  v  :  (Atom  +  Atom  +  Type)  List
8.  mrec-spec(L;lbl;k)  =  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||
\mvdash{}  istype(case  v[j]
  of  inl(y)  =>
  case  y  of  inl(p)  =>  P[<p,  t.j>]  |  inr(p)  =>  (\mforall{}u\mmember{}t.j.P[<p,  u>])
  |  inr($_{}$)  =>
  True)


By


Latex:
((GenConclTerm  \mkleeneopen{}v[j]\mkleeneclose{}\mcdot{}  THENA  Auto)  THEN  (D  -2  THEN  Try  (DVar  `x'))  THEN  Reduce  0)




Home Index