Lemma: sqequalIffSqle
a,b:Base.  ((a b)  ((a ≤ b) ∧ (b ≤ a)))

Lemma: not-id-sqle-bottom
¬x.x ≤ ⊥)

Lemma: not-btrue-sqle-bottom
¬(tt ≤ ⊥)

Lemma: not_id_sqeq_bottom
¬x.x ~ ⊥)

Lemma: not_id_sqle_bottom
¬x.x ≤ ⊥)

Lemma: not_has-value_decidable_on_base
¬(∀t:Base. ((t)↓ ∨ (t)↓)))

Lemma: no-excluded-middle
¬(∀P:ℙ(P ∨ P)))

Lemma: not-not-excluded-middle
P:ℙ(¬¬(P ∨ P)))

Lemma: minimal-not-not-excluded-middle
[A,P:ℙ].  (((P ∨ (P  A))  A)  A)

Lemma: minimal-not-not-excluded-middle-ext
[A,P:ℙ].  (((P ∨ (P  A))  A)  A)

Lemma: double-negation-hyp-elim
[P,Q:ℙ].  ((P  Q))  (¬¬P)  Q))

Lemma: minimal-double-negation-hyp-elim
[A,P,Q:ℙ].  ((P   A)  ((P  A)  A)   A)

Lemma: stable-implies-sq_stable
[A:ℙ]. (Stable{A}  SqStable(A))

Lemma: proof-by-cont-implies-LEM
(∀p:ℙ((¬¬p)  p))  (∀p:ℙ(p ∨ p)))

Definition: id-fun
id-fun(T) ==  x:T ⟶ {y:T| y ∈ T} 

Lemma: id-fun_wf
[T:Type]. (id-fun(T) ∈ Type)

Definition: sq-id-fun
sq-id-fun(T) ==  x:T ⟶ {y:T| y} 

Lemma: sq-id-fun_wf
[T:Type]. sq-id-fun(T) ∈ Type supposing T ⊆Base

Definition: norm-pair
norm-pair(Na;Nb) ==  λp.let a,b in eval a' Na in eval b' Nb in   <a', b'>

Lemma: norm-pair_wf
[A:Type]. ∀[B:A ⟶ Type].
  (∀[Na:id-fun(A)]. ∀[Nb:⋂a:A. id-fun(B[a])].  (norm-pair(Na;Nb) ∈ id-fun(a:A × B[a]))) supposing 
     ((∀a:A. value-type(B[a])) and 
     value-type(A))

Lemma: norm-pair_wf_sq
[A,B:Type].
  (∀[Na:sq-id-fun(A)]. ∀[Nb:sq-id-fun(B)].  (norm-pair(Na;Nb) ∈ sq-id-fun(A × B))) supposing 
     ((B ⊆Base) and 
     (A ⊆Base) and 
     value-type(B) and 
     value-type(A))

Definition: norm-fst
norm-fst(N) ==  λp.let a,b in eval a' in <a', b>

Lemma: norm-fst_wf
[A:Type]. ∀[B:A ⟶ Type].  ∀[N:id-fun(A)]. (norm-fst(N) ∈ id-fun(a:A × B[a])) supposing value-type(A)

Definition: norm-snd
norm-snd(N) ==  λp.let a,b in eval b' in <a, b'>

Lemma: norm-snd_wf
[A:Type]. ∀[B:A ⟶ Type].  ∀[N:⋂a:A. id-fun(B[a])]. (norm-snd(N) ∈ id-fun(a:A × B[a])) supposing ∀a:A. value-type(B[a])

Definition: norm-union
norm-union(Na;Nb) ==  λu.case of inl(a) => eval a' Na in inl a' inr(b) => eval b' Nb in inr b' 

Lemma: norm-union_wf
[A,B:Type].
  (∀[Na:id-fun(A)]. ∀[Nb:id-fun(B)].  (norm-union(Na;Nb) ∈ id-fun(A B))) supposing (value-type(B) and value-type(A))

Lemma: int_eq-sqle-lemma1
[x:Top]. ∀[y:ℤ].  (if x=y then else ⊥ ≤ x)

Lemma: int_eq-sqle-lemma2
[x:Top]. (if x=0 then else ⊥ ≤ x)

Lemma: atom_eq_sq_normalize
[b1,b2,i,j:Top].  (if i=j then b1[i] else b2 fi  if i=j then b1[j] else b2 fi )

Lemma: has-value-monotonic
[a,b:Base].  ((b)↓supposing ((a ≤ b) and (a)↓)

Lemma: not-btrue-sqle-bfalse
¬(tt ≤ ff)

Lemma: not-bfalse-sqle-btrue
¬(ff ≤ tt)

Lemma: spread-ispair-spread
[t,B:Top].  (let x,y in B[x;y] if is pair then let x,y in B[x;y] otherwise ⊥)

Lemma: pi12-sqle-spread
[t:Top]. ∀[P:Base].  P[fst(t);snd(t)] ≤ let x,y in P[x;y] supposing strict4(λx,y,z,w. P[x;y])

Lemma: spread-sqle-pi12
[P:Base]
  ∀[t:Top]. (let x,y in P[x;y] ≤ P[fst(t);snd(t)]) 
  supposing ∀u,v:Base.  (P[exception(u; v);exception(u; v)] exception(u; v))

Lemma: spread-sq-pi12
[t:Top]. ∀[P:Base].  P[fst(t);snd(t)] let x,y in P[x;y] supposing strict4(λx,y,z,w. P[x;y])

Definition: primtailrec
primtailrec(n;i;b;f) ==  if (n) < (1)  then b  else eval in eval in   primtailrec(m;j;f b;f)

Lemma: primtailrec-unroll
[n:ℤ]. ∀[b,c:Top].  (primtailrec(n;0;b;c) if n <then else (n 1) primtailrec(n 1;0;b;c) fi )

Definition: primrec
primrec(n;b;c) ==  primtailrec(n;0;b;c)

Lemma: primrec-unroll
[n:ℤ]. ∀[b,c:Top].  (primrec(n;b;c) if n <then else (n 1) primrec(n 1;b;c) fi )

Lemma: primrec-wf-upper
[k:ℤ]. ∀[P:{k...} ⟶ ℙ]. ∀[b:P[k]]. ∀[s:∀n:{k...}. (P[n]  P[n 1])]. ∀[n:{k...}].
  (primrec(n k;b;λi,x. (s (i k) x)) ∈ P[n])

Lemma: primrec-wf-nat-plus
[P:ℕ+ ⟶ ℙ]. ∀[b:P[1]]. ∀[s:∀n:ℕ+(P[n]  P[n 1])]. ∀[n:ℕ+].  (primrec(n 1;b;λi,x. (s (i 1) x)) ∈ P[n])

Lemma: primrec-wf
[P:ℕ ⟶ ℙ]. ∀[b:P[0]]. ∀[s:∀n:ℕ(P[n]  P[n 1])]. ∀[n:ℕ].  (primrec(n;b;s) ∈ P[n])

Lemma: primrec-wf-int_seg
[a,b:ℤ].
  ∀[P:{a..b-} ⟶ ℙ]. ∀[init:P[a]]. ∀[s:∀n:ℕa. (P[a n]  P[a 1])]. ∀[n:{a..b-}].
    (primrec(n a;init;s) ∈ P[n]) 
  supposing a < b

Lemma: primrec-wf-nsub
[b:ℕ+]. ∀[P:ℕb ⟶ ℙ]. ∀[init:P[0]]. ∀[s:∀n:ℕ1. (P[n]  P[n 1])]. ∀[n:ℕb].  (primrec(n;init;s) ∈ P[n])

Lemma: primrec-wf2
[P:ℕ ⟶ ℙ]. ∀[b:P[0]]. ∀[s:∀n:{n:ℤ0 < n} (P[n 1]  P[n])]. ∀[n:ℕ].  (primrec(n;b;λi,x. (s (i 1) x)) ∈ P[n])

Lemma: primrec_wf
[T:Type]. ∀[n:ℕ]. ∀[b:T]. ∀[c:ℕn ⟶ T ⟶ T].  (primrec(n;b;c) ∈ T)

Lemma: primrec0_lemma
c,b:Top.  (primrec(0;b;c) b)

Lemma: primrec1_lemma
c,b:Top.  (primrec(1;b;c) b)

Lemma: primrec-unroll-1
[n:{n:ℤ0 < n} ]. ∀[b,c:Top].  (primrec(n;b;c) (n 1) primrec(n 1;b;c))

Lemma: primrec-unroll+1
[n:{n:ℤ0 < n} ]. ∀[b,c:Top].  (primrec(n 1;b;c) primrec(n;b;c))

Lemma: primrec_add
[T:Type]. ∀[n,m:ℕ]. ∀[b:T]. ∀[c:ℕm ⟶ T ⟶ T].  (primrec(n m;b;c) primrec(n;primrec(m;b;c);λi,t. (c (i m) t))\000C)

Lemma: simple-primrec-add
[b,F:Top]. ∀[n,m:ℕ].  (primrec(n m;b;λi.F) primrec(n;primrec(m;b;λi.F);λi.F))

Lemma: primrec-as-fix
[n,b,c:Top].  (primrec(n;b;c) fix((λp,n. if (n) < (1)  then b  else (c (n 1) (p (n 1))))) n)

Lemma: nat_ind_a
[P:ℕ ⟶ ℙ{k}]. (P[0]  (∀i:ℕ+(P[i 1]  P[i]))  {∀i:ℕP[i]})

Lemma: comp_nat_ind_tp
[P:ℕ ⟶ ℙ{k}]. ((∀i:ℕ((∀j:ℕP[j] supposing j < i)  P[i]))  {∀i:ℕP[i]})

Lemma: comp_nat_ind_a
[P:ℕ ⟶ ℙ{k}]. ((∀i:ℕ((∀j:ℕP[j] supposing j < i)  P[i]))  {∀i:ℕP[i]})

Lemma: nat_well_founded
WellFnd{i}(ℕ;x,y.x < y)

Lemma: int_lower_well_founded
n:ℤWellFnd{i}({...n};x,y.x > y)

Lemma: int_lower_ind
i:ℤ. ∀[E:{...i} ⟶ ℙ{u}]. (E[i]  (∀k:{...i 1}. (E[k 1]  E[k]))  {∀k:{...i}. E[k]})

Lemma: integer-induction
[P:ℤ ⟶ ℙ]. (P[0]  (∀y:{x:ℤ0 < x} (P[y 1]  P[y]))  (∀y:{x:ℤx < 0} (P[y 1]  P[y]))  (∀x:ℤP[x]))

Definition: int-seg-case
int-seg-case(i;j;d) ==
  if (j) < (i)
     then inr k.Ax) 
     else primrec(j i;inr k.Ax) n,x. case x
                                           of inl(p) =>
                                           inl p
                                           inr(f) =>
                                           case (i n)
                                            of inl(z) =>
                                            inl <n, z>
                                            inr(u) =>
                                            inr k.if (k) < (i n)  then k  else u) )

Lemma: int-seg-case_wf
[i,j:ℤ]. ∀[F,G:{i..j-} ⟶ ℙ]. ∀[d:∀k:{i..j-}. (F[k] ∨ G[k])].
  (int-seg-case(i;j;d) ∈ (∃k:{i..j-}. F[k]) ∨ (∀k:{i..j-}. G[k]))

Lemma: int-seg-case-monotone
[i,j:ℤ]. ∀[F,G:{i..j-} ⟶ ℙ]. ∀[d:∀k:{i..j-}. (F[k] ∨ G[k])].
  ∀k:{i..j 1-}. ((↑isl(int-seg-case(i;k;d)))  (∀k':{k..j 1-}. (↑isl(int-seg-case(i;k';d)))))

Lemma: int_seg-case
i,j:ℤ.  ∀[F,G:{i..j-} ⟶ ℙ].  ((∀k:{i..j-}. (F[k] ∨ G[k]))  ((∃k:{i..j-}. F[k]) ∨ (∀k:{i..j-}. G[k])))

Lemma: decidable-exists-int_seg-subtype
[i:ℤ]. ∀[j:{i 1...}]. ∀[P:{i..j-} ⟶ ℙ].  Dec(∃k:{i 1..j-}. P[k]) ⊆Dec(∃k:{i..j-}. P[k]) supposing ¬P[i]

Definition: int_seg_decide
int_seg_decide(d;i;j) ==
  fix((λG,x. if (x) < (j)  then case of inl(z) => inl <x, z> inr(z) => (x 1)  else (inr x.⋅))) i

Lemma: int_seg_decide_wf
[i,j:ℤ]. ∀[F:{i..j-} ⟶ ℙ{u}]. ∀[d:∀k:{i..j-}. Dec(F[k])].  (int_seg_decide(d;i;j) ∈ Dec(∃k:{i..j-}. F[k]))

Lemma: decidable__exists_int_seg
i,j:ℤ.  ∀[F:{i..j-} ⟶ ℙ{u}]. ((∀k:{i..j-}. Dec(F[k]))  Dec(∃k:{i..j-}. F[k]))

Lemma: decidable__all_int_seg
i,j:ℤ.  ∀[F:{i..j-} ⟶ ℙ{u}]. ((∀k:{i..j-}. Dec(F[k]))  Dec(∀k:{i..j-}. F[k]))

Definition: canonical-function
canonical-function(f) ==  λx.if (x) < (0)  then ⊥  else (f x)

Lemma: canonical-function_wf
X:{X:Type| X ⊆Base} . ∀f:ℕ ⟶ X.  (canonical-function(f) ∈ {g:Base| f ∈ (ℕ ⟶ X)} )

Definition: canonicalizable
canonicalizable(T) ==  ∃f:T ⟶ Base. ∀x:T. ((f x) x ∈ T)

Lemma: canonicalizable_wf
[T:Type]. (canonicalizable(T) ∈ ℙ)

Lemma: canonicalizable-iff
[T:Type]. (canonicalizable(T) ⇐⇒ ∀t:T. ∃x:Base. (t x ∈ T))

Lemma: canonicalizable-base
[T:Type]. ((T ⊆Base)  canonicalizable(T))

Lemma: canonicalizable-product
[T:Type]. ∀[B:T ⟶ Type].  (canonicalizable(T)  (∀x:T. canonicalizable(B[x]))  canonicalizable(x:T × B[x]))

Lemma: canonicalizable-set
[T:Type]. ∀[B:T ⟶ Type].  (canonicalizable(T)  canonicalizable({x:T| B[x]} ))

Lemma: canonicalizable-top
canonicalizable(Top)

Definition: retractible
retractible(T) ==  ∃f:Base. ((∀x:T. ((f x) x ∈ T)) ∧ (∀x:Base. ((f x)↓  (x ∈ T))))

Lemma: retractible_wf
[T:Type]. retractible(T) ∈ ℙ supposing T ⊆Base

Lemma: nat-retractible
retractible(ℕ)

Lemma: canonicalizable-function
[T:Type]
  ∀[B:T ⟶ Type]. retractible(T)  canonicalizable(x:T ⟶ B[x]) supposing ∀x:T. (B[x] ⊆Base) 
  supposing (T ⊆Base) ∧ value-type(T)

Lemma: canonicalizable-nat-to-nat
canonicalizable(ℕ ⟶ ℕ)

Lemma: canonicalizable-baire-direct
canonicalizable(ℕ ⟶ ℕ)



Home Index