Step * 1 4 2 2 1 of Lemma term-accum_wf_wfterm


1. opr Type
2. Type
3. sort term(opr) ⟶ ℕ
4. arity opr ⟶ ((ℕ × ℕList)
5. P ⟶ wfterm(opr;sort;arity) ⟶ ℙ
6. P
⟶ f:opr
⟶ vs:(varname() List)
⟶ {L:(t:wfterm(opr;sort;arity) × p:P × (R t)) List| 
    ||L|| < ||arity f||
    ∧ (||vs|| (fst(arity f[||L||])) ∈ ℤ)
    ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))} 
⟶ P
7. varcase p:P ⟶ v:{v:varname()| ¬(v nullvar() ∈ varname())}  ⟶ (R varterm(v))
8. mktermcase p:P
⟶ f:opr
⟶ bts:wf-bound-terms(opr;sort;arity;f)
⟶ L:{L:(t:wfterm(opr;sort;arity) × p:P × (R t)) List| 
      (||L|| ||bts|| ∈ ℤ)
      ∧ (∀i:ℕ||L||. ((fst(L[i])) (snd(bts[i])) ∈ term(opr)))
      ∧ (∀i:ℕ||L||. ((fst(snd(L[i]))) (Q (fst(bts[i])) firstn(i;L)) ∈ P))} 
⟶ (R mkwfterm(f;bts))
9. wfterm(opr;sort;arity)
10. P
11. ok : ∀f:opr. ∀vs:varname() List. ∀L:(t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List.
           Dec(||L|| < ||arity f||
           ∧ (||vs|| (fst(arity f[||L||])) ∈ ℤ)
           ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))
           ∧ (∀i:ℕ||L||. (↑wf-term(arity;sort;fst(L[i])))))
12. ∀f:opr. ∀vs:varname() List. ∀L:(t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List.
      (↑isl(ok vs L)
      ⇐⇒ ||L|| < ||arity f||
          ∧ (||vs|| (fst(arity f[||L||])) ∈ ℤ)
          ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))
          ∧ (∀i:ℕ||L||. (↑wf-term(arity;sort;fst(L[i])))))
13. QQ P ⟶ opr ⟶ (varname() List) ⟶ ((t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List) ⟶ P
14. p,f,vs,L. if isl(ok vs L) then vs else fi )
QQ
∈ (P ⟶ opr ⟶ (varname() List) ⟶ ((t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List) ⟶ P)
15. ∀[varcase:p:P ⟶ v:{v:varname()| ¬(v nullvar() ∈ varname())}  ⟶ varterm(v) supposing True].
    ∀[mktermcase:p:P
                 ⟶ f:opr
                 ⟶ bts:(bound-term(opr) List)
                 ⟶ L:{L:(t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List| 
                       (||L|| ||bts|| ∈ ℤ)
                       ∧ (∀i:ℕ||L||. ((fst(L[i])) (snd(bts[i])) ∈ term(opr)))
                       ∧ (∀i:ℕ||L||
                            ((fst(snd(L[i])))
                            ((λp,f,vs,L. if isl(ok vs L) then vs else fi (fst(bts[i])) firstn(i;L))
                            ∈ P))} 
                 ⟶ mkterm(f;bts) supposing ↑wf-term(arity;sort;mkterm(f;bts))]. ∀[t:term(opr)]. ∀[p:P].
      (term-accum(t with p)
       p,f,vs,tr.(λp,f,vs,L. if isl(ok vs L) then vs else fi vs tr
       varterm(x) with  varcase x
       mkterm(f,bts) with  trs.mktermcase bts trs ∈ supposing ↑wf-term(arity;sort;t))
16. p1 P
17. opr
18. bts bound-term(opr) List
19. (t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List
20. ||L|| ||bts|| ∈ ℤ
21. ∀i:ℕ||L||. ((fst(L[i])) (snd(bts[i])) ∈ term(opr))
22. : ℕ||L||
23. ||firstn(i;L)|| < ||arity f||
∧ (||fst(bts[i])|| (fst(arity f[||firstn(i;L)||])) ∈ ℤ)
∧ (∀i1:ℕ||firstn(i;L)||. ((sort (fst(firstn(i;L)[i1]))) (snd(arity f[i1])) ∈ ℤ))
∧ (∀i1:ℕ||firstn(i;L)||. (↑wf-term(arity;sort;fst(firstn(i;L)[i1]))))
⊢ firstn(i;L) ∈ {L:(t:wfterm(opr;sort;arity) × p:P × (R t)) List| 
                 ||L|| < ||arity f||
                 ∧ (||fst(bts[i])|| (fst(arity f[||L||])) ∈ ℤ)
                 ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))} 
BY
(MemTypeCD THENL [skip{[tactic]}; Auto; Auto]) }

1
1. opr Type
2. Type
3. sort term(opr) ⟶ ℕ
4. arity opr ⟶ ((ℕ × ℕList)
5. P ⟶ wfterm(opr;sort;arity) ⟶ ℙ
6. P
⟶ f:opr
⟶ vs:(varname() List)
⟶ {L:(t:wfterm(opr;sort;arity) × p:P × (R t)) List| 
    ||L|| < ||arity f||
    ∧ (||vs|| (fst(arity f[||L||])) ∈ ℤ)
    ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))} 
⟶ P
7. varcase p:P ⟶ v:{v:varname()| ¬(v nullvar() ∈ varname())}  ⟶ (R varterm(v))
8. mktermcase p:P
⟶ f:opr
⟶ bts:wf-bound-terms(opr;sort;arity;f)
⟶ L:{L:(t:wfterm(opr;sort;arity) × p:P × (R t)) List| 
      (||L|| ||bts|| ∈ ℤ)
      ∧ (∀i:ℕ||L||. ((fst(L[i])) (snd(bts[i])) ∈ term(opr)))
      ∧ (∀i:ℕ||L||. ((fst(snd(L[i]))) (Q (fst(bts[i])) firstn(i;L)) ∈ P))} 
⟶ (R mkwfterm(f;bts))
9. wfterm(opr;sort;arity)
10. P
11. ok : ∀f:opr. ∀vs:varname() List. ∀L:(t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List.
           Dec(||L|| < ||arity f||
           ∧ (||vs|| (fst(arity f[||L||])) ∈ ℤ)
           ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))
           ∧ (∀i:ℕ||L||. (↑wf-term(arity;sort;fst(L[i])))))
12. ∀f:opr. ∀vs:varname() List. ∀L:(t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List.
      (↑isl(ok vs L)
      ⇐⇒ ||L|| < ||arity f||
          ∧ (||vs|| (fst(arity f[||L||])) ∈ ℤ)
          ∧ (∀i:ℕ||L||. ((sort (fst(L[i]))) (snd(arity f[i])) ∈ ℤ))
          ∧ (∀i:ℕ||L||. (↑wf-term(arity;sort;fst(L[i])))))
13. QQ P ⟶ opr ⟶ (varname() List) ⟶ ((t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List) ⟶ P
14. p,f,vs,L. if isl(ok vs L) then vs else fi )
QQ
∈ (P ⟶ opr ⟶ (varname() List) ⟶ ((t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List) ⟶ P)
15. ∀[varcase:p:P ⟶ v:{v:varname()| ¬(v nullvar() ∈ varname())}  ⟶ varterm(v) supposing True].
    ∀[mktermcase:p:P
                 ⟶ f:opr
                 ⟶ bts:(bound-term(opr) List)
                 ⟶ L:{L:(t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List| 
                       (||L|| ||bts|| ∈ ℤ)
                       ∧ (∀i:ℕ||L||. ((fst(L[i])) (snd(bts[i])) ∈ term(opr)))
                       ∧ (∀i:ℕ||L||
                            ((fst(snd(L[i])))
                            ((λp,f,vs,L. if isl(ok vs L) then vs else fi (fst(bts[i])) firstn(i;L))
                            ∈ P))} 
                 ⟶ mkterm(f;bts) supposing ↑wf-term(arity;sort;mkterm(f;bts))]. ∀[t:term(opr)]. ∀[p:P].
      (term-accum(t with p)
       p,f,vs,tr.(λp,f,vs,L. if isl(ok vs L) then vs else fi vs tr
       varterm(x) with  varcase x
       mkterm(f,bts) with  trs.mktermcase bts trs ∈ supposing ↑wf-term(arity;sort;t))
16. p1 P
17. opr
18. bts bound-term(opr) List
19. (t:term(opr) × p:P × supposing ↑wf-term(arity;sort;t)) List
20. ||L|| ||bts|| ∈ ℤ
21. ∀i:ℕ||L||. ((fst(L[i])) (snd(bts[i])) ∈ term(opr))
22. : ℕ||L||
23. ||firstn(i;L)|| < ||arity f||
∧ (||fst(bts[i])|| (fst(arity f[||firstn(i;L)||])) ∈ ℤ)
∧ (∀i1:ℕ||firstn(i;L)||. ((sort (fst(firstn(i;L)[i1]))) (snd(arity f[i1])) ∈ ℤ))
∧ (∀i1:ℕ||firstn(i;L)||. (↑wf-term(arity;sort;fst(firstn(i;L)[i1]))))
⊢ firstn(i;L) ∈ (t:wfterm(opr;sort;arity) × p:P × (R t)) List


Latex:


Latex:

1.  opr  :  Type
2.  P  :  Type
3.  sort  :  term(opr)  {}\mrightarrow{}  \mBbbN{}
4.  arity  :  opr  {}\mrightarrow{}  ((\mBbbN{}  \mtimes{}  \mBbbN{})  List)
5.  R  :  P  {}\mrightarrow{}  wfterm(opr;sort;arity)  {}\mrightarrow{}  \mBbbP{}
6.  Q  :  P
{}\mrightarrow{}  f:opr
{}\mrightarrow{}  vs:(varname()  List)
{}\mrightarrow{}  \{L:(t:wfterm(opr;sort;arity)  \mtimes{}  p:P  \mtimes{}  (R  p  t))  List| 
        ||L||  <  ||arity  f||
        \mwedge{}  (||vs||  =  (fst(arity  f[||L||])))
        \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((sort  (fst(L[i])))  =  (snd(arity  f[i]))))\} 
{}\mrightarrow{}  P
7.  varcase  :  p:P  {}\mrightarrow{}  v:\{v:varname()|  \mneg{}(v  =  nullvar())\}    {}\mrightarrow{}  (R  p  varterm(v))
8.  mktermcase  :  p:P
{}\mrightarrow{}  f:opr
{}\mrightarrow{}  bts:wf-bound-terms(opr;sort;arity;f)
{}\mrightarrow{}  L:\{L:(t:wfterm(opr;sort;arity)  \mtimes{}  p:P  \mtimes{}  (R  p  t))  List| 
            (||L||  =  ||bts||)
            \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((fst(L[i]))  =  (snd(bts[i]))))
            \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((fst(snd(L[i])))  =  (Q  p  f  (fst(bts[i]))  firstn(i;L))))\} 
{}\mrightarrow{}  (R  p  mkwfterm(f;bts))
9.  t  :  wfterm(opr;sort;arity)
10.  p  :  P
11.  ok  :  \mforall{}f:opr.  \mforall{}vs:varname()  List.
                  \mforall{}L:(t:term(opr)  \mtimes{}  p:P  \mtimes{}  R  p  t  supposing  \muparrow{}wf-term(arity;sort;t))  List.
                      Dec(||L||  <  ||arity  f||
                      \mwedge{}  (||vs||  =  (fst(arity  f[||L||])))
                      \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((sort  (fst(L[i])))  =  (snd(arity  f[i]))))
                      \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  (\muparrow{}wf-term(arity;sort;fst(L[i])))))
12.  \mforall{}f:opr.  \mforall{}vs:varname()  List.
        \mforall{}L:(t:term(opr)  \mtimes{}  p:P  \mtimes{}  R  p  t  supposing  \muparrow{}wf-term(arity;sort;t))  List.
            (\muparrow{}isl(ok  f  vs  L)
            \mLeftarrow{}{}\mRightarrow{}  ||L||  <  ||arity  f||
                    \mwedge{}  (||vs||  =  (fst(arity  f[||L||])))
                    \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((sort  (fst(L[i])))  =  (snd(arity  f[i]))))
                    \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  (\muparrow{}wf-term(arity;sort;fst(L[i])))))
13.  QQ  :  P
{}\mrightarrow{}  opr
{}\mrightarrow{}  (varname()  List)
{}\mrightarrow{}  ((t:term(opr)  \mtimes{}  p:P  \mtimes{}  R  p  t  supposing  \muparrow{}wf-term(arity;sort;t))  List)
{}\mrightarrow{}  P
14.  (\mlambda{}p,f,vs,L.  if  isl(ok  f  vs  L)  then  Q  p  f  vs  L  else  p  fi  )  =  QQ
15.  \mforall{}[varcase:p:P  {}\mrightarrow{}  v:\{v:varname()|  \mneg{}(v  =  nullvar())\}    {}\mrightarrow{}  R  p  varterm(v)  supposing  True].
        \mforall{}[mktermcase:p:P
                                  {}\mrightarrow{}  f:opr
                                  {}\mrightarrow{}  bts:(bound-term(opr)  List)
                                  {}\mrightarrow{}  L:\{L:(t:term(opr)  \mtimes{}  p:P  \mtimes{}  R  p  t  supposing  \muparrow{}wf-term(arity;sort;t))  List| 
                                              (||L||  =  ||bts||)
                                              \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((fst(L[i]))  =  (snd(bts[i]))))
                                              \mwedge{}  (\mforall{}i:\mBbbN{}||L||
                                                        ((fst(snd(L[i])))
                                                        =  ((\mlambda{}p,f,vs,L.  if  isl(ok  f  vs  L)  then  Q  p  f  vs  L  else  p  fi  )  p  f  (fst(bt\000Cs[i])) 
                                                              firstn(i;L))))\} 
                                  {}\mrightarrow{}  R  p  mkterm(f;bts)  supposing  \muparrow{}wf-term(arity;sort;mkterm(f;bts))].  \mforall{}[t:term(opr)].
        \mforall{}[p:P].
            (term-accum(t  with  p)
              p,f,vs,tr.(\mlambda{}p,f,vs,L.  if  isl(ok  f  vs  L)  then  Q  p  f  vs  L  else  p  fi  )  p  f  vs  tr
              varterm(x)  with  p  {}\mRightarrow{}  varcase  p  x
              mkterm(f,bts)  with  p  {}\mRightarrow{}  trs.mktermcase  p  f  bts  trs  \mmember{}  R  p  t  supposing  \muparrow{}wf-term(arity;sort;t))
16.  p1  :  P
17.  f  :  opr
18.  bts  :  bound-term(opr)  List
19.  L  :  (t:term(opr)  \mtimes{}  p:P  \mtimes{}  R  p  t  supposing  \muparrow{}wf-term(arity;sort;t))  List
20.  ||L||  =  ||bts||
21.  \mforall{}i:\mBbbN{}||L||.  ((fst(L[i]))  =  (snd(bts[i])))
22.  i  :  \mBbbN{}||L||
23.  ||firstn(i;L)||  <  ||arity  f||
\mwedge{}  (||fst(bts[i])||  =  (fst(arity  f[||firstn(i;L)||])))
\mwedge{}  (\mforall{}i1:\mBbbN{}||firstn(i;L)||.  ((sort  (fst(firstn(i;L)[i1])))  =  (snd(arity  f[i1]))))
\mwedge{}  (\mforall{}i1:\mBbbN{}||firstn(i;L)||.  (\muparrow{}wf-term(arity;sort;fst(firstn(i;L)[i1]))))
\mvdash{}  firstn(i;L)  \mmember{}  \{L:(t:wfterm(opr;sort;arity)  \mtimes{}  p:P  \mtimes{}  (R  p  t))  List| 
                                  ||L||  <  ||arity  f||
                                  \mwedge{}  (||fst(bts[i])||  =  (fst(arity  f[||L||])))
                                  \mwedge{}  (\mforall{}i:\mBbbN{}||L||.  ((sort  (fst(L[i])))  =  (snd(arity  f[i]))))\} 


By


Latex:
(MemTypeCD  THENL  [skip\{[tactic]\};  Auto;  Auto])




Home Index