Library Lambda.Russell.Injectivity

Require
Import
Lambda.Tactics
.
Require
Import
Lambda.Terms
.
Require
Import
Lambda.Reduction
.
Require
Import
Lambda.Conv
.
Require
Import
Lambda.LiftSubst
.
Require
Import
Lambda.Env
.
Require
Import
Lambda.Russell.Types
.
Require
Import
Lambda.Russell.Thinning
.
Require
Import
Lambda.Russell.Substitution
.
Require
Import
Lambda.Russell.Coercion
.
Require
Import
Lambda.Russell.GenerationNotKind
.
Require
Import
Lambda.Russell.GenerationCoerce
.
Require
Import
Lambda.Russell.Generation
.

Require
Import
Lambda.Meta.Russell_TPOSR
.

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


Lemma
unique_sort_conv
: ∀
G
A
A'
s1
s2
,
G
|--
A
:
Srt
s1
G
|--
A'
:
Srt
s2
conv
A
A'
s1
=
s2
.

Lemma
inv_conv_prod_sort_l
: ∀
e
U
V
U'
V'
s
,
e
|--
Prod
U
V
:
Srt
s
e
|--
Prod
U'
V'
:
Srt
s

  
conv
(
Prod
U
V
) (
Prod
U'
V'
) → ∃
s1
:
sort
,
e
|--
U
:
Srt
s1
e
|--
U'
:
Srt
s1
.

Lemma
inv_conv_prod_sort_r
: ∀
e
U
V
U'
V'
s
,
e
|--
Prod
U
V
:
Srt
s
e
|--
Prod
U'
V'
:
Srt
s

  
conv
(
Prod
U
V
) (
Prod
U'
V'
) →
U'
::
e
|--
V
:
Srt
s
U'
::
e
|--
V'
:
Srt
s
.

Lemma
inv_conv_sum_sort
: ∀
e
U
V
U'
V'
s
,
e
|--
Sum
U
V
:
Srt
s
e
|--
Sum
U'
V'
:
Srt
s

  
conv
(
Sum
U
V
) (
Sum
U'
V'
) →
  ∃
s1
, ∃
s2
,
e
|--
U
:
Srt
s1
e
|--
U'
:
Srt
s1
U
::
e
|--
V
:
Srt
s2
U
::
e
|--
V'
:
Srt
s2

  ∧
sum_sort
s1
s2
s
.

Require
Import
Lambda.Russell.UnicityOfSorting
.

Versions of the lemmas usable when in Set
Lemma
inv_conv_prod_sort_l_set
: ∀
e
U
V
U'
V'
s
,
  
e
|--
Prod
U
V
:
Srt
s
e
|--
Prod
U'
V'
:
Srt
s

  
conv
(
Prod
U
V
) (
Prod
U'
V'
) →
  ∀
s1
,
e
|--
U
:
Srt
s1
e
|--
U'
:
Srt
s1
.

Lemma
inv_conv_prod_sort_r_set
: ∀
e
U
V
U'
V'
s
,
  
e
|--
Prod
U
V
:
Srt
s
e
|--
Prod
U'
V'
:
Srt
s

  
conv
(
Prod
U
V
) (
Prod
U'
V'
) →
  
U'
::
e
|--
V
:
Srt
s
U'
::
e
|--
V'
:
Srt
s
.

Lemma
inv_conv_sum_sort_l_set
: ∀
e
U
V
U'
V'
s
,
e
|--
Sum
U
V
:
Srt
s
e
|--
Sum
U'
V'
:
Srt
s

  
conv
(
Sum
U
V
) (
Sum
U'
V'
) →
  ∀
s1
:
sort
,
e
|--
U
:
Srt
s1
e
|--
U'
:
Srt
s1
.

Lemma
inv_conv_sum_sort_r_set
: ∀
e
U
V
U'
V'
s
,
e
|--
Sum
U
V
:
Srt
s
e
|--
Sum
U'
V'
:
Srt
s

  
conv
(
Sum
U
V
) (
Sum
U'
V'
) →
  ∀
s2
:
sort
,
U
::
e
|--
V
:
Srt
s2
U
::
e
|--
V'
:
Srt
s2
.