Finish anti-renaming
This commit is contained in:
parent
add8a62d85
commit
2d20d06fd2
1 changed files with 122 additions and 1 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
From Ltac2 Require Ltac2.
|
||||||
|
Import Ltac2.Notations.
|
||||||
|
Import Ltac2.Control.
|
||||||
Require Import ssreflect.
|
Require Import ssreflect.
|
||||||
Require Import FunInd.
|
Require Import FunInd.
|
||||||
Require Import Arith.Wf_nat.
|
Require Import Arith.Wf_nat.
|
||||||
|
@ -7,6 +10,16 @@ From Hammer Require Import Tactics.
|
||||||
Require Import Autosubst2.core Autosubst2.fintype Autosubst2.syntax.
|
Require Import Autosubst2.core Autosubst2.fintype Autosubst2.syntax.
|
||||||
From Equations Require Import Equations.
|
From Equations Require Import Equations.
|
||||||
|
|
||||||
|
Ltac2 spec_refl () :=
|
||||||
|
List.iter
|
||||||
|
(fun a => match a with
|
||||||
|
| (i, _, _) =>
|
||||||
|
let h := Control.hyp i in
|
||||||
|
try (specialize $h with (1 := eq_refl))
|
||||||
|
end) (Control.hyps ()).
|
||||||
|
|
||||||
|
Ltac spec_refl := ltac2:(spec_refl ()).
|
||||||
|
|
||||||
|
|
||||||
(* Trying my best to not write C style module_funcname *)
|
(* Trying my best to not write C style module_funcname *)
|
||||||
Module Par.
|
Module Par.
|
||||||
|
@ -60,6 +73,9 @@ Module Par.
|
||||||
| BotCong :
|
| BotCong :
|
||||||
R Bot Bot.
|
R Bot Bot.
|
||||||
|
|
||||||
|
Lemma refl n (a : Tm n) : R a a.
|
||||||
|
elim : n /a; hauto ctrs:R.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Lemma AppAbs' n a0 a1 (b0 b1 t : Tm n) :
|
Lemma AppAbs' n a0 a1 (b0 b1 t : Tm n) :
|
||||||
t = subst_Tm (scons b1 VarTm) a1 ->
|
t = subst_Tm (scons b1 VarTm) a1 ->
|
||||||
|
@ -93,6 +109,109 @@ Module Par.
|
||||||
end.
|
end.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
|
|
||||||
|
Lemma morphing n m (a b : Tm n) (ρ0 ρ1 : fin n -> Tm m) :
|
||||||
|
(forall i, R (ρ0 i) (ρ1 i)) ->
|
||||||
|
R a b -> R (subst_Tm ρ0 a) (subst_Tm ρ1 b).
|
||||||
|
Proof.
|
||||||
|
move => + h. move : m ρ0 ρ1. elim : n a b/h.
|
||||||
|
- move => n a0 a1 b0 b1 ha iha hb ihb m ρ0 ρ1 hρ /=.
|
||||||
|
eapply AppAbs' with (a1 := subst_Tm (up_Tm_Tm ρ1) a1); eauto.
|
||||||
|
by asimpl.
|
||||||
|
hauto l:on use:renaming inv:option.
|
||||||
|
- hauto lq:on rew:off ctrs:R.
|
||||||
|
- hauto l:on inv:option use:renaming ctrs:R.
|
||||||
|
- hauto lq:on use:ProjPair'.
|
||||||
|
- move => n a0 a1 ha iha m ρ0 ρ1 hρ /=.
|
||||||
|
apply : AppEta'; eauto. by asimpl.
|
||||||
|
- hauto lq:on ctrs:R.
|
||||||
|
- sfirstorder.
|
||||||
|
- hauto l:on inv:option ctrs:R use:renaming.
|
||||||
|
- hauto q:on ctrs:R.
|
||||||
|
- qauto l:on ctrs:R.
|
||||||
|
- qauto l:on ctrs:R.
|
||||||
|
- hauto l:on inv:option ctrs:R use:renaming.
|
||||||
|
- sfirstorder.
|
||||||
|
Qed.
|
||||||
|
|
||||||
|
Lemma substing n m (a b : Tm n) (ρ : fin n -> Tm m) :
|
||||||
|
R a b -> R (subst_Tm ρ a) (subst_Tm ρ b).
|
||||||
|
Proof. hauto l:on use:morphing, refl. Qed.
|
||||||
|
|
||||||
|
Lemma antirenaming n m (a : Tm n) (b : Tm m) (ξ : fin n -> fin m) :
|
||||||
|
R (ren_Tm ξ a) b -> exists b0, R a b0 /\ ren_Tm ξ b0 = b.
|
||||||
|
Proof.
|
||||||
|
move E : (ren_Tm ξ a) => u h.
|
||||||
|
move : n ξ a E. elim : m u b/h.
|
||||||
|
- move => n a0 a1 b0 b1 ha iha hb ihb m ξ []//=.
|
||||||
|
move => c c0 [+ ?]. subst.
|
||||||
|
case : c => //=.
|
||||||
|
move => c [?]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move : iha => [c1][ih0]?. subst.
|
||||||
|
move : ihb => [c2][ih1]?. subst.
|
||||||
|
eexists. split.
|
||||||
|
apply AppAbs; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- move => n a0 a1 b0 b1 c0 c1 ha iha hb ihb hc ihc m ξ []//=.
|
||||||
|
move => []//= t t0 t1 [*]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move : iha => [? [*]].
|
||||||
|
move : ihb => [? [*]].
|
||||||
|
move : ihc => [? [*]].
|
||||||
|
eexists. split.
|
||||||
|
apply AppPair; hauto. subst.
|
||||||
|
by asimpl.
|
||||||
|
- move => n p a0 a1 ha iha m ξ []//= p0 []//= t [*]. subst.
|
||||||
|
spec_refl. move : iha => [b0 [? ?]]. subst.
|
||||||
|
eexists. split. apply ProjAbs; eauto. by asimpl.
|
||||||
|
- move => n p a0 a1 b0 b1 ha iha hb ihb m ξ []//= p0 []//= t t0[*].
|
||||||
|
subst. spec_refl.
|
||||||
|
move : iha => [b0 [? ?]].
|
||||||
|
move : ihb => [c0 [? ?]]. subst.
|
||||||
|
eexists. split. by eauto using ProjPair.
|
||||||
|
hauto q:on.
|
||||||
|
- move => n a0 a1 ha iha m ξ a ?. subst.
|
||||||
|
spec_refl. move : iha => [a0 [? ?]]. subst.
|
||||||
|
eexists. split. apply AppEta; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- move => n a0 a1 ha iha m ξ a ?. subst.
|
||||||
|
spec_refl. move : iha => [b0 [? ?]]. subst.
|
||||||
|
eexists. split. apply PairEta; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- move => n i m ξ []//=.
|
||||||
|
hauto l:on.
|
||||||
|
- move => n a0 a1 ha iha m ξ []//= t [*]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move :iha => [b0 [? ?]]. subst.
|
||||||
|
eexists. split. by apply AbsCong; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- move => n a0 a1 b0 b1 ha iha hb ihb m ξ []//= t t0 [*]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move : iha => [b0 [? ?]]. subst.
|
||||||
|
move : ihb => [c0 [? ?]]. subst.
|
||||||
|
eexists. split. by apply AppCong; eauto.
|
||||||
|
done.
|
||||||
|
- move => n a0 a1 b0 b1 ha iha hb ihb m ξ []//= t t0[*]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move : iha => [b0 [? ?]]. subst.
|
||||||
|
move : ihb => [c0 [? ?]]. subst.
|
||||||
|
eexists. split. by apply PairCong; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- move => n p a0 a1 ha iha m ξ []//= p0 t [*]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move : iha => [b0 [? ?]]. subst.
|
||||||
|
eexists. split. by apply ProjCong; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- move => n A0 A1 B0 B1 ha iha hB ihB m ξ []//= t t0 [*]. subst.
|
||||||
|
spec_refl.
|
||||||
|
move : iha => [b0 [? ?]].
|
||||||
|
move : ihB => [c0 [? ?]]. subst.
|
||||||
|
eexists. split. by apply PiCong; eauto.
|
||||||
|
by asimpl.
|
||||||
|
- hauto lq:on rew:off inv:Tm.
|
||||||
|
Qed.
|
||||||
|
|
||||||
End Par.
|
End Par.
|
||||||
|
|
||||||
Module Pars.
|
Module Pars.
|
||||||
|
@ -105,7 +224,9 @@ Module Pars.
|
||||||
Lemma substing n m (a b : Tm n) (ρ : fin n -> Tm m) :
|
Lemma substing n m (a b : Tm n) (ρ : fin n -> Tm m) :
|
||||||
rtc Par.R a b ->
|
rtc Par.R a b ->
|
||||||
rtc Par.R (subst_Tm ρ a) (subst_Tm ρ b).
|
rtc Par.R (subst_Tm ρ a) (subst_Tm ρ b).
|
||||||
Admitted.
|
induction 1; hauto l:on ctrs:rtc use:Par.substing.
|
||||||
|
Qed.
|
||||||
|
|
||||||
End Pars.
|
End Pars.
|
||||||
|
|
||||||
(***************** Beta rules only ***********************)
|
(***************** Beta rules only ***********************)
|
||||||
|
|
Loading…
Add table
Reference in a new issue