Finish (most of) prov_par
This commit is contained in:
parent
2478c0f2e1
commit
2050b08004
1 changed files with 78 additions and 7 deletions
|
@ -59,8 +59,55 @@ Module Par.
|
||||||
R (Pi A0 B0) (Pi A1 B1)
|
R (Pi A0 B0) (Pi A1 B1)
|
||||||
| BotCong :
|
| BotCong :
|
||||||
R Bot Bot.
|
R Bot Bot.
|
||||||
|
|
||||||
|
|
||||||
|
Lemma AppAbs' n a0 a1 (b0 b1 t : Tm n) :
|
||||||
|
t = subst_Tm (scons b1 VarTm) a1 ->
|
||||||
|
R a0 a1 ->
|
||||||
|
R b0 b1 ->
|
||||||
|
R (App (Abs a0) b0) t.
|
||||||
|
Proof. move => ->. apply AppAbs. Qed.
|
||||||
|
|
||||||
|
Lemma ProjPair' n p (a0 a1 b0 b1 : Tm n) t :
|
||||||
|
t = (if p is PL then a1 else b1) ->
|
||||||
|
R a0 a1 ->
|
||||||
|
R b0 b1 ->
|
||||||
|
R (Proj p (Pair a0 b0)) t.
|
||||||
|
Proof. move => > ->. apply ProjPair. Qed.
|
||||||
|
|
||||||
|
Lemma AppEta' n (a0 a1 b : Tm n) :
|
||||||
|
b = (Abs (App (ren_Tm shift a1) (VarTm var_zero))) ->
|
||||||
|
R a0 a1 ->
|
||||||
|
R a0 b.
|
||||||
|
Proof. move => ->; apply AppEta. Qed.
|
||||||
|
|
||||||
|
Lemma renaming n m (a b : Tm n) (ξ : fin n -> fin m) :
|
||||||
|
R a b -> R (ren_Tm ξ a) (ren_Tm ξ b).
|
||||||
|
Proof.
|
||||||
|
move => h. move : m ξ.
|
||||||
|
elim : n a b /h.
|
||||||
|
move => *; apply : AppAbs'; eauto; by asimpl.
|
||||||
|
all : match goal with
|
||||||
|
| [ |- context[var_zero]] => move => *; apply : AppEta'; eauto; by asimpl
|
||||||
|
| _ => qauto ctrs:R use:ProjPair'
|
||||||
|
end.
|
||||||
|
Qed.
|
||||||
|
|
||||||
End Par.
|
End Par.
|
||||||
|
|
||||||
|
Module Pars.
|
||||||
|
Lemma renaming n m (a b : Tm n) (ξ : fin n -> fin m) :
|
||||||
|
rtc Par.R a b -> rtc Par.R (ren_Tm ξ a) (ren_Tm ξ b).
|
||||||
|
Proof.
|
||||||
|
induction 1; hauto lq:on ctrs:rtc use:Par.renaming.
|
||||||
|
Qed.
|
||||||
|
|
||||||
|
Lemma substing n m (a b : Tm n) (ρ : fin n -> Tm m) :
|
||||||
|
rtc Par.R a b ->
|
||||||
|
rtc Par.R (subst_Tm ρ a) (subst_Tm ρ b).
|
||||||
|
Admitted.
|
||||||
|
End Pars.
|
||||||
|
|
||||||
(***************** Beta rules only ***********************)
|
(***************** Beta rules only ***********************)
|
||||||
Module RPar.
|
Module RPar.
|
||||||
Inductive R {n} : Tm n -> Tm n -> Prop :=
|
Inductive R {n} : Tm n -> Tm n -> Prop :=
|
||||||
|
@ -831,7 +878,7 @@ Lemma prov_ren n m (ξ : fin n -> fin m) A B a :
|
||||||
prov A B a -> prov (ren_Tm ξ A) (ren_Tm (upRen_Tm_Tm ξ) B) (ren_Tm ξ a).
|
prov A B a -> prov (ren_Tm ξ A) (ren_Tm (upRen_Tm_Tm ξ) B) (ren_Tm ξ a).
|
||||||
Proof.
|
Proof.
|
||||||
move : m ξ A B. elim : n / a.
|
move : m ξ A B. elim : n / a.
|
||||||
- sfirstorder.
|
- sfirstorder rew:db:prov.
|
||||||
- move => n a ih m ξ A B.
|
- move => n a ih m ξ A B.
|
||||||
simp prov. simpl.
|
simp prov. simpl.
|
||||||
move /ih => {ih}.
|
move /ih => {ih}.
|
||||||
|
@ -842,19 +889,45 @@ Proof.
|
||||||
- hauto lq:on rew:db:prov.
|
- hauto lq:on rew:db:prov.
|
||||||
- move => n A0 ih B0 h0 m ξ A B. simpl.
|
- move => n A0 ih B0 h0 m ξ A B. simpl.
|
||||||
simp prov.
|
simp prov.
|
||||||
admit.
|
hauto l:on use:Pars.renaming.
|
||||||
- sfirstorder.
|
- sfirstorder.
|
||||||
Admitted.
|
Qed.
|
||||||
|
|
||||||
|
Lemma prov_morph n m (ρ : fin n -> Tm m) A B a :
|
||||||
|
prov A B a ->
|
||||||
|
prov (subst_Tm ρ A) (subst_Tm (up_Tm_Tm ρ) B) (subst_Tm ρ a).
|
||||||
|
Proof.
|
||||||
|
move : m ρ A B. elim : n / a.
|
||||||
|
- hauto q:on rew:db:prov.
|
||||||
|
- move => n a ih m ρ A B.
|
||||||
|
simp prov => /=.
|
||||||
|
move /ih => {ih}.
|
||||||
|
move /(_ _ (up_Tm_Tm ρ)). asimpl.
|
||||||
|
simp prov. by asimpl.
|
||||||
|
- hauto q:on rew:db:prov.
|
||||||
|
- hauto q:on rew:db:prov.
|
||||||
|
- hauto lq:on rew:db:prov.
|
||||||
|
- hauto l:on use:Pars.substing rew:db:prov.
|
||||||
|
- qauto rew:db:prov.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Lemma EPar_Par n (a b : Tm n) : EPar.R a b -> Par.R a b.
|
Lemma EPar_Par n (a b : Tm n) : EPar.R a b -> Par.R a b.
|
||||||
Proof.
|
Proof.
|
||||||
move => h. elim : n a b /h; qauto ctrs:Par.R.
|
move => h. elim : n a b /h; qauto ctrs:Par.R.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
Lemma prov_par n (A : Tm n) B a b : prov A B a -> EPar.R a b -> prov A B b.
|
Lemma prov_par n (A : Tm n) B a b : prov A B a -> Par.R a b -> prov A B b.
|
||||||
Proof.
|
Proof.
|
||||||
move => + h. move : A B.
|
move => + h. move : A B.
|
||||||
elim : n a b /h.
|
elim : n a b /h.
|
||||||
|
- move => n a0 a1 b0 b1 ha iha hb ihb A B /=.
|
||||||
|
simp prov => h.
|
||||||
|
have : prov (ren_Tm shift A) (ren_Tm (upRen_Tm_Tm shift) B) a1 by admit.
|
||||||
|
move /(prov_morph _ _ (scons b1 VarTm)).
|
||||||
|
by asimpl.
|
||||||
|
- hauto lq:on rew:db:prov.
|
||||||
|
- hauto lq:on rew:db:prov.
|
||||||
|
- hauto lq:on rew:db:prov.
|
||||||
- move => n a0 a1 ha iha A B. simp prov. move /iha.
|
- move => n a0 a1 ha iha A B. simp prov. move /iha.
|
||||||
hauto l:on use:prov_ren.
|
hauto l:on use:prov_ren.
|
||||||
- hauto l:on rew:db:prov.
|
- hauto l:on rew:db:prov.
|
||||||
|
@ -865,11 +938,9 @@ Proof.
|
||||||
- hauto lq:on rew:db:prov.
|
- hauto lq:on rew:db:prov.
|
||||||
- move => n A0 A1 B0 B1 hA ihA hB ihB A B. simp prov.
|
- move => n A0 A1 B0 B1 hA ihA hB ihB A B. simp prov.
|
||||||
move => [hA0 hA1].
|
move => [hA0 hA1].
|
||||||
apply EPar_Par in hA, hB.
|
|
||||||
eauto using rtc_r.
|
eauto using rtc_r.
|
||||||
- sfirstorder.
|
- sfirstorder.
|
||||||
Qed.
|
Admitted.
|
||||||
|
|
||||||
|
|
||||||
Lemma Par_confluent n (c a1 b1 : Tm n) :
|
Lemma Par_confluent n (c a1 b1 : Tm n) :
|
||||||
rtc Par.R c a1 ->
|
rtc Par.R c a1 ->
|
||||||
|
|
Loading…
Add table
Reference in a new issue