Library Lambda.JRussell.Freevars

Require
Import
Lambda.Terms
.
Require
Import
Lambda.LiftSubst
.
Require
Import
Lambda.Reduction
.
Require
Import
Lambda.Conv
.
Require
Import
Lambda.Env
.
Require
Import
Lambda.JRussell.Types
.


Implicit
Types
i
k
m
n
p
:
nat
.
Implicit
Type
s
:
sort
.
Implicit
Types
A
B
M
N
T
t
u
v
:
term
.

Lemma
free_db_lift1_rec
: ∀
n
t
,
free_db
n
t
→ ∀
k
,
free_db
(
S
n
) (
lift_rec
1
t
k
).

Lemma
free_db_lift1
: ∀
n
t
,
free_db
n
t
free_db
(
S
n
) (
lift
1
t
).

Hint
Resolve
free_db_lift1
:
coc
.

Lemma
free_db_lift_rec
: ∀
n
t
,
free_db
n
t
→ ∀
n'
k
,
free_db
(
n'
+
n
) (
lift_rec
n'
t
k
).

Require
Import
Omega
.
Require
Import
Arith
.

Lemma
term_free_db
: ∀
e
t
T
,
e
|-=
t
:
T
free_db
(
length
e
)
t
.

Hint
Resolve
term_free_db
:
coc
.

  
Lemma
free_db_subst_rec
: ∀
t
n
,
free_db
(
S
n
)
t

    ∀
m
t'
,
free_db
m
t'
n
m
free_db
n
(
subst_rec
t'
t
(
n
-
m
)).

Lemma
free_db_subst
: ∀
t
n
,
free_db
(
S
n
)
t

 ∀
t'
,
free_db
n
t'
free_db
n
(
subst
t'
t
).

Lemma
type_free_db
:
  (∀
e
t
T
,
e
|-=
t
:
T
free_db
(
length
e
)
T
) ∧
  (∀
e
U
V
s
,
e
|-=
U
>>
V
:
s
free_db
(
length
e
)
U
free_db
(
length
e
)
V
) ∧
  (∀
e
U
V
T
,
e
|-=
U
=
V
:
T
free_db
(
length
e
)
U
free_db
(
length
e
)
V
).

Lemma
typ_free_db
: ∀
e
t
T
,
e
|-=
t
:
T
free_db
(
length
e
)
T
.

Lemma
coerce_free_db
: ∀
e
T
U
s
,
e
|-=
T
>>
U
:
s
free_db
(
length
e
)
T
free_db
(
length
e
)
U
.

Lemma
jeq_free_db
: ∀
e
U
V
T
,
e
|-=
U
=
V
:
T
free_db
(
length
e
)
U
free_db
(
length
e
)
V
.