Finish antirenaming for injective rens
This commit is contained in:
parent
6cc3a65163
commit
5624415bc9
1 changed files with 24 additions and 15 deletions
|
@ -1272,7 +1272,7 @@ Module ERed.
|
||||||
let x := Fresh.in_goal (Option.get (Ident.of_string "x")) in
|
let x := Fresh.in_goal (Option.get (Ident.of_string "x")) in
|
||||||
intro $x;
|
intro $x;
|
||||||
lazy_match! Constr.type (Control.hyp x) with
|
lazy_match! Constr.type (Control.hyp x) with
|
||||||
| fin ?x -> _ ?y => (ltac1:(case;qauto depth:2 ctrs:ERed.R))
|
| fin ?x -> _ ?y => (ltac1:(case;hauto q:on depth:2 ctrs:ERed.R))
|
||||||
| _ => solve_anti_ren ()
|
| _ => solve_anti_ren ()
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -1282,6 +1282,13 @@ Module ERed.
|
||||||
(* destruct a. *)
|
(* destruct a. *)
|
||||||
(* exact (ξ f). *)
|
(* exact (ξ f). *)
|
||||||
|
|
||||||
|
Lemma up_injective n m (ξ : fin n -> fin m) :
|
||||||
|
(forall i j, ξ i = ξ j -> i = j) ->
|
||||||
|
forall i j, (upRen_PTm_PTm ξ) i = (upRen_PTm_PTm ξ) j -> i = j.
|
||||||
|
Proof.
|
||||||
|
sblast inv:option.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Lemma ren_injective n m (a b : PTm n) (ξ : fin n -> fin m) :
|
Lemma ren_injective n m (a b : PTm n) (ξ : fin n -> fin m) :
|
||||||
(forall i j, ξ i = ξ j -> i = j) ->
|
(forall i j, ξ i = ξ j -> i = j) ->
|
||||||
ren_PTm ξ a = ren_PTm ξ b ->
|
ren_PTm ξ a = ren_PTm ξ b ->
|
||||||
|
@ -1306,32 +1313,34 @@ Module ERed.
|
||||||
Proof.
|
Proof.
|
||||||
move => hξ.
|
move => hξ.
|
||||||
move E : (ren_PTm ξ a) => u hu.
|
move E : (ren_PTm ξ a) => u hu.
|
||||||
move : n ξ hξ a E.
|
move : n ξ a hξ E.
|
||||||
elim : m u b / hu; try solve_anti_ren.
|
elim : m u b / hu; try solve_anti_ren.
|
||||||
- move => n a m ξ hξ []//=.
|
- move => n a m ξ []//=.
|
||||||
move => u [].
|
move => u hξ [].
|
||||||
case : u => //=.
|
case : u => //=.
|
||||||
move => u0 u1 [].
|
move => u0 u1 [].
|
||||||
case : u1 => //=.
|
case : u1 => //=.
|
||||||
move => i /[swap] [].
|
move => i /[swap] [].
|
||||||
case : i => //= _ h.
|
case : i => //= _ h.
|
||||||
|
have : exists p, ren_PTm shift p = u0 by admit.
|
||||||
|
move => [p ?]. subst.
|
||||||
move : h. asimpl.
|
move : h. asimpl.
|
||||||
apply f_equal with (f := ren_PTm (scons var_zero id)) in h.
|
replace (ren_PTm (funcomp shift ξ) p) with
|
||||||
move : h. asimpl.
|
(ren_PTm shift (ren_PTm ξ p)); last by asimpl.
|
||||||
Check scons var_zero shift.
|
move /ren_injective.
|
||||||
admit.
|
move /(_ ltac:(hauto l:on)).
|
||||||
- move => n a m ξ hξ []//=.
|
move => ?. subst.
|
||||||
move => u u0 [].
|
exists p. split=>//. apply AppEta.
|
||||||
|
- move => n a m ξ [] //=.
|
||||||
|
move => u u0 hξ [].
|
||||||
case : u => //=.
|
case : u => //=.
|
||||||
case : u0 => //=.
|
case : u0 => //=.
|
||||||
move => p p0 p1 p2 [? ?] [? h]. subst.
|
move => p p0 p1 p2 [? ?] [? h]. subst.
|
||||||
have ? : p0 = p2 by eauto using ren_injective. subst.
|
have ? : p0 = p2 by eauto using ren_injective. subst.
|
||||||
hauto l:on.
|
hauto l:on.
|
||||||
-
|
- move => n a0 a1 ha iha m ξ []//= p hξ [?]. subst.
|
||||||
|
sauto lq:on use:up_injective.
|
||||||
|
Admitted.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
End ERed.
|
End ERed.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue