(* *)
(**************************************************************************)
-include "apps_2/models/model_push.ma".
+include "apps_2/models/model_vlift.ma".
(* MODEL ********************************************************************)
record is_model (M): Prop ≝ {
mq: reflexive … (sq M);
+ mr: replace_2 … (sq M) (sq M) (sq M);
+ mc: compatible_3 … (ap M) (sq M) (sq M) (sq M);
ms: ∀gv,lv,s. ⟦⋆s⟧{M}[gv, lv] ≗ sv M s;
ml: ∀gv,lv,i. ⟦#i⟧{M}[gv, lv] ≗ lv i;
mg: ∀gv,lv,l. ⟦§l⟧{M}[gv, lv] ≗ gv l;
(∀d. ⟦T1⟧{M}[gv, ⫯[d]lv1] ≗ ⟦T2⟧{M}[gv, ⫯[d]lv2]) →
⟦ⓛ{p}W1.T1⟧[gv, lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv, lv2]
}.
+
+(* Basic properties *********************************************************)
+
+lemma seq_sym (M): is_model M → symmetric … (sq M).
+/3 width=5 by mr, mq/ qed-.
+
+lemma seq_trans (M): is_model M → Transitive … (sq M).
+/3 width=5 by mr, mq/ qed-.
+
+lemma seq_canc_sn (M): is_model M → left_cancellable … (sq M).
+/3 width=3 by seq_trans, seq_sym/ qed-.
+
+lemma seq_canc_dx (M): is_model M → right_cancellable … (sq M).
+/3 width=3 by seq_trans, seq_sym/ qed-.
+
+lemma ti_lref_vlift_eq (M): is_model M →
+ ∀gv,lv,d,i. ⟦#i⟧[gv,⫯[i←d]lv] ≗{M} d.
+#M #HM #gv #lv #d #i
+@(seq_trans … HM) [2: @ml // | skip ]
+>vlift_eq /2 width=1 by mq/
+qed.
+
+lemma ti_lref_vlift_gt (M): is_model M →
+ ∀gv,lv,d,i. ⟦#(↑i)⟧[gv,⫯[d]lv] ≗{M} ⟦#i⟧[gv,lv].
+#M #HM #gv #lv #d #i
+@(mr … HM) [4,5: @(seq_sym … HM) @(ml … HM) |1,2: skip ]
+>vlift_gt /2 width=1 by mq/
+qed.