Definition: perm_sig
perm_sig(T) ==  f:T ⟶ T × (T ⟶ T)

Lemma: perm_sig_wf
T:Type. (perm_sig(T) ∈ Type)

Definition: perm_f
p.f ==  fst(p)

Lemma: perm_f_wf
T:Type. ∀p:perm_sig(T).  (p.f ∈ T ⟶ T)

Definition: perm_b
p.b ==  snd(p)

Lemma: perm_b_wf
T:Type. ∀p:perm_sig(T).  (p.b ∈ T ⟶ T)

Lemma: comb_for_perm_sig_wf
λT,z. perm_sig(T) ∈ T:Type ⟶ (↓True) ⟶ Type

Definition: perm
Perm(T) ==  {p:perm_sig(T)| InvFuns(T;T;p.f;p.b)} 

Lemma: perm_wf
T:Type. (Perm(T) ∈ Type)

Lemma: comb_for_perm_wf
λT,z. Perm(T) ∈ T:Type ⟶ (↓True) ⟶ Type

Lemma: perm_properties
T:Type. ∀p:Perm(T).  InvFuns(T;T;p.f;p.b)

Definition: mk_perm
mk_perm(f;b) ==  <f, b>

Lemma: mk_perm_wf
T:Type. ∀f,b:T ⟶ T.  (mk_perm(f;b) ∈ perm_sig(T))

Lemma: comb_for_mk_perm_wf
λT,f,b,z. mk_perm(f;b) ∈ T:Type ⟶ f:(T ⟶ T) ⟶ b:(T ⟶ T) ⟶ (↓True) ⟶ perm_sig(T)

Lemma: mk_perm_wf_a
T:Type. ∀f,b:T ⟶ T.  (InvFuns(T;T;f;b)  (mk_perm(f;b) ∈ Perm(T)))

Lemma: comb_for_mk_perm_wf_a
λT,f,b,z. mk_perm(f;b) ∈ T:Type ⟶ f:(T ⟶ T) ⟶ b:(T ⟶ T) ⟶ (↓InvFuns(T;T;f;b)) ⟶ Perm(T)

Lemma: mk_perm_eta_rw
T:Type. ∀p:Perm(T).  (mk_perm(p.f;p.b) p ∈ Perm(T))

Definition: id_perm
id_perm() ==  mk_perm(Id;Id)

Lemma: id_perm_wf
T:Type. (id_perm() ∈ Perm(T))

Definition: inv_perm
inv_perm(p) ==  mk_perm(p.b;p.f)

Lemma: inv_perm_wf
T:Type. ∀p:Perm(T).  (inv_perm(p) ∈ Perm(T))

Definition: comp_perm
==  mk_perm(p.f q.f;q.b p.b)

Lemma: comp_perm_wf
T:Type. ∀p,q:Perm(T).  (p q ∈ Perm(T))

Lemma: comb_for_comp_perm_wf
λT,p,q,z. q ∈ T:Type ⟶ p:Perm(T) ⟶ q:Perm(T) ⟶ (↓True) ⟶ Perm(T)

Lemma: perm_assoc
[T:Type]. ∀[p,q,r:Perm(T)].  (p r ∈ Perm(T))

Lemma: perm_ident
[T:Type]. ∀[p:Perm(T)].  ((p id_perm() p ∈ Perm(T)) ∧ (id_perm() p ∈ Perm(T)))

Lemma: perm_inverse
[T:Type]. ∀[p:Perm(T)].  ((p inv_perm(p) id_perm() ∈ Perm(T)) ∧ (inv_perm(p) id_perm() ∈ Perm(T)))

Definition: perm_igrp
perm_igrp(T) ==  mk_igrp(Perm(T);λp,q. q;id_perm();λp.inv_perm(p))

Lemma: perm_igrp_wf
[T:Type]. (perm_igrp(T) ∈ IGroup)

Lemma: comb_for_perm_igrp_wf
λT,z. perm_igrp(T) ∈ T:Type ⟶ (↓True) ⟶ IGroup

Lemma: perm_grp_inv_assoc
[T:Type]. ∀[a,b:Perm(T)].  ((a inv_perm(a) b ∈ Perm(T)) ∧ (inv_perm(a) b ∈ Perm(T)))

Lemma: perm_grp_inv_id
T:Type. (inv_perm(id_perm()) id_perm() ∈ Perm(T))

Lemma: perm_grp_inv_inv
[T:Type]. ∀[a:Perm(T)].  (inv_perm(inv_perm(a)) a ∈ Perm(T))

Lemma: perm_grp_inv_thru_op
[T:Type]. ∀[a,b:Perm(T)].  (inv_perm(a b) inv_perm(b) inv_perm(a) ∈ Perm(T))

Lemma: perm_grp_inverse
[T:Type]. ∀[a:Perm(T)].  ((a inv_perm(a) id_perm() ∈ Perm(T)) ∧ (inv_perm(a) id_perm() ∈ Perm(T)))

Lemma: perm_mon_ident
[T:Type]. ∀[a:Perm(T)].  ((a id_perm() a ∈ Perm(T)) ∧ (id_perm() a ∈ Perm(T)))

Lemma: perm_mon_assoc
[T:Type]. ∀[a,b,c:Perm(T)].  (a c ∈ Perm(T))

Definition: sym_grp
Sym(n) ==  Perm(ℕn)

Definition: swap
swap(i;j) ==  λn.if (n =z i) then if (n =z j) then else fi 

Lemma: swap_wf
n:ℕ. ∀i,j:ℕn.  (swap(i;j) ∈ ℕn ⟶ ℕn)

Definition: tswap
swap{n}(i;j) ==  swap(i;j)

Lemma: tswap_wf
n:ℕ. ∀i,j:ℕn.  (swap{n}(i;j) ∈ ℕn ⟶ ℕn)

Lemma: swap_order_2
n:ℕ. ∀i,j:ℕn.  ((swap(i;j) swap(i;j)) Id ∈ (ℕn ⟶ ℕn))

Lemma: swap_sym
n:ℕ. ∀i,j:ℕn.  (swap(i;j) swap(j;i) ∈ (ℕn ⟶ ℕn))

Lemma: swap_id
n:ℕ. ∀i,j:ℕn.  ((i j ∈ ℤ (swap(i;j) Id ∈ (ℕn ⟶ ℕn)))

Lemma: swap_eval_1
i,j,k:ℤ.  ((k i ∈ ℤ ((swap(i;j) k) j ∈ ℤ))

Lemma: swap_eval_2
i,j,k:ℤ.  ((k j ∈ ℤ ((swap(i;j) k) i ∈ ℤ))

Lemma: swap_eval_3
i,j,k:ℤ.  ((¬(k i ∈ ℤ))  (k j ∈ ℤ))  ((swap(i;j) k) k ∈ ℤ))

Lemma: tswap_eval_1
n:ℕ. ∀i,j,k:ℕn.  ((k i ∈ ℕn)  ((swap{n}(i;j) k) j ∈ ℕn))

Lemma: tswap_eval_2
n:ℕ. ∀i,j,k:ℕn.  ((k j ∈ ℕn)  ((swap{n}(i;j) k) i ∈ ℕn))

Lemma: tswap_eval_3
n:ℕ. ∀i,j,k:ℕn.  ((¬(k i ∈ ℕn))  (k j ∈ ℕn))  ((swap{n}(i;j) k) k ∈ ℕn))

Lemma: triple_swap
n:ℕ. ∀i,j,k:ℕn.  ((¬(i j ∈ ℤ))  (j k ∈ ℤ))  (swap(i;j) (swap(i;k) (swap(j;k) swap(i;k))) ∈ (ℕn ⟶ ℕn)))

Definition: txpose_perm
txpose_perm(i;j) ==  mk_perm(swap(i;j);swap(i;j))

Lemma: txpose_perm_wf
n:ℕ. ∀i,j:ℕn.  (txpose_perm(i;j) ∈ Sym(n))

Lemma: comb_for_txpose_perm_wf
λn,i,j,z. txpose_perm(i;j) ∈ n:ℕ ⟶ i:ℕn ⟶ j:ℕn ⟶ (↓True) ⟶ Sym(n)

Lemma: txpose_perm_inv
n:ℕ. ∀i,j:ℕn.  (inv_perm(txpose_perm(i;j)) txpose_perm(i;j) ∈ Sym(n))

Lemma: txpose_perm_order_2
n:ℕ. ∀i,j:ℕn.  (txpose_perm(i;j) txpose_perm(i;j) id_perm() ∈ Sym(n))

Lemma: txpose_perm_sym
n:ℕ. ∀i,j:ℕn.  (txpose_perm(i;j) txpose_perm(j;i) ∈ Sym(n))

Lemma: txpose_perm_id
n:ℕ. ∀i,j:ℕn.  ((i j ∈ ℤ (txpose_perm(i;j) id_perm() ∈ Sym(n)))

Lemma: triple_txpose_perm
n:ℕ. ∀i,j,k:ℕn.
  ((¬(i j ∈ ℤ))
   (j k ∈ ℤ))
   (txpose_perm(i;j) txpose_perm(i;k) txpose_perm(j;k) txpose_perm(i;k) ∈ Sym(n)))

Definition: rev_permf
rev_permf(n) ==  λi.(n i)

Lemma: rev_permf_wf
n:ℕ(rev_permf(n) ∈ ℕn ⟶ ℕn)

Lemma: rev_permf_order_2
n:ℕ((rev_permf(n) rev_permf(n)) Id ∈ (ℕn ⟶ ℕn))

Definition: rev_perm
p{n} ==  mk_perm(rev_permf(n);rev_permf(n))

Lemma: rev_perm_wf
n:ℕ(p{n} ∈ Sym(n))

Definition: app_permf
app_permf(m;n;p;q) ==  λi.if i <then else (q (i m)) fi 

Lemma: app_permf_wf
m,n:ℕ. ∀p:ℕm ⟶ ℕm. ∀q:ℕn ⟶ ℕn.  (app_permf(m;n;p;q) ∈ ℕn ⟶ ℕn)

Lemma: comb_for_app_permf_wf
λm,n,p,q,z. app_permf(m;n;p;q) ∈ m:ℕ ⟶ n:ℕ ⟶ p:(ℕm ⟶ ℕm) ⟶ q:(ℕn ⟶ ℕn) ⟶ (↓True) ⟶ ℕn ⟶ ℕn

Lemma: app_permf_id
m,n:ℕ.  (app_permf(m;n;Id{ℕm};Id{ℕn}) Id{ℕn} ∈ (ℕn ⟶ ℕn))

Lemma: app_permf_comp
m,n:ℕ. ∀p,p':ℕm ⟶ ℕm. ∀q,q':ℕn ⟶ ℕn.
  ((app_permf(m;n;p;q) app_permf(m;n;p';q')) app_permf(m;n;p p';q q') ∈ (ℕn ⟶ ℕn))

Definition: app_perm
app_perm(m;n;p;q) ==  mk_perm(app_permf(m;n;p.f;q.f);app_permf(m;n;p.b;q.b))

Lemma: app_perm_wf
m,n:ℕ. ∀p:Sym(m). ∀q:Sym(n).  (app_perm(m;n;p;q) ∈ Sym(m n))

Definition: conj_perm
conj{p}(q) ==  inv_perm(p)

Lemma: conj_perm_wf
n:ℕ. ∀p,q:Sym(n).  (conj{p}(q) ∈ Sym(n))

Definition: extend_permf
extend_permf(pf;n) ==  λi.if (i =z n) then else pf fi 

Lemma: extend_permf_wf
n:ℕ. ∀p:ℕn ⟶ ℕn.  (extend_permf(p;n) ∈ ℕ1 ⟶ ℕ1)

Lemma: comb_for_extend_permf_wf
λn,p,z. extend_permf(p;n) ∈ n:ℕ ⟶ p:(ℕn ⟶ ℕn) ⟶ (↓True) ⟶ ℕ1 ⟶ ℕ1

Lemma: extend_permf_over_id
n:ℕ(extend_permf(Id;n) Id ∈ (ℕ1 ⟶ ℕ1))

Lemma: extend_permf_over_comp
n:ℕ. ∀f,g:ℕn ⟶ ℕn.  (extend_permf(g f;n) (extend_permf(g;n) extend_permf(f;n)) ∈ (ℕ1 ⟶ ℕ1))

Lemma: extend_permf_over_swap
n:ℕ. ∀i,j:ℕn.  (extend_permf(swap(i;j);n) swap(i;j) ∈ (ℕ1 ⟶ ℕ1))

Definition: extend_perm
{n}(p) ==  mk_perm(extend_permf(p.f;n);extend_permf(p.b;n))

Lemma: extend_perm_wf
n:ℕ. ∀p:Sym(n).  (↑{n}(p) ∈ Sym(n 1))

Lemma: comb_for_extend_perm_wf
λn,p,z. ↑{n}(p) ∈ n:ℕ ⟶ p:Sym(n) ⟶ (↓True) ⟶ Sym(n 1)

Lemma: extend_perm_over_id
n:ℕ(↑{n}(id_perm()) id_perm() ∈ Sym(n 1))

Lemma: extend_perm_over_comp
n:ℕ. ∀p,q:Sym(n).  (↑{n}(p q) = ↑{n}(p) O ↑{n}(q) ∈ Sym(n 1))

Lemma: extend_perm_over_txpose
n:ℕ. ∀i,j:ℕn.  (↑{n}(txpose_perm(i;j)) txpose_perm(i;j) ∈ Sym(n 1))

Definition: restrict_perm
restrict_perm(p;n) ==  p

Lemma: restrict_perm_wf
n:ℕ. ∀p:Sym(n 1).  (((p.f n) n ∈ ℕ1)  (restrict_perm(p;n) ∈ Sym(n)))

Lemma: extend_restrict_perm_cancel
n:{1...}. ∀p:Sym(n).  (((p.f (n 1)) (n 1) ∈ ℕn)  (↑{n 1}(restrict_perm(p;n 1)) p ∈ Sym(n)))

Lemma: restrict_perm_using_txpose
n:{1...}. ∀p:Sym(n).  ∃q:Sym(n 1). ∃i,j:ℕn. (p txpose_perm(i;j) O ↑{n 1}(q) ∈ Sym(n))

Lemma: trivial_nat1_fun
f:ℕ1 ⟶ ℕ1. (f Id ∈ (ℕ1 ⟶ ℕ1))

Lemma: zero_sym_grp
p:Sym(0). (p id_perm() ∈ Sym(0))

Lemma: trivial_sym_grp
p:Sym(1). (p id_perm() ∈ Sym(1))

Lemma: mon_itop_txpose_invar
g:IAbMonoid. ∀n:ℕ. ∀E:ℕn ⟶ |g|. ∀x:ℕ+n.  ((Π 0 ≤ j < n. E[txpose_perm(x;0).f j]) (Π 0 ≤ j < n. E[j]) ∈ |g|)



Home Index