Definition: eq_list 
as =b bs ==
  Y 
  (λeq_list,as,bs. case as of 
                     [] => null(bs) 
                     a::as' =>
                      case bs of [] => ff | b::bs' => (a (=b) b) ∧b (eq_list as' bs') esac 
                  esac) 
  as 
  bs
 
Lemma: eq_list_wf 
∀s:DSet. ∀as,bs:|s| List.  (as =b bs ∈ 𝔹)
 
Lemma: assert_of_eq_list 
∀s:DSet. ∀as,bs:|s| List.  (↑(as =b bs) ⇐⇒ as = bs ∈ (|s| List))
 
Definition: dset_list 
s List ==  mk_dset(|s| List, λx,y. (x =b y))
 
Lemma: dset_list_wf 
∀s:DSet. (s List ∈ DSet)
 
Definition: mem_f 
mem_f(T;a;bs) ==  Y (λmem_f,bs. case bs of [] => False | b::bs' => (b = a ∈ T) ∨ (mem_f bs') esac) bs
 
Lemma: mem_f_wf 
∀T:Type. ∀a:T. ∀bs:T List.  (mem_f(T;a;bs) ∈ ℙ)
 
Lemma: list_in_mem_f_list 
∀T:Type. ∀as:T List.  (as ∈ {x:T| mem_f(T;x;as)}  List)
 
Definition: mon_reduce 
Π as ==  reduce(*;e;as)
 
Lemma: mon_reduce_wf 
∀g:IMonoid. ∀as:|g| List.  (Π as ∈ |g|)
 
Lemma: comb_for_mon_reduce_wf 
λg,as,z. (Π as) ∈ g:IMonoid ⟶ as:(|g| List) ⟶ (↓True) ⟶ |g|
 
Lemma: extend_perm_over_itcomp 
∀n:ℕ. ∀ps:Sym(n) List.  (↑{n}(Π ps) = (Π map(λp.↑{n}(p);ps)) ∈ Sym(n + 1))
 
Lemma: sym_grp_is_swaps 
∀n:ℕ. ∀p:Sym(n).  ∃abs:(ℕn × ℕn) List. (p = (Π map(λab.let a,b = ab in txpose_perm(a;b);abs)) ∈ Sym(n))
 
Lemma: sym_grp_is_swaps_a 
∀n:{1...}. ∀p:Sym(n).
  ∃abs:{ab:ℕn × ℕn| fst(ab) < snd(ab)}  List. (p = (Π map(λab.let a,b = ab in txpose_perm(a;b);abs)) ∈ Sym(n))
 
Lemma: perm_induction 
∀n:ℕ. ∀Q:Sym(n) ⟶ ℙ.  (Q[id_perm()] ⇒ (∀p:Sym(n). (Q[p] ⇒ (∀i,j:ℕn.  Q[txpose_perm(i;j) O p]))) ⇒ {∀p:Sym(n). Q[p]})
 
Lemma: perm_induction_a 
∀n:ℕ. ∀Q:Sym(n) ⟶ ℙ.  (Q[id_perm()] ⇒ (∀p:Sym(n). (Q[p] ⇒ (∀i:ℕ+n. Q[txpose_perm(i;0) O p]))) ⇒ {∀p:Sym(n). Q[p]})
 
Lemma: perm_induction_b 
∀n:ℕ. ∀Q:Sym(n) ⟶ ℙ.  (Q[id_perm()] ⇒ (∀p:Sym(n). (Q[p] ⇒ (∀i:ℕ+n. Q[p O txpose_perm(i;0)]))) ⇒ {∀p:Sym(n). Q[p]})
 
Lemma: mon_itop_perm_invar 
∀g:IAbMonoid. ∀n:ℕ. ∀E:ℕn ⟶ |g|. ∀p:Sym(n).  ((Π 0 ≤ j < n. E[p.f j]) = (Π 0 ≤ j < n. E[j]) ∈ |g|)
 
Lemma: mon_reduce_append 
∀g:IMonoid. ∀as,bs:|g| List.  ((Π as @ bs) = ((Π as) * (Π bs)) ∈ |g|)
 
Lemma: mon_reduce_eq_itop 
∀g:IMonoid. ∀as:|g| List.  ((Π as) = (Π 0 ≤ i < ||as||. as[i]) ∈ |g|)
 
Definition: mon_for 
For{g} x ∈ as. f[x] ==  For{T,*,e} x ∈ as. f[x]
 
Lemma: mon_for_wf 
∀g:IMonoid. ∀A:Type. ∀as:A List. ∀f:A ⟶ |g|.  (For{g} x ∈ as. f[x] ∈ |g|)
 
Lemma: comb_for_mon_for_wf 
λg,A,as,f,z. For{g} x ∈ as. f[x] ∈ g:IMonoid ⟶ A:Type ⟶ as:(A List) ⟶ f:(A ⟶ |g|) ⟶ (↓True) ⟶ |g|
 
Lemma: mon_for_nil_lemma 
∀f,g,T:Top.  (For{g} x ∈ []. f[x] ~ e)
 
Lemma: mon_for_cons_lemma 
∀f,as,a,g,T:Top.  (For{g} x ∈ [a / as]. f[x] ~ f[a] * (For{g} x ∈ as. f[x]))
 
Lemma: mon_for_eq_itop 
∀g:IMonoid. ∀A:Type. ∀as:A List. ∀f:A ⟶ |g|.  ((For{g} x ∈ as. f[x]) = (Π 0 ≤ i < ||as||. f[as[i]]) ∈ |g|)
 
Lemma: mon_for_append 
∀g:IMonoid. ∀A:Type. ∀f:A ⟶ |g|. ∀as,as':A List.
  ((For{g} x ∈ as @ as'. f[x]) = ((For{g} x ∈ as. f[x]) * (For{g} x ∈ as'. f[x])) ∈ |g|)
 
Lemma: select_reject_permr 
∀T:Type. ∀as:T List. ∀i:ℕ||as||.  ([as[i] / as\[i]] ≡(T) as)
 
Lemma: mon_reduce_functionality_wrt_permr 
∀g:IAbMonoid. ∀xs,ys:|g| List.  ((xs ≡(|g|) ys) ⇒ ((Π xs) = (Π ys) ∈ |g|))
 
Lemma: map_permr_func 
∀A,B:Type. ∀f:A ⟶ B. ∀as,as':A List.  ((as ≡(A) as') ⇒ (map(f;as) ≡(B) map(f;as')))
 
Lemma: map_functionality 
∀A,B:Type. ∀f,f':A ⟶ B. ∀as,as':A List.  ((f = f' ∈ (A ⟶ B)) ⇒ (as ≡(A) as') ⇒ (map(f;as) ≡(B) map(f';as')))
 
Lemma: map_functionality_2 
∀A,B:Type. ∀as:A List. ∀f,f':A ⟶ B. ∀as:A List.
  ((f = f' ∈ ({x:A| mem_f(A;x;as)}  ⟶ B)) ⇒ (map(f;as) = map(f';as) ∈ (B List)))
 
Lemma: mon_for_functionality_wrt_permr 
∀g:IAbMonoid. ∀A:Type. ∀as,as':A List. ∀f,f':A ⟶ |g|.
  ((as ≡(A) as')
  ⇒ (∀x:A. (mem_f(A;x;as) ⇒ (f[x] = f'[x] ∈ |g|)))
  ⇒ ((For{g} x ∈ as. f[x]) = (For{g} x ∈ as'. f'[x]) ∈ |g|))
 
Lemma: length_mon_for_char 
∀A:Type. ∀as:A List.  (||as|| = (For{<ℤ+>} x ∈ as. 1) ∈ ℤ)
 
Lemma: length_functionality_wrt_permr 
∀A:Type. ∀as,as':A List.  ((as ≡(A) as') ⇒ (||as|| = ||as'|| ∈ ℤ))
 
Definition: mon_htfor 
HTFor{g} h::t ∈ as. f[h; t] ==  ForHdTl{A,*,e} h::t ∈ as. f[h; t]
 
Lemma: mon_htfor_wf 
∀g:IMonoid. ∀A:Type. ∀as:A List. ∀f:A ⟶ (A List) ⟶ |g|.  (HTFor{g} h::t ∈ as. f[h;t] ∈ |g|)
 
Lemma: mon_htfor_nil_lemma 
∀f,g,T:Top.  (HTFor{g} h::t ∈ []. f[h;t] ~ e)
 
Lemma: mon_htfor_cons_lemma 
∀f,as,a,g,T:Top.  (HTFor{g} h::t ∈ [a / as]. f[h;t] ~ f[a;as] * (HTFor{g} h::t ∈ as. f[h;t]))
 
Lemma: mon_for_map 
∀g:IAbMonoid. ∀A,B:Type. ∀e:A ⟶ B. ∀f:B ⟶ |g|. ∀as:A List.
  ((For{g} y ∈ map(e;as). f[y]) = (For{g} x ∈ as. f[e x]) ∈ |g|)
 
Lemma: mon_for_of_id 
∀g:IAbMonoid. ∀A:Type. ∀as:A List.  ((For{g} x ∈ as. e) = e ∈ |g|)
 
Lemma: mon_for_of_op 
∀g:IAbMonoid. ∀A:Type. ∀e,f:A ⟶ |g|. ∀as:A List.
  ((For{g} x ∈ as. (e[x] * f[x])) = ((For{g} x ∈ as. e[x]) * (For{g} x ∈ as. f[x])) ∈ |g|)
 
Lemma: mon_for_swap 
∀g:IAbMonoid. ∀A,B:Type. ∀f:A ⟶ B ⟶ |g|. ∀as:A List. ∀bs:B List.
  ((For{g} x ∈ as. For{g} y ∈ bs. f[x;y]) = (For{g} y ∈ bs. For{g} x ∈ as. f[x;y]) ∈ |g|)
 
Lemma: mon_for_when_swap 
∀g:Mon. ∀A:Type. ∀as:A List. ∀b:𝔹. ∀f:A ⟶ |g|.
  ((For{g} x ∈ as. (when b. f[x])) = (when b. (For{g} x ∈ as. f[x])) ∈ |g|)
 
Definition: mem 
a ∈b as ==  ∃b x(:|s|) ∈ as. x (=b) a
 
Lemma: mem_wf 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  (a ∈b bs ∈ 𝔹)
 
Lemma: mem_nil_lemma 
∀a,s:Top.  (a ∈b [] ~ ff)
 
Lemma: mem_cons_lemma 
∀bs,b,a,s:Top.  (a ∈b [b / bs] ~ (b (=b) a) ∨b(a ∈b bs))
 
Lemma: comb_for_mem_wf 
λs,a,bs,z. (a ∈b bs) ∈ s:DSet ⟶ a:|s| ⟶ bs:(|s| List) ⟶ (↓True) ⟶ 𝔹
 
Lemma: mon_for_when_none 
∀s:DSet. ∀g:IMonoid. ∀f:|s| ⟶ |g|. ∀b:|s| ⟶ 𝔹. ∀as:|s| List.
  ((∀x:|s|. ((↑(x ∈b as)) ⇒ (¬↑b[x]))) ⇒ ((For{g} x ∈ as. (when b[x]. f[x])) = e ∈ |g|))
 
Definition: ball 
∀bx(:A) ∈ as. f[x] ==  For{<𝔹,∧b>} x ∈ as. f[x]
 
Lemma: ball_wf 
∀A:Type. ∀as:A List. ∀f:A ⟶ 𝔹.  (∀bx(:A) ∈ as. f[x] ∈ 𝔹)
 
Lemma: ball_nil_lemma 
∀f,T:Top.  (∀bx(:T) ∈ []. f[x] ~ tt)
 
Lemma: ball_cons_lemma 
∀f,as,a,T:Top.  (∀bx(:T) ∈ [a / as]. f[x] ~ f[a] ∧b (∀bx(:T) ∈ as. f[x]))
 
Lemma: comb_for_ball_wf 
λA,as,f,z. ∀bx(:A) ∈ as. f[x] ∈ A:Type ⟶ as:(A List) ⟶ f:(A ⟶ 𝔹) ⟶ (↓True) ⟶ 𝔹
 
Lemma: ball_char 
∀s:DSet. ∀as:|s| List. ∀f:|s| ⟶ 𝔹.  (↑(∀bx(:|s|) ∈ as. f[x]) ⇐⇒ ∀x:|s|. ((↑(x ∈b as)) ⇒ (↑f[x])))
 
Definition: distinct 
distinct{s}(ps) ==  HTFor{<𝔹,∧b>} q::qs ∈ ps. ∀br(:|s|) ∈ qs. (¬b(r (=b) q))
 
Lemma: distinct_wf 
∀s:DSet. ∀ps:|s| List.  (distinct{s}(ps) ∈ 𝔹)
 
Lemma: distinct_nil_lemma 
∀s:Top. (distinct{s}([]) ~ tt)
 
Lemma: distinct_cons_lemma 
∀as,a,s:Top.  (distinct{s}([a / as]) ~ (∀br(:|s|) ∈ as. (¬b(r (=b) a))) ∧b distinct{s}(as))
 
Lemma: mon_for_when_unique 
∀s:DSet. ∀g:IMonoid. ∀f:|s| ⟶ |g|. ∀b:|s| ⟶ 𝔹. ∀u:|s|.
  ((↑b[u])
  ⇒ (∀as:|s| List
        ((↑distinct{s}(as))
        ⇒ (↑(u ∈b as))
        ⇒ (∀v:|s|. ((↑b[v]) ⇒ (↑(v ∈b as)) ⇒ (v = u ∈ |s|)))
        ⇒ ((For{g} x ∈ as. (when b[x]. f[x])) = f[u] ∈ |g|))))
 
Definition: lapp_imon 
<T List,@> ==  <T List, λx,y. tt, λx,y. tt, λx,y. (x @ y), [], λx.x>
 
Lemma: lapp_imon_wf 
∀T:Type. (<T List,@> ∈ IMonoid)
 
Definition: lapp_mon 
<s List, @> ==  <|s| List, λx,y. (x =b y), λx,y. tt, λx,y. (x @ y), [], λx.x>
 
Lemma: lapp_mon_wf 
∀s:DSet. (<s List, @> ∈ Mon)
 
Lemma: lapp_fact 
∀s:DSet. ∀as:|s| List.  (as = (For{<s List, @>} x ∈ as. [x]) ∈ (|s| List))
 
Lemma: lapp_fact_a 
∀T:Type. ∀as:T List.  (as = (For{<T List,@>} x ∈ as. [x]) ∈ (T List))
 
Lemma: lapp_fact_b 
∀T:Type. ∀as:T List.  (as = (Π 0 ≤ i < ||as||. [as[i]]) ∈ (T List))
 
Lemma: dist_hom_over_mon_for 
∀T:Type. ∀m,n:IMonoid. ∀f:MonHom(m,n). ∀a:T List. ∀g:T ⟶ |m|.
  ((f (For{m} x ∈ a. g[x])) = (For{n} x ∈ a. (f g[x])) ∈ |n|)
 
Definition: bexists 
∃bx(:A) ∈ as. f[x] ==  ∃b x(:A) ∈ as. f[x]
 
Lemma: bexists_wf 
∀A:Type. ∀as:A List. ∀f:A ⟶ 𝔹.  (∃bx(:A) ∈ as. f[x] ∈ 𝔹)
 
Lemma: bexists_nil_lemma 
∀f,T:Top.  (∃bx(:T) ∈ []. f[x] ~ ff)
 
Lemma: bexists_cons_lemma 
∀f,as,a,T:Top.  (∃bx(:T) ∈ [a / as]. f[x] ~ f[a] ∨b(∃bx(:T) ∈ as. f[x]))
 
Lemma: ball_functionality_wrt_permr 
∀T:Type. ∀as,bs:T List. ∀P,Q:T ⟶ 𝔹.  ((as ≡(T) bs) ⇒ (∀x:T. P[x] = Q[x]) ⇒ ∀bx(:T) ∈ as. P[x] = ∀bx(:T) ∈ bs. Q[x])
 
Lemma: bexists_iff_exists_nth 
∀s:DSet. ∀f:|s| ⟶ 𝔹. ∀as:|s| List.  (↑∃b x(:|s|) ∈ as. f[x] ⇐⇒ ∃n:ℕ||as||. (↑f[as[n]]))
 
Lemma: bnot_thru_exists 
∀A:Type. ∀as:A List. ∀f:A ⟶ 𝔹.  ¬b(∃bx(:A) ∈ as. f[x]) = ∀bx(:A) ∈ as. (¬bf[x])
 
Lemma: mem_iff_mem_f 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  (↑(a ∈b bs) ⇐⇒ mem_f(|s|;a;bs))
 
Lemma: mem_functionality_wrt_permr 
∀s:DSet. ∀a,b:|s|. ∀as,bs:|s| List.  ((a = b ∈ |s|) ⇒ (as ≡(|s|) bs) ⇒ a ∈b as = b ∈b bs)
 
Lemma: bexists_char 
∀s:DSet. ∀as:|s| List. ∀f:|s| ⟶ 𝔹.  (↑(∃bx(:|s|) ∈ as. f[x]) ⇐⇒ ∃x:|s|. ((↑(x ∈b as)) ∧ (↑f[x])))
 
Lemma: mem_iff_exists 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  (↑(a ∈b bs) ⇐⇒ ∃n:ℕ||bs||. (bs[n] = a ∈ |s|))
 
Lemma: cons_permr_mem 
∀s:DSet. ∀a:|s|. ∀as,bs:|s| List.  (([a / as] ≡(|s|) bs) ⇒ (↑(a ∈b bs)))
 
Definition: remove1 
as \ a ==  Y (λremove1,as. case as of [] => [] | a'::as' => if a' (=b) a then as' else [a' / (remove1 as')] fi  esac) as
 
Lemma: remove1_wf 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  (bs \ a ∈ |s| List)
 
Lemma: comb_for_remove1_wf 
λs,a,bs,z. (bs \ a) ∈ s:DSet ⟶ a:|s| ⟶ bs:(|s| List) ⟶ (↓True) ⟶ (|s| List)
 
Lemma: remove1_nil_lemma 
∀a,s:Top.  ([] \ a ~ [])
 
Lemma: remove1_cons_lemma 
∀bs,b,a,s:Top.  ([b / bs] \ a ~ if b (=b) a then bs else [b / (bs \ a)] fi )
 
Lemma: cons_remove1_permr 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  ((↑(a ∈b bs)) ⇒ ([a / (bs \ a)] ≡(|s|) bs))
 
Lemma: not_mem_remove1 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  ((¬↑(a ∈b bs)) ⇒ ((bs \ a) = bs ∈ (|s| List)))
 
Lemma: remove1_functionality_wrt_permr 
∀s:DSet. ∀a,a':|s|. ∀bs,bs':|s| List.  ((a = a' ∈ |s|) ⇒ (bs ≡(|s|) bs') ⇒ ((bs \ a) ≡(|s|) (bs' \ a')))
 
Definition: bpermr 
as ≡b bs ==  Y (λbpermr,as,bs. case as of [] => null(bs) | a::as' => (a ∈b bs) ∧b (bpermr as' (bs \ a)) esac) as bs
 
Lemma: bpermr_wf 
∀s:DSet. ∀as,bs:|s| List.  (as ≡b bs ∈ 𝔹)
 
Lemma: assert_of_bpermr 
∀s:DSet. ∀as,bs:|s| List.  (↑(as ≡b bs) ⇐⇒ as ≡(|s|) bs)
 
Lemma: null_functionality_wrt_permr 
∀T:Type. ∀as,bs:T List.  ((as ≡(T) bs) ⇒ null(as) = null(bs))
 
Definition: count 
a #∈ as ==  For{<ℤ+>} x ∈ as. b2i(x (=b) a)
 
Lemma: count_wf 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  (a #∈ bs ∈ ℤ)
 
Lemma: count_nil_lemma 
∀a,s:Top.  (a #∈ [] ~ 0)
 
Lemma: count_cons_lemma 
∀bs,b,a,s:Top.  (a #∈ [b / bs] ~ b2i(b (=b) a) + (a #∈ bs))
 
Lemma: comb_for_count_wf 
λs,a,bs,z. (a #∈ bs) ∈ s:DSet ⟶ a:|s| ⟶ bs:(|s| List) ⟶ (↓True) ⟶ ℤ
 
Lemma: count_functionality 
∀s:DSet. ∀a,a':|s|. ∀bs,bs':|s| List.  ((a = a' ∈ |s|) ⇒ (bs ≡(|s|) bs') ⇒ ((a #∈ bs) = (a' #∈ bs') ∈ ℤ))
 
Lemma: count_bounds 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  ((0 ≤ (a #∈ bs)) ∧ ((a #∈ bs) ≤ ||bs||))
 
Lemma: mem_iff_count_nzero 
∀s:DSet. ∀a:|s|. ∀bs:|s| List.  (↑(a ∈b bs) ⇐⇒ (a #∈ bs) > 0)
 
Lemma: permr_iff_eq_counts 
∀s:DSet. ∀as,bs:|s| List.  (as ≡(|s|) bs ⇐⇒ ∀x:|s|. ((x #∈ as) = (x #∈ bs) ∈ ℤ))
 
Lemma: permr_iff_eq_counts_a 
∀s:DSet. ∀as,bs:|s| List.  (as ≡(|s|) bs ⇐⇒ {∀x:|s|. ((x #∈ as) = (x #∈ bs) ∈ ℤ)})
 
Definition: dislist 
DisList{s} ==  {as:|s| List| ∀x:|s|. ((x #∈ as) ≤ 1)} 
 
Lemma: dislist_wf 
∀s:DSet. (DisList{s} ∈ Type)
 
Lemma: dislist_properties 
∀s:DSet. ∀as:DisList{s}.  {∀x:|s|. ((x #∈ as) ≤ 1)}
 
Definition: diff 
as - bs ==  Y (λdiff,as,bs. case bs of [] => as | b::bs' => diff (as \ b) bs' esac) as bs
 
Lemma: diff_wf 
∀s:DSet. ∀as,bs:|s| List.  (as - bs ∈ |s| List)
 
Lemma: diff_nil_lemma 
∀as,s:Top.  (as - [] ~ as)
 
Lemma: diff_cons_lemma 
∀bs,b,as,s:Top.  (as - [b / bs] ~ (as \ b) - bs)
 
Lemma: count_append 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  ((c #∈ (as @ bs)) = ((c #∈ as) + (c #∈ bs)) ∈ ℤ)
 
Lemma: mem_append 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  c ∈b (as @ bs) = (c ∈b as) ∨b(c ∈b bs)
 
Lemma: mem_map 
∀s,s':DSet. ∀f:|s| ⟶ |s'|. ∀x:|s|. ∀as:|s| List.  ((↑(x ∈b as)) ⇒ (↑((f x) ∈b map(f;as))))
 
Lemma: count_remove1 
∀s:DSet. ∀as:|s| List. ∀b,c:|s|.  ((c #∈ (as \ b)) = ((c #∈ as) -- b2i(b (=b) c)) ∈ ℤ)
 
Lemma: count_diff 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  ((c #∈ (as - bs)) = ((c #∈ as) -- (c #∈ bs)) ∈ ℤ)
 
Lemma: mem_diff 
∀s:DSet. ∀as:DisList{s}. ∀bs:|s| List. ∀c:|s|.  c ∈b (as - bs) = (c ∈b as) ∧b (¬b(c ∈b bs))
 
Lemma: diff_functionality_wrt_permr 
∀s:DSet. ∀as,as',bs,bs':|s| List.  ((as ≡(|s|) as') ⇒ (bs ≡(|s|) bs') ⇒ ((as - bs) ≡(|s|) (as' - bs')))
 
Definition: lmin 
lmin(s;as;bs) ==  as - (as - bs)
 
Lemma: lmin_wf 
∀s:DSet. ∀as,bs:|s| List.  (lmin(s;as;bs) ∈ |s| List)
 
Lemma: count_lmin 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  ((c #∈ lmin(s;as;bs)) = imin(c #∈ as;c #∈ bs) ∈ ℤ)
 
Lemma: mem_lmin 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  c ∈b lmin(s;as;bs) = (c ∈b as) ∧b (c ∈b bs)
 
Lemma: lmin_functionality_wrt_permr 
∀s:DSet. ∀as,as',bs,bs':|s| List.  ((as ≡(|s|) as') ⇒ (bs ≡(|s|) bs') ⇒ (lmin(s;as;bs) ≡(|s|) lmin(s;as';bs')))
 
Lemma: lmin_com 
∀s:DSet. ∀as,bs:|s| List.  (lmin(s;as;bs) ≡(|s|) lmin(s;bs;as))
 
Lemma: lmin_assoc 
∀s:DSet. ∀as,bs,cs:|s| List.  (lmin(s;as;lmin(s;bs;cs)) ≡(|s|) lmin(s;lmin(s;as;bs);cs))
 
Definition: lmax 
lmax(s;as;bs) ==  (as - bs) @ bs
 
Lemma: lmax_wf 
∀s:DSet. ∀as,bs:|s| List.  (lmax(s;as;bs) ∈ |s| List)
 
Lemma: count_lmax 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  ((c #∈ lmax(s;as;bs)) = imax(c #∈ as;c #∈ bs) ∈ ℤ)
 
Lemma: mem_lmax 
∀s:DSet. ∀as,bs:|s| List. ∀c:|s|.  c ∈b lmax(s;as;bs) = (c ∈b as) ∨b(c ∈b bs)
 
Lemma: lmax_functionality_wrt_permr 
∀s:DSet. ∀as,as',bs,bs':|s| List.  ((as ≡(|s|) as') ⇒ (bs ≡(|s|) bs') ⇒ (lmax(s;as;bs) ≡(|s|) lmax(s;as';bs')))
 
Lemma: lmax_com 
∀s:DSet. ∀as,bs:|s| List.  (lmax(s;as;bs) ≡(|s|) lmax(s;bs;as))
 
Lemma: lmax_assoc 
∀s:DSet. ∀as,bs,cs:|s| List.  (lmax(s;as;lmax(s;bs;cs)) ≡(|s|) lmax(s;lmax(s;as;bs);cs))
 
Definition: bsublist 
bsublist(s;as;bs) ==  null(as - bs)
 
Lemma: bsublist_wf 
∀s:DSet. ∀as,bs:|s| List.  (bsublist(s;as;bs) ∈ 𝔹)
 
Definition: bsuplist 
bsuplist(s;as;bs) ==  bsublist(s;bs;as)
 
Lemma: bsuplist_wf 
∀s:DSet. ∀as,bs:|s| List.  (bsuplist(s;as;bs) ∈ 𝔹)
 
Lemma: count_bsublist 
∀s:DSet. ∀as,bs:|s| List.  (↑bsublist(s;as;bs) ⇐⇒ {∀c:|s|. ((c #∈ as) ≤ (c #∈ bs))})
 
Lemma: count_bsublist_a 
∀s:DSet. ∀as,bs:|s| List.  (↑bsublist(s;as;bs) ⇐⇒ ∀c:|s|. ((c #∈ as) ≤ (c #∈ bs)))
 
Lemma: mem_bsublist_imp 
∀s:DSet. ∀as,bs:|s| List.  ((↑bsublist(s;as;bs)) ⇒ (∀c:|s|. ((↑(c ∈b as)) ⇒ (↑(c ∈b bs)))))
 
Lemma: mem_bsublist 
∀s:DSet. ∀as:DisList{s}. ∀bs:|s| List.  (↑bsublist(s;as;bs) ⇐⇒ ∀c:|s|. ((↑(c ∈b as)) ⇒ (↑(c ∈b bs))))
 
Lemma: bsublist_weakening 
∀s:DSet. ∀as,bs:|s| List.  ((as ≡(|s|) bs) ⇒ (↑bsublist(s;as;bs)))
 
Lemma: bsublist_transitivity 
∀s:DSet. ∀us,vs,ws:|s| List.  ((↑bsublist(s;us;vs)) ⇒ (↑bsublist(s;vs;ws)) ⇒ (↑bsublist(s;us;ws)))
 
Lemma: bsublist_functionality_wrt_permr 
∀s:DSet. ∀as,bs,as',bs':|s| List.  ((as ≡(|s|) bs) ⇒ (as' ≡(|s|) bs') ⇒ bsublist(s;as;as') = bsublist(s;bs;bs'))
 
Lemma: bsublist_functionality_wrt_bsublist 
∀s:DSet. ∀as,as',bs,bs':|s| List.
  ((↑bsuplist(s;as;bs)) ⇒ (↑bsublist(s;as';bs')) ⇒ (↑(bsublist(s;as;as') ⇒b bsublist(s;bs;bs'))))
 
Lemma: bsublist_append_diff 
∀s:DSet. ∀as,bs:|s| List.  ((↑bsublist(s;as;bs)) ⇒ (∃cs:|s| List. ((cs @ as) ≡(|s|) bs)))
 
Lemma: ball_respects_bsublist 
∀s:DSet. ∀us,vs:|s| List.
  ((↑bsublist(s;us;vs)) ⇒ (∀Q:|s| ⟶ 𝔹. ((↑(For{<𝔹,∧b>} x ∈ vs. Q[x])) ⇒ (↑(For{<𝔹,∧b>} x ∈ us. Q[x])))))
 
Lemma: ball_functionality_wrt_bimplies 
∀T:Type. ∀as:T List. ∀P,Q:T ⟶ 𝔹.  ((∀x:T. (↑(P[x] ⇒b Q[x]))) ⇒ (↑(∀bx(:T) ∈ as. P[x] ⇒b (∀bx(:T) ∈ as. Q[x]))))
 
Lemma: distinct_iff_counts_le_one 
∀s:DSet. ∀ps:|s| List.  (↑distinct{s}(ps) ⇐⇒ ∀x:|s|. ((x #∈ ps) ≤ 1))
 
Lemma: firstn_factor 
∀T:Type. ∀as:T List. ∀n:{0...||as||}.  (firstn(n;as) = (Π 0 ≤ i < n. [as[i]]) ∈ (T List))
 
Lemma: nth_tl_factor 
∀T:Type. ∀n:ℕ. ∀as:T List.  ((n ≤ ||as||) ⇒ (nth_tl(n;as) = (Π n ≤ i < ||as||. [as[i]]) ∈ (T List)))
 
Lemma: segment_factor 
∀T:Type. ∀as:T List. ∀i:{0...||as||}. ∀j:{i...||as||}.  ((as[i..j-]) = (Π i ≤ k < j. [as[k]]) ∈ (T List))
 
Lemma: append_segment 
∀T:Type. ∀as:T List. ∀i:{0...||as||}. ∀j:{i...||as||}. ∀k:{j...||as||}.
  (((as[i..j-]) @ (as[j..k-])) = (as[i..k-]) ∈ (T List))
 
Definition: fin_type 
{as} ==  {a:|s|| ↑(a ∈b as)} 
 
Lemma: fin_type_wf 
∀s:DSet. ∀as:|s| List.  ({as} ∈ Type)
 
Lemma: fin_type_properties 
∀s:DSet. ∀as:|s| List. ∀a:{as}.  (↑(a ∈b as))
 
Lemma: fin_type_inc 
∀s:DSet. ∀as,bs:|s| List.  ((↑bsublist(s;as;bs)) ⇒ ({as} ⊆r {bs}))
 
Lemma: whole_segment_example 
∀T:Type. ∀as:T List.  ((as[0..||as||-]) = as ∈ (T List))
Home
Index