Nuprl Lemma : wfterm-accum_wf
∀[opr:Type]. ∀[sort:term(opr) ⟶ ℕ]. ∀[arity:opr ⟶ ((ℕ × ℕ) List)]. ∀[Param:Type]. ∀[C:Param
                                                                                        ⟶ wfterm(opr;sort;arity)
                                                                                        ⟶ Type].
∀[nextp:Param
        ⟶ (varname() List)
        ⟶ opr
        ⟶ very-dep-fun(Param;varname() List × wfterm(opr;sort;arity);a,bt.C[a;snd(bt)])].
∀[m:a:Param
    ⟶ vs:(varname() List)
    ⟶ f:opr
    ⟶ L:{L:(a:Param × bt:varname() List × wfterm(opr;sort;arity) × C[a;snd(bt)]) List| 
          vdf-eq(Param;nextp a vs f;L) ∧ (↑wf-term(arity;sort;mkterm(f;map(λx.(fst(snd(x)));L))))} 
    ⟶ C[a;mkterm(f;map(λx.(fst(snd(x)));L))]]. ∀[varcase:a:Param
                                                          ⟶ vs:(varname() List)
                                                          ⟶ v:{v:varname()| ¬(v = nullvar() ∈ varname())} 
                                                          ⟶ C[a;varterm(v)]]. ∀[p:Param]. ∀[t:wfterm(opr;sort;arity)].
  (wfterm-accum(p;t)
   p,vs,v.varcase[p;vs;v]
   prm,vs,f,L.m[prm;vs;f;L]
   p0,ws,op,sofar,bt.nextp[p0;ws;op;sofar;bt] ∈ C[p;t])
Proof
Definitions occuring in Statement : 
wfterm-accum: wfterm-accum, 
wfterm: wfterm(opr;sort;arity)
, 
wf-term: wf-term(arity;sort;t)
, 
mkterm: mkterm(opr;bts)
, 
varterm: varterm(v)
, 
term: term(opr)
, 
nullvar: nullvar()
, 
varname: varname()
, 
very-dep-fun: very-dep-fun(A;B;a,b.C[a; b])
, 
vdf-eq: vdf-eq(A;f;L)
, 
map: map(f;as)
, 
list: T List
, 
nat: ℕ
, 
assert: ↑b
, 
uall: ∀[x:A]. B[x]
, 
so_apply: x[s1;s2;s3;s4;s5]
, 
so_apply: x[s1;s2;s3;s4]
, 
so_apply: x[s1;s2;s3]
, 
so_apply: x[s1;s2]
, 
pi1: fst(t)
, 
pi2: snd(t)
, 
not: ¬A
, 
and: P ∧ Q
, 
member: t ∈ T
, 
set: {x:A| B[x]} 
, 
apply: f a
, 
lambda: λx.A[x]
, 
function: x:A ⟶ B[x]
, 
product: x:A × B[x]
, 
universe: Type
, 
equal: s = t ∈ T
Definitions unfolded in proof : 
uall: ∀[x:A]. B[x]
, 
member: t ∈ T
, 
so_lambda: λ2x.t[x]
, 
so_apply: x[s]
, 
subtype_rel: A ⊆r B
, 
uimplies: b supposing a
, 
guard: {T}
, 
all: ∀x:A. B[x]
, 
so_lambda: λ2x y.t[x; y]
, 
so_apply: x[s1;s2]
, 
wfterm-accum: wfterm-accum, 
so_lambda: so_lambda4, 
and: P ∧ Q
, 
pi2: snd(t)
, 
istype: istype(T)
, 
prop: ℙ
, 
pi1: fst(t)
, 
hered-term: hered-term(opr;t.P[t])
, 
so_apply: x[s1;s2;s3;s4]
, 
cand: A c∧ B
, 
iff: P 
⇐⇒ Q
, 
rev_implies: P 
⇐ Q
, 
implies: P 
⇒ Q
, 
wfterm: wfterm(opr;sort;arity)
, 
so_lambda: so_lambda3, 
so_apply: x[s1;s2;s3]
, 
not: ¬A
, 
false: False
, 
assert: ↑b
, 
ifthenelse: if b then t else f fi 
, 
wf-term: wf-term(arity;sort;t)
, 
varterm: varterm(v)
, 
btrue: tt
, 
true: True
, 
sq_type: SQType(T)
Lemmas referenced : 
wfterm-hered-correct-sort-arity, 
hered-term-accum_wf2, 
correct-sort-arity_wf, 
term_wf, 
subtype_rel_dep_function, 
wfterm_wf, 
hered-term_wf, 
ext-eq_inversion, 
subtype_rel_weakening, 
list_wf, 
varname_wf, 
very-dep-fun_wf, 
pi2_wf, 
very-dep-fun-subtype-domain, 
subtype_rel_product, 
vdf-eq_wf, 
subtype_rel_list, 
hereditarily_wf, 
mkterm_wf, 
map_wf, 
wf-term-hereditarily-correct-sort-arity, 
istype-assert, 
wf-term_wf, 
nullvar_wf, 
istype-void, 
varterm_wf, 
assert_elim, 
subtype_base_sq, 
bool_wf, 
bool_subtype_base, 
nat_wf, 
istype-nat, 
istype-universe
Rules used in proof : 
cut, 
introduction, 
extract_by_obid, 
sqequalSubstitution, 
sqequalTransitivity, 
computationStep, 
sqequalReflexivity, 
isect_memberFormation_alt, 
hypothesis, 
sqequalHypSubstitution, 
isectElimination, 
thin, 
hypothesisEquality, 
sqequalRule, 
lambdaEquality_alt, 
universeIsType, 
functionExtensionality, 
applyEquality, 
instantiate, 
cumulativity, 
universeEquality, 
because_Cache, 
independent_isectElimination, 
lambdaFormation_alt, 
inhabitedIsType, 
functionEquality, 
productEquality, 
productIsType, 
productElimination, 
dependent_functionElimination, 
independent_pairEquality, 
setElimination, 
rename, 
dependent_set_memberEquality_alt, 
independent_pairFormation, 
independent_functionElimination, 
setIsType, 
functionIsType, 
equalityIstype, 
natural_numberEquality, 
voidElimination, 
equalityTransitivity, 
equalitySymmetry
Latex:
\mforall{}[opr:Type].  \mforall{}[sort:term(opr)  {}\mrightarrow{}  \mBbbN{}].  \mforall{}[arity:opr  {}\mrightarrow{}  ((\mBbbN{}  \mtimes{}  \mBbbN{})  List)].  \mforall{}[Param:Type].
\mforall{}[C:Param  {}\mrightarrow{}  wfterm(opr;sort;arity)  {}\mrightarrow{}  Type].  \mforall{}[nextp:Param
                                                                                                            {}\mrightarrow{}  (varname()  List)
                                                                                                            {}\mrightarrow{}  opr
                                                                                                            {}\mrightarrow{}  very-dep-fun(Param;varname()  List
                                                                                                                  \mtimes{}  wfterm(opr;sort;arity);a,bt.C[a;
                                                                                                                                                                                snd(bt)])].
\mforall{}[m:a:Param
        {}\mrightarrow{}  vs:(varname()  List)
        {}\mrightarrow{}  f:opr
        {}\mrightarrow{}  L:\{L:(a:Param  \mtimes{}  bt:varname()  List  \mtimes{}  wfterm(opr;sort;arity)  \mtimes{}  C[a;snd(bt)])  List| 
                    vdf-eq(Param;nextp  a  vs  f;L)  \mwedge{}  (\muparrow{}wf-term(arity;sort;mkterm(f;map(\mlambda{}x.(fst(snd(x)));L))))\} 
        {}\mrightarrow{}  C[a;mkterm(f;map(\mlambda{}x.(fst(snd(x)));L))]].  \mforall{}[varcase:a:Param
                                                                                                                    {}\mrightarrow{}  vs:(varname()  List)
                                                                                                                    {}\mrightarrow{}  v:\{v:varname()|  \mneg{}(v  =  nullvar())\} 
                                                                                                                    {}\mrightarrow{}  C[a;varterm(v)]].  \mforall{}[p:Param].
\mforall{}[t:wfterm(opr;sort;arity)].
    (wfterm-accum(p;t)
      p,vs,v.varcase[p;vs;v]
      prm,vs,f,L.m[prm;vs;f;L]
      p0,ws,op,sofar,bt.nextp[p0;ws;op;sofar;bt]  \mmember{}  C[p;t])
Date html generated:
2020_05_19-PM-09_58_48
Last ObjectModification:
2020_03_12-PM-01_19_00
Theory : terms
Home
Index