def | l_disjoint |
|
def | l_all |
|
THM | l_all_cons |
|
THM | filter_trivial |
|
THM | filter_trivial2 |
|
THM | filter_is_nil |
|
THM | list_set_type |
|
THM | l_all_map |
|
THM | l_all_nil |
|
THM | l_all_reduce |
|
THM | sublist_filter |
|
THM | l_before_filter |
x before y filter(P;l) P(x) & P(y) & x before y l |
THM | no_repeats_filter |
|
THM | decidable__l_all |
|
def | l_exists |
|
THM | l_exists_nil |
|
THM | l_exists_cons |
|
THM | decidable__l_exists |
|
def | mapfilter |
|
THM | member_map_filter |
(x mapfilter(f;P;L)) (y:T. (y L) & P(y) & x = f(y)) |
def | sublist_occurence |
== increasing(f;||L1||) & (j:||L1||. L1[j] = L2[(f(j))] T) |
THM | range_sublist |
increasing(f;n) (L1:T List. ||L1|| = n & sublist_occurence(T;L1;L;f)) |
def | disjoint_sublists |
== 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)) |
THM | disjoint_sublists_sublist |
|
def | interleaving |
== ||L|| = ||L1||+||L2|| & disjoint_sublists(T;L1;L2;L) |
THM | nil_interleaving |
|
THM | nil_interleaving2 |
|
THM | interleaving_sublist |
|
def | interleaving_occurence |
== ||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) ) |
THM | interleaving_split |
(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)))) |
THM | last_with_property |
(x:||L||. Dec(P(x))) (i:||L||. P(i)) (i:||L||. P(i) & (j:||L||. i<j P(j))) |
def | permute_list |
|
THM | permute_list_select |
|
THM | permute_list_length |
|
def | swap |
|
THM | swap_select |
|
THM | swap_length |
|
THM | swap_swap |
|
THM | swapped_select |
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]) |
THM | swap_cons |
|
THM | swap_adjacent_decomp |
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)) |
THM | l_before_swap |
a before b swap(L;i;i+1) a before b L a = L[(i+1)] & b = L[i] |
THM | map_swap |
|
def | guarded_permutation |
== (L1,L2. i:(||L1||-1). P(L1,i) & L2 = swap(L1;i;i+1) T List)^* |
THM | guarded_permutation_transitivity |
|
def | count_pairs |
== sum(if (i<j)P(L[i];L[j]) 1 else 0 fi | i < ||L||; j < ||L||) |
THM | iseg_map |
|
THM | partial_sort_exists |
(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,i. P(L,i)) L') & (i:(||L'||-1). P(L',i))) |
THM | compose_bij |
|
THM | rel_exp_list |
(x R^k y) (L:T List. ||L|| = k+1 & L[0] = x & last(L) = y & (i:k. L[i] R L[(i+1)])) |
THM | rel_star_finite |
|
THM | decidable__rel_star |
|
def | compose_list |
|
THM | compose_append |
|
THM | flip_lemma |
y = z x = y (x, y) = compose_list([(x, z); (y, z); (x, z)]) |
def | compose_flips |
|
THM | compose_flips_append |
compose_flips(L1) o compose_flips(L2) = compose_flips(L1 @ L2) |
THM | flip_adjacent |
|
THM | permute_by_flips |
|
THM | permute_sum |
Bij(n; n; p) sum(f(p(x)) | x < n) = sum(f(x) | x < n) |
THM | permute_double_sum |
Bij(n; n; p) Bij(m; m; q) sum(f(p(x),q(y)) | x < n; y < m) = sum(f(x,y) | x < n; y < m) |
THM | count_pairs_swap |
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 |
THM | partial_sort_exists_2 |
(x,y:T. P(x,y) P(y,x)) (L':T List. ((L guarded_permutation(T;L,i. P(L[i],L[(i+1)])) L') (& (i:(||L'||-1). P(L'[i],L'[(i+1)]))) |
def | swap_adjacent |
== i:(||L1||-1). P(L1[i];L1[(i+1)]) & L2 = swap(L1;i;i+1) A List |
THM | partial_sort |
(x,y:T. Dec(P(x,y))) (x,y:T. P(x,y) P(y,x)) (L':T List. ((L (swap adjacent[P(x,y)]^*) L') & (i:(||L'||-1). P(L'[i],L'[(i+1)]))) |
THM | symmetric_swap_adjacent |
(Sym x,y:A. P(x,y)) (Sym L1,L2:A List. L1 swap adjacent[P(x,y)] L2) |
THM | swap_adjacent_instance |
P(a,b) ((X @ [a; b] @ Y) swap adjacent[P(x,y)] (X @ [b; a] @ Y)) |
THM | filter_swap_adjacent |
(L1 swap adjacent[P(x,y)] L2) (filter(f;L1) swap adjacent[P(x,y)] filter(f;L2)) filter(f;L1) = filter(f;L2) |
THM | swap_adjacent_map |
(x swap adjacent[P(f(x),f(y))] y) (map(f;x) swap adjacent[P(x,y)] map(f;y)) |