Finish the pair pair case
This commit is contained in:
parent
60a4eb886f
commit
49a254fbef
1 changed files with 32 additions and 5 deletions
|
@ -945,12 +945,39 @@ Proof.
|
||||||
sfirstorder.
|
sfirstorder.
|
||||||
+ case : b => //=; try qauto depth:1 use:T_AbsPair_Imp, T_PairBind_Imp, T_PairUniv_Imp.
|
+ case : b => //=; try qauto depth:1 use:T_AbsPair_Imp, T_PairBind_Imp, T_PairUniv_Imp.
|
||||||
move => a1 b1 a0 b0 h _ _ Γ A hu0 hu1.
|
move => a1 b1 a0 b0 h _ _ Γ A hu0 hu1.
|
||||||
|
have [sn0 sn1] : SN (PPair a0 b0) /\ SN (PPair a1 b1)
|
||||||
|
by qauto l:on use:fundamental_theorem, logrel.SemWt_SN.
|
||||||
apply : CE_HRed; eauto using rtc_refl.
|
apply : CE_HRed; eauto using rtc_refl.
|
||||||
admit.
|
move /Pair_Inv : hu0 => [A0][B0][ha0][hb0]hSu0.
|
||||||
(* suff : exists l, l < n /\ algo_metric l a0 b0 /\ algo_metric l a1 b1. *)
|
move /Pair_Inv : hu1 => [A1][B1][ha1][hb1]hSu1.
|
||||||
(* move => [l [hl [hal0 hal1]]]. *)
|
move /Sub_Bind_InvR : (hSu0).
|
||||||
(* apply CE_PairPair. eapply ih; eauto. *)
|
move => [i][A2][B2]hE.
|
||||||
(* by eapply ih; eauto. *)
|
have hSu12 : Γ ⊢ PBind PSig A1 B1 ≲ PBind PSig A2 B2
|
||||||
|
by eauto using Su_Transitive, Su_Eq.
|
||||||
|
have hSu02 : Γ ⊢ PBind PSig A0 B0 ≲ PBind PSig A2 B2
|
||||||
|
by eauto using Su_Transitive, Su_Eq.
|
||||||
|
have hA02 : Γ ⊢ A0 ≲ A2 by eauto using Su_Sig_Proj1.
|
||||||
|
have hA12 : Γ ⊢ A1 ≲ A2 by eauto using Su_Sig_Proj1.
|
||||||
|
have ha0A2 : Γ ⊢ a0 ∈ A2 by eauto using T_Conv.
|
||||||
|
have ha1A2 : Γ ⊢ a1 ∈ A2 by eauto using T_Conv.
|
||||||
|
move /algo_metric_pair : h sn0 sn1; repeat move/[apply].
|
||||||
|
move => [j][hj][ih0 ih1].
|
||||||
|
have haE : a0 ⇔ a1 by hauto l:on.
|
||||||
|
apply CE_PairPair => //.
|
||||||
|
have {}haE : Γ ⊢ a0 ≡ a1 ∈ A2
|
||||||
|
by hauto l:on use:coqeq_sound_mutual.
|
||||||
|
have {}hb1 : Γ ⊢ b1 ∈ subst_PTm (scons a1 VarPTm) B2.
|
||||||
|
apply : T_Conv; eauto.
|
||||||
|
move /E_Refl in ha1. hauto l:on use:Su_Sig_Proj2.
|
||||||
|
eapply ih; cycle -1; eauto.
|
||||||
|
apply : T_Conv; eauto.
|
||||||
|
apply Su_Transitive with (B := subst_PTm (scons a0 VarPTm) B2).
|
||||||
|
move /E_Refl in ha0. hauto l:on use:Su_Sig_Proj2.
|
||||||
|
move : hE haE. clear.
|
||||||
|
move => h.
|
||||||
|
eapply regularity in h.
|
||||||
|
move : h => [_ [hB _]].
|
||||||
|
eauto using bind_inst.
|
||||||
+ case : b => //=.
|
+ case : b => //=.
|
||||||
* hauto lq:on use:T_AbsBind_Imp.
|
* hauto lq:on use:T_AbsBind_Imp.
|
||||||
* hauto lq:on rew:off use:T_PairBind_Imp.
|
* hauto lq:on rew:off use:T_PairBind_Imp.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue