Nuprl Definition : very-dep-fun

We want to descibe process "f,g" where "f" assignin to b ∈ B
term a ∈ A  and "g" computes value r ∈ C[a;b] to get triple
<a, b, r> ∈ a:A × b:B × C[a;b].
Given list bs ∈ List, this process "f,g" thus accumulates list of
triples L ∈ (a:A × b:B × C[a;b]) List, but on each new b ∈ bs, can use
the list accumuated so far -- i.e. if bs[i], can uses the list
accumulated by "f,g" from firstn(i;bs).

The type of "g" is simply a:A ⟶ b:B ⟶ C[a;b].
The type of "f" could simply be ((a:A × b:B × C[a;b]) List) ⟶ B ⟶ A
but that would require ⌜b ∈ A⌝ for any list of triples L, and b ∈ B.

Instead, we only need ⌜b ∈ A⌝  for lists where if
  <a, b, r> L[i] then   (f firstn(i;L) b).

We write ⌜vdf-eq(A;f;L)⌝ for this constraint on L.
Then the type of should be
f ∈ {L:(a:A × b:B × C[a;b]) List| vdf-eq(A;f;L)}  ⟶ B ⟶ A

So the type of the domain of mentions itself.
This is what we call very dependent function type.

To define this type we use the dependent intersection type.
We define, by induction on n, the type vdf(A;B;a,b.C[a; b];n) of very dependent
functions that can accept input lists of length upto n.
Then the very dependent function type is the intersection of these.
very-dep-fun(A;B;a,b.C[a; b]) ==  ⋂n:ℤvdf(A;B;a,b.C[a; b];n)

The constraint vdf-eq(A;f;L) is also defined by induction on the length of L
using dependent intersection.

By induction on we can prove vdf-wf+ which proves (jointly) that
 vdf-eq(A;f;L) is proposition and vdf(A;B;a,b.C[a;b];n) is type,
and also that vdf-eq(A;f;L) ⊆(∀[i:ℕ||L||]. ((fst(L[i])) (f firstn(i;L) (fst(snd(L[i])))))).

We get kind of elimination rule for very-dep-fun(A;B;a,b.C[a; b]) 
Error :very-dep-fun-subtype  that says that for 
f ∈ very-dep-fun(A;B;a,b.C[a; b])  we have
f ∈ {L:(a:A × b:B × C[a;b]) List| vdf-eq(A;f;L)}  ⟶ B ⟶ A

For an introduction rule, we have tactic VeryDepFunCD that reduces
proving f ∈ very-dep-fun(A;B;a,b.C[a;b])  to proving that
[] ∈ B ⟶ A   and  L ∈ B ⟶ under the assumption
[i:ℕ||L||]. ((fst(L[i])) (f firstn(i;L) (fst(snd(L[i])))))

To use the elimination rule, we will need to verify that list of triples
satisfies ⌜vdf-eq(A;f;L)⌝For that, we have tactic ProveVdfEq
that reduces that to proving
(fst(L[j])) (f firstn(j;L) (fst(snd(L[j])))) 
under the assumption
[i:ℕj]. ((fst(L[i])) (f firstn(i;L) (fst(snd(L[i])))))

So the upshot is that we should be able to treat the type 
very-dep-fun(A;B;a,b.C[a; b]) as an abstract, primitive type using only
the lemma Error :very-dep-fun-subtype and the tactics 
VeryDepFunCD and ProveVdfEq.



very-dep-fun(A;B;a,b.C[a; b]) ==  ⋂n:ℤvdf(A;B;a,b.C[a; b];n)



Definitions occuring in Statement :  vdf: vdf(A;B;a,b.C[a; b];n) isect: x:A. B[x] int:
Definitions occuring in definition :  isect: x:A. B[x] int: vdf: vdf(A;B;a,b.C[a; b];n)
FDL editor aliases :  very-dep-fun

Latex:
very-dep-fun(A;B;a,b.C[a;  b])  ==    \mcap{}n:\mBbbZ{}.  vdf(A;B;a,b.C[a;  b];n)



Date html generated: 2020_05_19-PM-09_40_19
Last ObjectModification: 2020_03_09-AM-11_31_41

Theory : co-recursion-2


Home Index