Library Lambda.TPOSR.Conv
Require
Import
Lambda.TPOSR.Terms
.
Require
Import
Lambda.TPOSR.LiftSubst
.
Require
Import
Lambda.TPOSR.Reduction
.
Implicit
Types
i
k
m
n
p
: nat
.
Implicit
Type
s
: sort
.
Implicit
Types
A
B
M
N
T
t
u
v
: lterm
.
Section
Church_Rosser
.
Definition
str_confluent
(R
: lterm
→ lterm
→ Prop
) :=
commut
_
R
(transp
_
R
).
Lemma
str_confluence_par_lred1
: str_confluent
par_lred1
.
Lemma
strip_lemma
: commut
_
par_lred
(transp
_
par_lred1
).
Lemma
confluence_par_lred
: str_confluent
par_lred
.
Lemma
confluence_lred
: str_confluent
lred
.
Theorem
church_rosser
:
∀ u
v
, conv
u
v
→ ex2
(fun
t
⇒ lred
u
t
) (fun
t
⇒ lred
v
t
).
Lemma
inv_conv_prod_l
:
∀ a
b
c
d
: lterm
, conv
(Prod_l
a
c
) (Prod_l
b
d
) → conv
a
b
.
Lemma
inv_conv_prod_r
:
∀ a
b
c
d
: lterm
, conv
(Prod_l
a
c
) (Prod_l
b
d
) → conv
c
d
.
Lemma
inv_conv_sum_l
:
∀ a
b
c
d
: lterm
, conv
(Sum_l
a
c
) (Sum_l
b
d
) → conv
a
b
.
Lemma
inv_conv_sum_r
:
∀ a
b
c
d
: lterm
, conv
(Sum_l
a
c
) (Sum_l
b
d
) → conv
c
d
.
Lemma
inv_conv_subset_l
:
∀ a
b
c
d
: lterm
, conv
(Subset_l
a
c
) (Subset_l
b
d
) → conv
a
b
.
Lemma
inv_conv_subset_r
:
∀ a
b
c
d
: lterm
, conv
(Subset_l
a
c
) (Subset_l
b
d
) → conv
c
d
.
Lemma
nf_uniqueness
: ∀ u
v
, conv
u
v
→ normal
u
→ normal
v
→ u
= v
.
Lemma
conv_sort
: ∀ s1
s2
, conv
(Srt_l
s1
) (Srt_l
s2
) → s1
= s2
.
Lemma
conv_kind_prop
: ¬ conv
(Srt_l
kind
) (Srt_l
prop
).
Lemma
conv_kind_set
: ¬ conv
(Srt_l
kind
) (Srt_l
set
).
Lemma
conv_sort_ref
: ∀ s
n
, ¬ conv
(Srt_l
s
) (Ref_l
n
).
Lemma
conv_sort_prod
: ∀ s
t
u
, ¬ conv
(Srt_l
s
) (Prod_l
t
u
).
Lemma
conv_sort_sum
: ∀ s
t
u
, ¬ conv
(Srt_l
s
) (Sum_l
t
u
).
Lemma
conv_sort_subset
: ∀ s
t
u
, ¬ conv
(Srt_l
s
) (Subset_l
t
u
).
Lemma
conv_prod_subset
: ∀ U
V
t
u
, ¬ conv
(Prod_l
U
V
) (Subset_l
t
u
).
Lemma
conv_prod_sum
: ∀ U
V
t
u
, ¬ conv
(Prod_l
U
V
) (Sum_l
t
u
).
Lemma
conv_subset_sum
: ∀ U
V
t
u
, ¬ conv
(Subset_l
U
V
) (Sum_l
t
u
).
End
Church_Rosser
.