interpretation "test for finite colength (rtmap)"
'IsFinite f = (isfin f).
+(* Basic eliminators ********************************************************)
+
+lemma isfin_ind (R:predicate rtmap): (āf. šā¦fā¦ ā R f) ā
+ (āf. š
ā¦fā¦ ā R f ā R (āf)) ā
+ (āf. š
ā¦fā¦ ā R f ā R (ā«Æf)) ā
+ āf. š
ā¦fā¦ ā R f.
+#R #IH1 #IH2 #IH3 #f #H elim H -H
+#n #H elim H -f -n /3 width=2 by ex_intro/
+qed-.
+
+(* Basic inversion lemmas ***************************************************)
+
+lemma isfin_inv_push: āg. š
ā¦gā¦ ā āf. āf = g ā š
ā¦fā¦.
+#g * /3 width=4 by fcla_inv_px, ex_intro/
+qed-.
+
+lemma isfin_inv_next: āg. š
ā¦gā¦ ā āf. ā«Æf = g ā š
ā¦fā¦.
+#g * #n #H #f #H0 elim (fcla_inv_nx ā¦ H ā¦ H0) -g
+/2 width=2 by ex_intro/
+qed-.
+
(* Basic properties *********************************************************)
+lemma isfin_eq_repl_back: eq_repl_back ā¦ isfin.
+#f1 * /3 width=4 by fcla_eq_repl_back, ex_intro/
+qed-.
+
+lemma isfin_eq_repl_fwd: eq_repl_fwd ā¦ isfin.
+/3 width=3 by isfin_eq_repl_back, eq_repl_sym/ qed-.
+
lemma isfin_isid: āf. šā¦fā¦ ā š
ā¦fā¦.
/3 width=2 by fcla_isid, ex_intro/ qed.
#f * /3 width=2 by fcla_next, ex_intro/
qed.
-lemma isfin_eq_repl_back: eq_repl_back ā¦ isfin.
-#f1 * /3 width=4 by fcla_eq_repl_back, ex_intro/
-qed-.
+(* Properties with iterated push ********************************************)
-lemma isfin_eq_repl_fwd: eq_repl_fwd ā¦ isfin.
-/3 width=3 by isfin_eq_repl_back, eq_repl_sym/ qed-.
+lemma isfin_pushs: ān,f. š
ā¦fā¦ ā š
ā¦ā*[n]fā¦.
+#n elim n -n /3 width=3 by isfin_push/
+qed.
-(* Basic eliminators ********************************************************)
+(* Inversion lemmas with iterated push **************************************)
-lemma isfin_ind (R:predicate rtmap): (āf. šā¦fā¦ ā R f) ā
- (āf. š
ā¦fā¦ ā R f ā R (āf)) ā
- (āf. š
ā¦fā¦ ā R f ā R (ā«Æf)) ā
- āf. š
ā¦fā¦ ā R f.
-#R #IH1 #IH2 #IH3 #f #H elim H -H
-#n #H elim H -f -n /3 width=2 by ex_intro/
-qed-.
+lemma isfin_inv_pushs: ān,g. š
ā¦ā*[n]gā¦ ā š
ā¦gā¦.
+#n elim n -n /3 width=3 by isfin_inv_push/
+qed.
-(* Basic inversion lemmas ***************************************************)
+(* Properties with tail *****************************************************)
-lemma isfin_inv_next: āg. š
ā¦gā¦ ā āf. ā«Æf = g ā š
ā¦fā¦.
-#g * #n #H #f #H0 elim (fcla_inv_nx ā¦ H ā¦ H0) -g
-/2 width=2 by ex_intro/
+lemma isfin_tl: āf. š
ā¦fā¦ ā š
ā¦ā«±fā¦.
+#f elim (pn_split f) * #g #H #Hf destruct
+/3 width=3 by isfin_inv_push, isfin_inv_next/
+qed.
+
+(* Inversion lemmas with tail ***********************************************)
+
+lemma isfin_inv_tl: āf. š
ā¦ā«±fā¦ ā š
ā¦fā¦.
+#f elim (pn_split f) * /2 width=1 by isfin_next, isfin_push/
qed-.
-(* Basic forward lemmas *****************************************************)
+(* Inversion lemmas with iterated tail **************************************)
-lemma isfin_fwd_push: āg. š
ā¦gā¦ ā āf. āf = g ā š
ā¦fā¦.
-#g * /3 width=4 by fcla_inv_px, ex_intro/
+lemma isfin_inv_tls: ān,f. š
ā¦ā«±*[n]fā¦ ā š
ā¦fā¦.
+#n elim n -n /3 width=1 by isfin_inv_tl/
qed-.