Origin Definitions Sections MarkB generic Doc
IF YOU CAN SEE THIS go to /sfa/Nuprl/Shared/Xindentation_hack_doc.html
mb_list_2
Nuprl Section: mb_list_2 - More list stuff from Mark Bickford.

Selected Objects
defl_disjoint l_disjoint(T;l1;l2) == x:T((x  l1) & (x  l2))
defl_all (xL.P(x)) == x:T. (x  L P(x)
THMl_all_cons P:(TProp), x:TL:T List. (y[x / L].P(y))  P(x) & (yL.P(y))
THMfilter_trivial P:(T), L:T List. (xL.P(x))  (filter(P;L) ~ L)
THMfilter_trivial2 P:(T), L:T List. (xL.P(x))  filter(P;L) = L
THMfilter_is_nil P:(T), L:T List. (xL.P(x))  (filter(P;L) ~ nil)
THMlist_set_type L:T List, P:(TProp). (xL.P(x))  L  {x:TP(x) } List
THMl_all_map f:(AB), L:A List, P:(BProp). (xmap(f;L).P(x))  (xL.P(f(x)))
THMl_all_nil P:(TProp). (xnil.P(x))
THMl_all_reduce L:T List, P:(T). (xL.P(x))  reduce(x,yP(x)y;true;L)
THMsublist_filter L1,L2:T List, P:(T). L2  filter(P;L1 L2  L1 & (xL2.P(x))
THMl_before_filter l:T List, P:(T), x,y:T.
x before y  filter(P;l P(x) & P(y) & x before y  l
THMno_repeats_filter P:(T), l:T List. no_repeats(T;l no_repeats(T;filter(P;l))
THMdecidable__l_all F:(AProp), L:A List. (k:A. Dec(F(k)))  Dec((kL.F(k)))
defl_exists (xL.P(x)) == x:T. (x  L) & P(x)
THMl_exists_nil P:(TProp). (xnil.P(x))  False
THMl_exists_cons P:(TProp), x:TL:T List. (y[x / L].P(y))  P(x (yL.P(y))
THMdecidable__l_exists F:(AProp), L:A List. (k:A. Dec(F(k)))  Dec((kL.F(k)))
defmapfilter mapfilter(f;P;L) == map(f;filter(P;L))
THMmember_map_filter P:(T), T':Type, f:({x:TP(x) }T'), L:T List, x:T'.
(x  mapfilter(f;P;L))  (y:T. (y  L) & P(y) & x = f(y))
defsublist_occurence sublist_occurence(T;L1;L2;f)
== increasing(f;||L1||) & (j:||L1||. L1[j] = L2[(f(j))]  T)
THMrange_sublist L:T List, n:f:(n||L||).
increasing(f;n (L1:T List. ||L1|| = n   & sublist_occurence(T;L1;L;f))
defdisjoint_sublists disjoint_sublists(T;L1;L2;L)
== f1:(||L1||||L||), f2:(||L2||||L||).
== increasing(f1;||L1||) & (j:||L1||. L1[j] = L[(f1(j))]  T)
== & increasing(f2;||L2||) & (j:||L2||. L2[j] = L[(f2(j))]  T)
== & (j1:||L1||, j2:||L2||. f1(j1) = f2(j2))
THMdisjoint_sublists_sublist L1,L2,L:T List. disjoint_sublists(T;L1;L2;L L1  L & L2  L
definterleaving interleaving(T;L1;L2;L)
== ||L|| = ||L1||+||L2||   & disjoint_sublists(T;L1;L2;L)
THMnil_interleaving L1,L:T List. interleaving(T;nil;L1;L L = L1
THMnil_interleaving2 L1,L:T List. interleaving(T;L1;nil;L L = L1
THMinterleaving_sublist L,L1,L2:T List. interleaving(T;L1;L2;L L1  L
definterleaving_occurence interleaving_occurence(T;L1;L2;L;f1;f2)
== ||L|| = ||L1||+||L2||  
== & increasing(f1;||L1||) & (j:||L1||. L1[j] = L[(f1(j))]  T)
== & increasing(f2;||L2||) & (j:||L2||. L2[j] = L[(f2(j))]  T)
== & (j1:||L1||, j2:||L2||. f1(j1) = f2(j2 )
THMinterleaving_split L:T List, P:(||L||Prop).
(x:||L||. Dec(P(x)))

(L1,L2:T List, f1:(||L1||||L||), f2:(||L2||||L||).
(interleaving_occurence(T;L1;L2;L;f1;f2)
(& (i:||L1||. P(f1(i))) & (i:||L2||. P(f2(i)))
(& (i:||L||. 
(& ((P(i (j:||L1||. f1(j) = i)) & (P(i (j:||L2||. f2(j) = i))))
THMlast_with_property L:T List, P:(||L||Prop).
(x:||L||. Dec(P(x)))

(i:||L||. P(i))  (i:||L||. P(i) & (j:||L||. i<j  P(j)))
defpermute_list (L o f) == mklist(||L||;i.L[(f(i))])
THMpermute_list_select L:T List, f:(||L||||L||), i:||L||. (L o f)[i] = L[(f(i))]
THMpermute_list_length L:T List, f:(||L||||L||). ||(L o f)|| = ||L||  
defswap swap(L;i;j) == (L o (ij))
THMswap_select L:T List, i,j,x:||L||. swap(L;i;j)[x] = L[((ij)(x))]
THMswap_length L:T List, i,j:||L||. ||swap(L;i;j)|| = ||L||  
THMswap_swap L1:T List, i,j:||L1||. swap(swap(L1;i;j);i;j) = L1
THMswapped_select L1,L2:T List, i,j:||L1||.
L2 = swap(L1;i;j)

L2[i] = L1[j] & L2[j] = L1[i] & ||L2|| = ||L1||   & L1 = swap(L2;i;j)
& (x:||L2||. x = i  x = j  L2[x] = L1[x])
THMswap_cons L:T List, x:Ti,j:{1..(||L||+1)}. swap([x / L];i;j) = [x / swap(L;i-1;j-1)]
THMswap_adjacent_decomp i:L:A List.
i+1<||L||

(X,Y:A List.
(L = (X @ [L[i]; L[(i+1)]] @ Y) & swap(L;i;i+1) = (X @ [L[(i+1)]; L[i]] @ Y))
THMl_before_swap L:T List, i:(||L||-1), a,b:T.
a before b  swap(L;i;i+1)  a before b  L  a = L[(i+1)] & b = L[i]
THMmap_swap f:(BA), x:B List, i,j:||x||. map(f;swap(x;i;j)) = swap(map(f;x);i;j)
defguarded_permutation guarded_permutation(T;P)
== (L1,L2i:(||L1||-1). P(L1,i) & L2 = swap(L1;i;i+1)  T List)^*
THMguarded_permutation_transitivity P:(L:(T List)(||L||-1)Prop). Trans(T List)(_1 guarded_permutation(T;P) _2)
defcount_pairs count(x < y in L | P(x;y))
== sum(if (i<j)P(L[i];L[j]) 1 else 0 fi | i < ||L||; j < ||L||)
THMiseg_map f:(AB), L1,L2:A List. L1  L2  map(f;L1 map(f;L2)
THMpartial_sort_exists P:(L:(T List)(||L||-1)), m:((T List)).
(L:T List, i:(||L||-1). P(L,i P(swap(L;i;i+1),i) & m(swap(L;i;i+1))<m(L))

(L:T List. 
(L':T List. 
((L guarded_permutation(T;L,iP(L,i)) L') & (i:(||L'||-1). P(L',i)))
THMcompose_bij f,g:(TT). Bij(TTf Bij(TTg Bij(TTf o g)
THMrel_exp_list R:(TTProp), k:x,y:T.
(x R^k y)

(L:T List. ||L|| = k+1   & L[0] = x & last(L) = y & (i:kL[iR L[(i+1)]))
THMrel_star_finite n:R:(nnProp), x,y:n. (x (R^*) y (k:(n+1). x R^k y)
THMdecidable__rel_star n:R:(nnProp). (i,j:n. Dec(i R j))  (i,j:n. Dec(i (R^*) j))
defcompose_list compose_list(L) == reduce(p,qp o q;x.x;L)
THMcompose_append L1,L2:(TT) List. compose_list(L1) o compose_list(L2) = compose_list(L1 @ L2)
THMflip_lemma k:x,y,z:k.
y = z  x = y  (xy) = compose_list([(xz); (yz); (xz)])
defcompose_flips compose_flips(L) == compose_list(map(i.(ii+1);L))
THMcompose_flips_append k:L1,L2:(k-1) List.
compose_flips(L1) o compose_flips(L2) = compose_flips(L1 @ L2)
THMflip_adjacent k:x,y:kL:(k-1) List. (xy) = compose_flips(L)
THMpermute_by_flips k:p:(kk). Bij(kkp (L:(k-1) List. p = compose_flips(L))
THMpermute_sum n:f:(n), p:(nn).
Bij(nnp sum(f(p(x)) | x < n) = sum(f(x) | x < n)
THMpermute_double_sum n,m:f:(nm), p:(nn), q:(mm).
Bij(nnp)

Bij(mmq sum(f(p(x),q(y)) | x < ny < m) = sum(f(x,y) | x < ny < m)
THMcount_pairs_swap L:T List, P:(TT), n:(||L||-1).
count(x < y in swap(L;n;n+1) | P(x,y))
=
count(x < y in L | P(x,y))+if P(L[n],L[(n+1)]) -1 else 0 fi
+if P(L[(n+1)],L[n]) 1 else 0 fi
THMpartial_sort_exists_2 L:T List, P:(TT).
(x,y:TP(x,y P(y,x))

(L':T List. 
((L guarded_permutation(T;L,iP(L[i],L[(i+1)])) L')
(& (i:(||L'||-1). P(L'[i],L'[(i+1)])))
defswap_adjacent swap adjacent[P(x;y)](L1,L2)
== i:(||L1||-1). P(L1[i];L1[(i+1)]) & L2 = swap(L1;i;i+1)  A List
THMpartial_sort L:T List, P:(TTProp).
(x,y:T. Dec(P(x,y)))

(x,y:TP(x,y P(y,x))

(L':T List. 
((L (swap adjacent[P(x,y)]^*) L') & (i:(||L'||-1). P(L'[i],L'[(i+1)])))
THMsymmetric_swap_adjacent P:(AAProp). 
(Sym x,y:AP(x,y))  (Sym L1,L2:A List. L1 swap adjacent[P(x,y)] L2)
THMswap_adjacent_instance P:(AAProp), X,Y:A List, a,b:A.
P(a,b ((X @ [ab] @ Y) swap adjacent[P(x,y)] (X @ [ba] @ Y))
THMfilter_swap_adjacent P:(AAProp), f:(A), L1,L2:A List.
(L1 swap adjacent[P(x,y)] L2)

(filter(f;L1) swap adjacent[P(x,y)] filter(f;L2))  filter(f;L1) = filter(f;L2)
THMswap_adjacent_map P:(AAProp), f:(BA), x,y:B List.
(x swap adjacent[P(f(x),f(y))] y (map(f;x) swap adjacent[P(x,y)] map(f;y))
IF YOU CAN SEE THIS go to /sfa/Nuprl/Shared/Xindentation_hack_doc.html

Origin Definitions Sections MarkB generic Doc