2 include "ground_2/lib/exteq.ma".
3 include "apps_2/models/model_li.ma".
4 include "apps_2/models/vdrop.ma".
6 lemma vlift_ext (M): ∀i. compatible_3 … (vlift M i) (eq …) (exteq …) (exteq …).
7 #M #i #d1 #d2 #Hd12 #lv1 #lv2 #HLv12 #j
8 elim (lt_or_eq_or_gt j i) #Hij destruct
9 [ >vlift_lt // >vlift_lt //
10 | >vlift_eq >vlift_eq //
11 | >vlift_gt // >vlift_gt //
15 lemma vdrop_ext (M): ∀i. compatible_2 … (vdrop M i) (exteq …) (exteq …).
16 #M #i #lv1 #lv2 #Hlv12 #j elim (lt_or_ge j i) #Hji
17 [ >vdrop_lt // >vdrop_lt //
18 | >vdrop_ge // >vdrop_ge //
22 lemma vlift_vdrop_eq (M): ∀lv,i. lv ≐{?,dd M} ⫯[i←lv i]⫰[i]lv.
23 #M #lv #i #j elim (lt_or_eq_or_gt j i) #Hji destruct
24 [ >vlift_lt // >vdrop_lt //
26 | >vlift_gt // >vdrop_ge /2 width=1 by monotonic_pred/
27 <(lt_succ_pred … Hji) //
31 axiom vdrop_vlift_eq: ∀M,lv,d,i. lv ≐{?,dd M} ⫰[i]⫯[i←d]lv.
33 #M #lv #d #i #j elim (lt_or_eq_or_gt j i) #Hji destruct
36 lemma ext_inv_vlift_sn (M): ∀lv1,y,i,d. ⫯[i←d]lv1 ≐{?,dd M} y →
37 ∧∧ d = y i & lv1 ≐ ⫰[i]y.
38 #M #lv1 #y #i #d #H @conj
39 [ lapply (H i) -H >vlift_eq //
40 | @exteq_trans [2: @(vdrop_vlift_eq … d i) | skip ]
45 lemma ext_inv_vlift_sn (M): ∀lv1,y,i,d. ⫯[i←d]lv1 ≐{?,dd M} y →
46 ∃∃lv2. lv1 ≐ lv2 & ⫯[i←d]lv2 = y.
48 lemma li_repl (M) (gv): ∀lv1,L. lv1 ϵ ⟦L⟧{M}[gv] →
49 ∀lv2. lv1 ≐ lv2 → lv2 ϵ ⟦L⟧{M}[gv].
50 #M #gv #lv1 #L #H elim H -lv1 -L
53 | #lv1 #d #K #W #_ #IH #y #H
58 lemma ext_veq (M): is_model M →
59 ∀lv1,lv2. lv1 ≐ lv2 → lv1 ≗{M} lv2.
60 /2 width=1 by mr/ qed.
62 lemma veq_repl_exteq (M): is_model M →
63 replace_2 … (veq M) (exteq …) (exteq …).
64 /2 width=5 by mq/ qed-.
66 lemma exteq_veq_trans (M): ∀lv1,lv. lv1 ≐ lv →
67 ∀lv2. lv ≗{M} lv2 → lv1 ≗ lv2.
70 lemma ti_ext_l (M): is_model M →
71 ∀T,gv,lv1,lv2. lv1 ≐ lv2 →
72 ⟦T⟧[gv, lv1] ≗{M} ⟦T⟧[gv, lv2].
73 /3 width=1 by ti_comp_l, ext_veq/ qed.
75 lemma valign_ext (M) (l): compatible_2 … (valign M l) (exteq …) (exteq …).
76 #M #l #lv1 #lv2 #HLv12 #i
77 >valign_rw >valign_rw //