include "ground/arith/nat_lt.ma".
include "ground/relocation/fr2_map.ma".
-(* RELATIONAL SUBTRACTION FOR FINITE RELOCATION MAPS WITH PAIRS *******************************************)
+(* RELATIONAL SUBTRACTION FOR FINITE RELOCATION MAPS WITH PAIRS *************)
(*** minuss *)
inductive fr2_minus: nat → relation fr2_map ≝
(*** minuss_nil *)
-| fr2_minus_nil (i):
- fr2_minus i (◊) (◊)
+| fr2_minus_empty (i):
+ fr2_minus i (𝐞) (𝐞)
(*** minuss_lt *)
| fr2_minus_lt (f1) (f2) (d) (h) (i):
- i < d → fr2_minus i f1 f2 → fr2_minus i (❨d,h❩;f1) (❨d-i,h❩;f2)
+ i < d → fr2_minus i f1 f2 → fr2_minus i (❨d,h❩◗f1) (❨d-i,h❩◗f2)
(*** minuss_ge *)
| fr2_minus_ge (f1) (f2) (d) (h) (i):
- d ≤ i → fr2_minus (h+i) f1 f2 → fr2_minus i (❨d,h❩;f1) f2
+ d ≤ i → fr2_minus (h+i) f1 f2 → fr2_minus i (❨d,h❩◗f1) f2
.
interpretation
"minus (finite relocation maps with pairs)"
'RMinus f1 i f2 = (fr2_minus i f1 f2).
-(* Basic inversion lemmas ***************************************************)
+(* Basic inversions *********************************************************)
(*** minuss_inv_nil1 *)
-lemma fr2_minus_inv_nil_sn (f2) (i):
- ◊ ▭ i ≘ f2 → f2 = ◊.
-#f2 #i @(insert_eq_1 … (◊))
+lemma fr2_minus_inv_empty_sn (f2) (i):
+ 𝐞 ▭ i ≘ f2 → f2 = 𝐞.
+#f2 #i @(insert_eq_1 … (𝐞))
#f1 * -f1 -f2 -i
[ //
| #f1 #f2 #d #h #i #_ #_ #H destruct
qed-.
(*** minuss_inv_cons1 *)
-lemma fr2_minus_inv_cons_sn (f1) (f2) (d) (h) (i):
- ❨d, h❩;f1 ▭ i ≘ f2 →
+lemma fr2_minus_inv_lcons_sn (f1) (f2) (d) (h) (i):
+ ❨d, h❩◗f1 ▭ i ≘ f2 →
∨∨ ∧∧ d ≤ i & f1 ▭ h+i ≘ f2
- | ∃∃f. i < d & f1 ▭ i ≘ f & f2 = ❨d-i,h❩;f.
-#g1 #f2 #d #h #i @(insert_eq_1 … (❨d,h❩;g1))
+ | ∃∃f. i < d & f1 ▭ i ≘ f & f2 = ❨d-i,h❩◗f.
+#g1 #f2 #d #h #i @(insert_eq_1 … (❨d,h❩◗g1))
#f1 * -f1 -f2 -i
[ #i #H destruct
| #f1 #f #d1 #h1 #i1 #Hid1 #Hf #H destruct /3 width=3 by ex3_intro, or_intror/
qed-.
(*** minuss_inv_cons1_ge *)
-lemma fr2_minus_inv_cons_sn_ge (f1) (f2) (d) (h) (i):
- ❨d, h❩;f1 ▭ i ≘ f2 → d ≤ i → f1 ▭ h+i ≘ f2.
+lemma fr2_minus_inv_lcons_sn_ge (f1) (f2) (d) (h) (i):
+ ❨d, h❩◗f1 ▭ i ≘ f2 → d ≤ i → f1 ▭ h+i ≘ f2.
#f1 #f2 #d #h #i #H
-elim (fr2_minus_inv_cons_sn … H) -H * // #f #Hid #_ #_ #Hdi
+elim (fr2_minus_inv_lcons_sn … H) -H * // #f #Hid #_ #_ #Hdi
elim (nlt_ge_false … Hid Hdi)
qed-.
(*** minuss_inv_cons1_lt *)
-lemma fr2_minus_inv_cons_sn_lt (f1) (f2) (d) (h) (i):
- ❨d, h❩;f1 ▭ i ≘ f2 → i < d →
- ∃∃f. f1 ▭ i ≘ f & f2 = ❨d-i,h❩;f.
-#f1 #f2 #d #h #i #H elim (fr2_minus_inv_cons_sn … H) -H *
+lemma fr2_minus_inv_lcons_sn_lt (f1) (f2) (d) (h) (i):
+ ❨d, h❩◗f1 ▭ i ≘ f2 → i < d →
+ ∃∃f. f1 ▭ i ≘ f & f2 = ❨d-i,h❩◗f.
+#f1 #f2 #d #h #i #H elim (fr2_minus_inv_lcons_sn … H) -H *
[ #Hdi #_ #Hid elim (nlt_ge_false … Hid Hdi)
| /2 width=3 by ex2_intro/
]