-
-lemma lift_path_root (f) (p):
- ∃∃r. 𝐞 = ⊗r & ⊗p●r = ↑[f]p.
-#f #p @(list_ind_rcons … p) -p
-[ /2 width=3 by ex2_intro/
-| #p * [ #n ] /2 width=3 by ex2_intro/
-]
-qed-.
-
-(* Advanced inversions with proj_path ***************************************)
-
-lemma lift_path_inv_d_sn (k) (q) (p) (f):
- (𝗱k◗q) = ↑[f]p →
- ∃∃r,h. 𝐞 = ⊗r & (↑[r]f)@❨h❩ = k & 𝐞 = q & r◖𝗱h = p.
-#k #q #p @(path_ind_lift … p) -p
-[| #n | #n #l #p |*: #p ] [|*: #IH ] #f
-[ <lift_path_empty #H destruct
-| <lift_path_d_empty_sn #H destruct -IH
- /2 width=5 by ex4_2_intro/
-| <lift_path_d_lcons_sn #H
- elim (IH … H) -IH -H #r #h #Hr #Hh #Hq #Hp destruct
- /2 width=5 by ex4_2_intro/
-| <lift_path_m_sn #H
- elim (IH … H) -IH -H #r #h #Hr #Hh #Hq #Hp destruct
- /2 width=5 by ex4_2_intro/
-| <lift_path_L_sn #H destruct
-| <lift_path_A_sn #H destruct
-| <lift_path_S_sn #H destruct
-]
-qed-.
-
-lemma lift_path_inv_m_sn (q) (p) (f):
- (𝗺◗q) = ↑[f]p → ⊥.
-#q #p @(path_ind_lift … p) -p
-[| #n | #n #l #p |*: #p ] [|*: #IH ] #f
-[ <lift_path_empty #H destruct
-| <lift_path_d_empty_sn #H destruct
-| <lift_path_d_lcons_sn #H /2 width=2 by/
-| <lift_path_m_sn #H /2 width=2 by/
-| <lift_path_L_sn #H destruct
-| <lift_path_A_sn #H destruct
-| <lift_path_S_sn #H destruct
-]
-qed-.
-
-lemma lift_path_inv_L_sn (q) (p) (f):
- (𝗟◗q) = ↑[f]p →
- ∃∃r1,r2. 𝐞 = ⊗r1 & q = ↑[⫯↑[r1]f]r2 & r1●𝗟◗r2 = p.
-#q #p @(path_ind_lift … p) -p
-[| #n | #n #l #p |*: #p ] [|*: #IH ] #f
-[ <lift_path_empty #H destruct
-| <lift_path_d_empty_sn #H destruct
-| <lift_path_d_lcons_sn #H
- elim (IH … H) -IH -H #r1 #r2 #Hr1 #Hq #Hp destruct
- /2 width=5 by ex3_2_intro/
-| <lift_path_m_sn #H
- elim (IH … H) -IH -H #r1 #r2 #Hr1 #Hq #Hp destruct
- /2 width=5 by ex3_2_intro/
-| <lift_path_L_sn #H destruct -IH
- /2 width=5 by ex3_2_intro/
-| <lift_path_A_sn #H destruct
-| <lift_path_S_sn #H destruct
-]
-qed-.
-
-lemma lift_path_inv_A_sn (q) (p) (f):
- (𝗔◗q) = ↑[f]p →
- ∃∃r1,r2. 𝐞 = ⊗r1 & q = ↑[↑[r1]f]r2 & r1●𝗔◗r2 = p.
-#q #p @(path_ind_lift … p) -p
-[| #n | #n #l #p |*: #p ] [|*: #IH ] #f
-[ <lift_path_empty #H destruct
-| <lift_path_d_empty_sn #H destruct
-| <lift_path_d_lcons_sn #H
- elim (IH … H) -IH -H #r1 #r2 #Hr1 #Hq #Hp destruct
- /2 width=5 by ex3_2_intro/
-| <lift_path_m_sn #H
- elim (IH … H) -IH -H #r1 #r2 #Hr1 #Hq #Hp destruct
- /2 width=5 by ex3_2_intro/
-| <lift_path_L_sn #H destruct
-| <lift_path_A_sn #H destruct -IH
- /2 width=5 by ex3_2_intro/
-| <lift_path_S_sn #H destruct
-]
-qed-.
-
-lemma lift_path_inv_S_sn (q) (p) (f):
- (𝗦◗q) = ↑[f]p →
- ∃∃r1,r2. 𝐞 = ⊗r1 & q = ↑[↑[r1]f]r2 & r1●𝗦◗r2 = p.
-#q #p @(path_ind_lift … p) -p
-[| #n | #n #l #p |*: #p ] [|*: #IH ] #f
-[ <lift_path_empty #H destruct
-| <lift_path_d_empty_sn #H destruct
-| <lift_path_d_lcons_sn #H
- elim (IH … H) -IH -H #r1 #r2 #Hr1 #Hq #Hp destruct
- /2 width=5 by ex3_2_intro/
-| <lift_path_m_sn #H
- elim (IH … H) -IH -H #r1 #r2 #Hr1 #Hq #Hp destruct
- /2 width=5 by ex3_2_intro/| <lift_path_L_sn #H destruct
-| <lift_path_A_sn #H destruct
-| <lift_path_S_sn #H destruct -IH
- /2 width=5 by ex3_2_intro/
-]
-qed-.
-
-(* Inversions with proper condition for path ********************************)
-
-lemma lift_inv_append_proper_dx (q2) (q1) (p) (f):
- q2 ϵ 𝐏 → q1●q2 = ↑[f]p →
- ∃∃p1,p2. ⊗p1 = q1 & ↑[↑[p1]f]p2 = q2 & p1●p2 = p.
-#q2 #q1 elim q1 -q1
-[ #p #f #Hq2 <list_append_empty_sn #H destruct
- /2 width=5 by ex3_2_intro/
-| * [ #n1 ] #q1 #IH #p #f #Hq2 <list_append_lcons_sn #H
- [ elim (lift_path_inv_d_sn … H) -H #r1 #m1 #_ #_ #H0 #_ -IH
- elim (eq_inv_list_empty_append … H0) -H0 #_ #H0 destruct
- elim Hq2 -Hq2 //
- | elim (lift_path_inv_m_sn … H)
- | elim (lift_path_inv_L_sn … H) -H #r1 #s1 #Hr1 #Hs1 #H0 destruct
- elim (IH … Hs1) -IH -Hs1 // -Hq2 #p1 #p2 #H1 #H2 #H3 destruct
- @(ex3_2_intro … (r1●𝗟◗p1)) //
- <structure_append <Hr1 -Hr1 //
- | elim (lift_path_inv_A_sn … H) -H #r1 #s1 #Hr1 #Hs1 #H0 destruct
- elim (IH … Hs1) -IH -Hs1 // -Hq2 #p1 #p2 #H1 #H2 #H3 destruct
- @(ex3_2_intro … (r1●𝗔◗p1)) //
- <structure_append <Hr1 -Hr1 //
- | elim (lift_path_inv_S_sn … H) -H #r1 #s1 #Hr1 #Hs1 #H0 destruct
- elim (IH … Hs1) -IH -Hs1 // -Hq2 #p1 #p2 #H1 #H2 #H3 destruct
- @(ex3_2_intro … (r1●𝗦◗p1)) //
- <structure_append <Hr1 -Hr1 //
- ]
-]
-qed-.
-
-(* Inversions with inner condition for path *********************************)
-
-lemma lift_inv_append_inner_sn (q1) (q2) (p) (f):
- q1 ϵ 𝐈 → q1●q2 = ↑[f]p →
- ∃∃p1,p2. ⊗p1 = q1 & ↑[↑[p1]f]p2 = q2 & p1●p2 = p.
-#q1 @(list_ind_rcons … q1) -q1
-[ #q2 #p #f #Hq1 <list_append_empty_sn #H destruct
- /2 width=5 by ex3_2_intro/
-| #q1 * [ #n1 ] #_ #q2 #p #f #Hq2
- [ elim (pic_inv_d_dx … Hq2)
- | <list_append_rcons_sn #H0
- elim (lift_inv_append_proper_dx … H0) -H0 // #p1 #p2 #H1 #H2 #H3 destruct
- elim (lift_path_inv_m_sn … (sym_eq … H2))
- | <list_append_rcons_sn #H0
- elim (lift_inv_append_proper_dx … H0) -H0 // #p1 #p2 #H1 #H2 #H3 destruct
- elim (lift_path_inv_L_sn … (sym_eq … H2)) -H2 #r2 #s2 #Hr2 #Hs2 #H0 destruct
- @(ex3_2_intro … (p1●r2◖𝗟)) [1,3: // ]
- [ <structure_append <structure_L_dx <Hr2 -Hr2 //
- | <list_append_assoc <list_append_rcons_sn //
- ]
- | <list_append_rcons_sn #H0
- elim (lift_inv_append_proper_dx … H0) -H0 // #p1 #p2 #H1 #H2 #H3 destruct
- elim (lift_path_inv_A_sn … (sym_eq … H2)) -H2 #r2 #s2 #Hr2 #Hs2 #H0 destruct
- @(ex3_2_intro … (p1●r2◖𝗔)) [1,3: // ]
- [ <structure_append <structure_A_dx <Hr2 -Hr2 //
- | <list_append_assoc <list_append_rcons_sn //
- ]
- | <list_append_rcons_sn #H0
- elim (lift_inv_append_proper_dx … H0) -H0 // #p1 #p2 #H1 #H2 #H3 destruct
- elim (lift_path_inv_S_sn … (sym_eq … H2)) -H2 #r2 #s2 #Hr2 #Hs2 #H0 destruct
- @(ex3_2_intro … (p1●r2◖𝗦)) [1,3: // ]
- [ <structure_append <structure_S_dx <Hr2 -Hr2 //
- | <list_append_assoc <list_append_rcons_sn //
- ]
- ]
-]
-qed-.