Step * 1 1 1 2 1 1 1 1 1 of Lemma mrec-induction2


1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl {lbl:Atom| 0 < ||mrec-spec(L;lbl;k)||} 
6. tuple-type(prec-arg-types(lbl,p.mrec-spec(L;lbl;p);k;lbl))
7. ∀z:{z:mobj(L)| z < <k, mk-prec(lbl;t)>P[z]
8. : ℕ||mrec-spec(L;lbl;k)||
9. Atom
10. mrec-spec(L;lbl;k)[j] (inl (inr )) ∈ (Atom Atom Type)
11. mrec-spec(L;lbl;k)[j] inl (inr )
12. t.j ∈ mrec(L;y) List
13. mrec(L;y)
14. (u ∈ t.j)
⊢ ∃k@0:ℕ||mrec-spec(L;lbl;k)||
   ((↑isl(mrec-spec(L;lbl;k)[k@0]))
   ∧ (((outl(mrec-spec(L;lbl;k)[k@0]) (inl y) ∈ (Atom Atom)) ∧ (u t.k@0 ∈ prec(lbl,i.mrec-spec(L;lbl;i);y)))
     ∨ ((outl(mrec-spec(L;lbl;k)[k@0]) (inr ) ∈ (Atom Atom)) ∧ (u ∈ t.k@0))))
BY
(D With ⌜j⌝ 
   THENL [Auto
         (HypSubst' (-4) THEN Reduce THEN Fold `mrec` THEN Auto)
         (RenameVar `i' (-1)
            THEN (GenConclTerm ⌜mrec-spec(L;lbl;k)[i]⌝⋅ THENA Auto)
            THEN Fold `mrec` 0
            THEN -2
            THEN Reduce 0
            THEN 0
            THEN Try (Trivial)
            THEN 0
            THEN 0)]
}

1
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl {lbl:Atom| 0 < ||mrec-spec(L;lbl;k)||} 
6. tuple-type(prec-arg-types(lbl,p.mrec-spec(L;lbl;p);k;lbl))
7. ∀z:{z:mobj(L)| z < <k, mk-prec(lbl;t)>P[z]
8. : ℕ||mrec-spec(L;lbl;k)||
9. Atom
10. mrec-spec(L;lbl;k)[j] (inl (inr )) ∈ (Atom Atom Type)
11. mrec-spec(L;lbl;k)[j] inl (inr )
12. t.j ∈ mrec(L;y) List
13. mrec(L;y)
14. (u ∈ t.j)
15. : ℕ||mrec-spec(L;lbl;k)||
16. Atom Atom
17. mrec-spec(L;lbl;k)[i] (inl x) ∈ (Atom Atom Type)
18. x1 True
⊢ istype(x (inl y) ∈ (Atom Atom))

2
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl {lbl:Atom| 0 < ||mrec-spec(L;lbl;k)||} 
6. tuple-type(prec-arg-types(lbl,p.mrec-spec(L;lbl;p);k;lbl))
7. ∀z:{z:mobj(L)| z < <k, mk-prec(lbl;t)>P[z]
8. : ℕ||mrec-spec(L;lbl;k)||
9. Atom
10. mrec-spec(L;lbl;k)[j] (inl (inr )) ∈ (Atom Atom Type)
11. mrec-spec(L;lbl;k)[j] inl (inr )
12. t.j ∈ mrec(L;y) List
13. mrec(L;y)
14. (u ∈ t.j)
15. : ℕ||mrec-spec(L;lbl;k)||
16. Atom Atom
17. mrec-spec(L;lbl;k)[i] (inl x) ∈ (Atom Atom Type)
18. x1 True
19. x2 (inl y) ∈ (Atom Atom)
⊢ istype(u t.i ∈ mrec(L;y))

3
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl {lbl:Atom| 0 < ||mrec-spec(L;lbl;k)||} 
6. tuple-type(prec-arg-types(lbl,p.mrec-spec(L;lbl;p);k;lbl))
7. ∀z:{z:mobj(L)| z < <k, mk-prec(lbl;t)>P[z]
8. : ℕ||mrec-spec(L;lbl;k)||
9. Atom
10. mrec-spec(L;lbl;k)[j] (inl (inr )) ∈ (Atom Atom Type)
11. mrec-spec(L;lbl;k)[j] inl (inr )
12. t.j ∈ mrec(L;y) List
13. mrec(L;y)
14. (u ∈ t.j)
15. : ℕ||mrec-spec(L;lbl;k)||
16. Atom Atom
17. mrec-spec(L;lbl;k)[i] (inl x) ∈ (Atom Atom Type)
18. x1 True
⊢ istype(x (inr ) ∈ (Atom Atom))

4
1. MutualRectypeSpec
2. mobj(L) ⟶ TYPE
3. Atom
4. (k ∈ eager-map(λp.(fst(p));L))
5. lbl {lbl:Atom| 0 < ||mrec-spec(L;lbl;k)||} 
6. tuple-type(prec-arg-types(lbl,p.mrec-spec(L;lbl;p);k;lbl))
7. ∀z:{z:mobj(L)| z < <k, mk-prec(lbl;t)>P[z]
8. : ℕ||mrec-spec(L;lbl;k)||
9. Atom
10. mrec-spec(L;lbl;k)[j] (inl (inr )) ∈ (Atom Atom Type)
11. mrec-spec(L;lbl;k)[j] inl (inr )
12. t.j ∈ mrec(L;y) List
13. mrec(L;y)
14. (u ∈ t.j)
15. : ℕ||mrec-spec(L;lbl;k)||
16. Atom Atom
17. mrec-spec(L;lbl;k)[i] (inl x) ∈ (Atom Atom Type)
18. x1 True
19. x2 (inr ) ∈ (Atom Atom)
⊢ istype((u ∈ t.i))


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  :  \{lbl:Atom|  0  <  ||mrec-spec(L;lbl;k)||\} 
6.  t  :  tuple-type(prec-arg-types(lbl,p.mrec-spec(L;lbl;p);k;lbl))
7.  \mforall{}z:\{z:mobj(L)|  z  <  <k,  mk-prec(lbl;t)>\}  .  P[z]
8.  j  :  \mBbbN{}||mrec-spec(L;lbl;k)||
9.  y  :  Atom
10.  mrec-spec(L;lbl;k)[j]  =  (inl  (inr  y  ))
11.  mrec-spec(L;lbl;k)[j]  \msim{}  inl  (inr  y  )
12.  t.j  \mmember{}  mrec(L;y)  List
13.  u  :  mrec(L;y)
14.  (u  \mmember{}  t.j)
\mvdash{}  \mexists{}k@0:\mBbbN{}||mrec-spec(L;lbl;k)||
      ((\muparrow{}isl(mrec-spec(L;lbl;k)[k@0]))
      \mwedge{}  (((outl(mrec-spec(L;lbl;k)[k@0])  =  (inl  y))  \mwedge{}  (u  =  t.k@0))
          \mvee{}  ((outl(mrec-spec(L;lbl;k)[k@0])  =  (inr  y  ))  \mwedge{}  (u  \mmember{}  t.k@0))))


By


Latex:
(D  0  With  \mkleeneopen{}j\mkleeneclose{} 
  THENL  [Auto
              ;  (HypSubst'  (-4)  0  THEN  Reduce  0  THEN  Fold  `mrec`  0  THEN  Auto)
              ;  (RenameVar  `i'  (-1)
                    THEN  (GenConclTerm  \mkleeneopen{}mrec-spec(L;lbl;k)[i]\mkleeneclose{}\mcdot{}  THENA  Auto)
                    THEN  Fold  `mrec`  0
                    THEN  D  -2
                    THEN  Reduce  0
                    THEN  D  0
                    THEN  Try  (Trivial)
                    THEN  D  0
                    THEN  D  0)]
)




Home Index