Library Lambda.TPOSR.Thinning
Require Import Lambda.TPOSR.Terms.
Require Import Lambda.TPOSR.Reduction.
Require Import Lambda.TPOSR.LiftSubst.
Require Import Lambda.TPOSR.Env.
Require Import Lambda.TPOSR.Conv.
Require Import Lambda.TPOSR.Types.
Require Import Lambda.TPOSR.LeftReflexivity.
Implicit Types i k m n p : nat.
Implicit Type s : sort.
Implicit Types A B M N T t u v : lterm.
Implicit Types e f g : lenv.
Lemma ind_thinning : ∀ A,
(∀ e u v T, e |-- u -> v : T ->
∀ n f, ins_in_lenv A n e f -> tposr_wf f ->
f |-- (llift_rec 1 u n) -> (llift_rec 1 v n) : (llift_rec 1 T n)) ∧
(∀ e, tposr_wf e -> True) ∧
(∀ e u v s, e |-- u ~= v : s ->
∀ n f, ins_in_lenv A n e f -> tposr_wf f ->
f |-- (llift_rec 1 u n) ~= (llift_rec 1 v n) : s) ∧
(∀ e u v s, e |-- u >-> v : s ->
∀ n f, ins_in_lenv A n e f -> tposr_wf f ->
f |-- (llift_rec 1 u n) >-> (llift_rec 1 v n) : s).
Corollary thinning :
∀ e t t' T,
e |-- t -> t' : T -> ∀ A, tposr_wf (A :: e) -> (A :: e) |-- llift 1 t -> llift 1 t' : (llift 1 T).
Corollary thinning_eq :
∀ e t t' s,
e |-- t ~= t' : s ->
∀ A, tposr_wf (A :: e) -> (A :: e) |-- (llift 1 t) ~= llift 1 t' : s.
Corollary thinning_coerce :
∀ e t t' s,
e |-- t >-> t' : s ->
∀ A, tposr_wf (A :: e) -> (A :: e) |-- (llift 1 t) >-> llift 1 t' : s.
Lemma thinning_n :
∀ n e f,
trunc _ n e f ->
∀ t t' T, f |-- t -> t' : T -> tposr_wf e -> e |-- (llift n t) -> (llift n t') : (llift n T).
Lemma thinning_n_eq :
∀ n e f,
trunc _ n e f ->
∀ t t' s, f |-- t ~= t' : s -> tposr_wf e -> e |-- (llift n t) ~= (llift n t') : s.
Lemma thinning_n_coerce :
∀ n e f,
trunc _ n e f ->
∀ t t' s, f |-- t >-> t' : s -> tposr_wf e -> e |-- (llift n t) >-> (llift n t') : s.
Lemma wf_sort_lift :
∀ n e t, tposr_wf e -> item_llift t e n -> ∃ s : sort, e |-- t -> t : (Srt_l s).
Hint Resolve thinning thinning_eq thinning_coerce thinning_n : coc.