Step * 1 4 3 1 2 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. : ℕ
16. ∀n:ℕn. ∀a:{a:wfterm(opr;sort;arity)| term-size(a) ≤ n} .
      p.Ax ∈ ∀p:P
                 (term-accum(a with p)
                  p,f,vs,trs.(λp,f,vs,L. if isl(ok vs L) then vs else fi vs trs
                  varterm(x) with  varcase x
                  mkterm(f,bts) with  trs.mktermcase bts trs term-accum(a with p)
                                                                       p,f,vs,trs.Q vs trs
                                                                       varterm(x) with  varcase x
                                                                       mkterm(f,bts) with  trs.mktermcase bts 
                                                                                                   trs))
17. term(opr) ≡ coterm-fun(opr;term(opr))
18. y1 opr
19. y2 (varname() List × term(opr)) List
20. t ∈ term(opr)
21. ↑wf-term(arity;sort;mkterm(y1;y2))
22. (1 + Σ(term-size(snd(bt)) bt ∈ y2)) ≤ n
⊢ λp.Ax ∈ ∀p:P
            (let trs accumulate (with value trs and list item bt):
                        let p' if isl(ok y1 (fst(bt)) trs) then y1 (fst(bt)) trs else fi  in
                            trs
                            [<snd(bt)
                               p'
                               term-accum(snd(bt) with p')
                                 p,f,vs,trs.if isl(ok vs trs) then vs trs else fi 
                                 varterm(x) with  varcase x
                                 mkterm(f,bts) with  trs.mktermcase bts trs>]
                       over list:
                         y2
                       with starting value:
                        []) in
                 mktermcase y1 y2 trs let trs accumulate (with value trs and list item bt):
                                                 let p' y1 (fst(bt)) trs in
                                                     trs
                                                     [<snd(bt)
                                                        p'
                                                        term-accum(snd(bt) with p')
                                                          p,f,vs,trs.Q vs trs
                                                          varterm(x) with  varcase x
                                                          mkterm(f,bts) with  trs.mktermcase bts trs>]
                                                over list:
                                                  y2
                                                with starting value:
                                                 []) in
                                          mktermcase y1 y2 trs)
BY
(RenameVar `f' (-5)
   THEN RenameVar `bts' (-4)
   THEN (Assert mkterm(f;bts) ∈ wfterm(opr;sort;arity) BY
               (MemTypeCD THEN Auto))
   THEN (Subst' bts wfbts(mkterm(f;bts)) THENA Computation)
   THEN (Subst' bts wfbts(mkterm(f;bts)) -2 THENA Computation)
   THEN (Assert 1 ≤ term-size(mkterm(f;wfbts(mkterm(f;bts)))) BY
               Auto)
   THEN Reduce -1) }

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. : ℕ
16. ∀n:ℕn. ∀a:{a:wfterm(opr;sort;arity)| term-size(a) ≤ n} .
      p.Ax ∈ ∀p:P
                 (term-accum(a with p)
                  p,f,vs,trs.(λp,f,vs,L. if isl(ok vs L) then vs else fi vs trs
                  varterm(x) with  varcase x
                  mkterm(f,bts) with  trs.mktermcase bts trs term-accum(a with p)
                                                                       p,f,vs,trs.Q vs trs
                                                                       varterm(x) with  varcase x
                                                                       mkterm(f,bts) with  trs.mktermcase bts 
                                                                                                   trs))
17. term(opr) ≡ coterm-fun(opr;term(opr))
18. opr
19. bts (varname() List × term(opr)) List
20. t ∈ term(opr)
21. ↑wf-term(arity;sort;mkterm(f;bts))
22. (1 + Σ(term-size(snd(bt)) bt ∈ wfbts(mkterm(f;bts)))) ≤ n
23. mkterm(f;bts) ∈ wfterm(opr;sort;arity)
24. 1 ≤ (1 + Σ(term-size(snd(bt)) bt ∈ wfbts(mkterm(f;bts))))
⊢ λp.Ax ∈ ∀p:P
            (let trs accumulate (with value trs and list item bt):
                        let p' if isl(ok (fst(bt)) trs) then (fst(bt)) trs else fi  in
                            trs
                            [<snd(bt)
                               p'
                               term-accum(snd(bt) with p')
                                 p,f,vs,trs.if isl(ok vs trs) then vs trs else fi 
                                 varterm(x) with  varcase x
                                 mkterm(f,bts) with  trs.mktermcase bts trs>]
                       over list:
                         wfbts(mkterm(f;bts))
                       with starting value:
                        []) in
                 mktermcase wfbts(mkterm(f;bts)) trs let trs accumulate (with value trs and list item bt):
                                                                  let p' (fst(bt)) trs in
                                                                      trs
                                                                      [<snd(bt)
                                                                         p'
                                                                         term-accum(snd(bt) with p')
                                                                           p,f,vs,trs.Q vs trs
                                                                           varterm(x) with  varcase x
                                                                           mkterm(f,bts) with  trs.mktermcase 
                                                                                                       bts 
                                                                                                       trs>]
                                                                 over list:
                                                                   wfbts(mkterm(f;bts))
                                                                 with starting value:
                                                                  []) in
                                                           mktermcase wfbts(mkterm(f;bts)) trs)


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.  n  :  \mBbbN{}
16.  \mforall{}n:\mBbbN{}n.  \mforall{}a:\{a:wfterm(opr;sort;arity)|  term-size(a)  \mleq{}  n\}  .
            (\mlambda{}p.Ax  \mmember{}  \mforall{}p:P
                                  (term-accum(a  with  p)
                                    p,f,vs,trs.(\mlambda{}p,f,vs,L.  if  isl(ok  f  vs  L)  then  Q  p  f  vs  L  else  p  fi  )  p  f  vs  trs
                                    varterm(x)  with  p  {}\mRightarrow{}  varcase  p  x
                                    mkterm(f,bts)  with  p  {}\mRightarrow{}  trs.mktermcase  p  f  bts  trs 
                                  \msim{}  term-accum(a  with  p)
                                      p,f,vs,trs.Q  p  f  vs  trs
                                      varterm(x)  with  p  {}\mRightarrow{}  varcase  p  x
                                      mkterm(f,bts)  with  p  {}\mRightarrow{}  trs.mktermcase  p  f  bts  trs))
17.  term(opr)  \mequiv{}  coterm-fun(opr;term(opr))
18.  y1  :  opr
19.  y2  :  (varname()  List  \mtimes{}  term(opr))  List
20.  t  \mmember{}  term(opr)
21.  \muparrow{}wf-term(arity;sort;mkterm(y1;y2))
22.  (1  +  \mSigma{}(term-size(snd(bt))  |  bt  \mmember{}  y2))  \mleq{}  n
\mvdash{}  \mlambda{}p.Ax  \mmember{}  \mforall{}p:P
                        (let  trs  =  accumulate  (with  value  trs  and  list  item  bt):
                                                let  p'  =  if  isl(ok  y1  (fst(bt))  trs)  then  Q  p  y1  (fst(bt))  trs  else  p  fi    in
                                                        trs
                                                        @  [<snd(bt)
                                                              ,  p'
                                                              ,  term-accum(snd(bt)  with  p')
                                                                  p,f,vs,trs.if  isl(ok  f  vs  trs)  then  Q  p  f  vs  trs  else  p  fi 
                                                                  varterm(x)  with  p  {}\mRightarrow{}  varcase  p  x
                                                                  mkterm(f,bts)  with  p  {}\mRightarrow{}  trs.mktermcase  p  f  bts  trs>]
                                              over  list:
                                                  y2
                                              with  starting  value:
                                                [])  in
                                  mktermcase  p  y1  y2  trs 
                        \msim{}  let  trs  =  accumulate  (with  value  trs  and  list  item  bt):
                                                  let  p'  =  Q  p  y1  (fst(bt))  trs  in
                                                          trs
                                                          @  [<snd(bt)
                                                                ,  p'
                                                                ,  term-accum(snd(bt)  with  p')
                                                                    p,f,vs,trs.Q  p  f  vs  trs
                                                                    varterm(x)  with  p  {}\mRightarrow{}  varcase  p  x
                                                                    mkterm(f,bts)  with  p  {}\mRightarrow{}  trs.mktermcase  p  f  bts  trs>]
                                                over  list:
                                                    y2
                                                with  starting  value:
                                                  [])  in
                                    mktermcase  p  y1  y2  trs)


By


Latex:
(RenameVar  `f'  (-5)
  THEN  RenameVar  `bts'  (-4)
  THEN  (Assert  mkterm(f;bts)  \mmember{}  wfterm(opr;sort;arity)  BY
                          (MemTypeCD  THEN  Auto))
  THEN  (Subst'  bts  \msim{}  wfbts(mkterm(f;bts))  0  THENA  Computation)
  THEN  (Subst'  bts  \msim{}  wfbts(mkterm(f;bts))  -2  THENA  Computation)
  THEN  (Assert  1  \mleq{}  term-size(mkterm(f;wfbts(mkterm(f;bts))))  BY
                          Auto)
  THEN  Reduce  -1)




Home Index