f2@⧣❨f1@⧣❨i❩❩ = (f2∘f1)@⧣❨i❩.
#i elim i -i
[ * #p1 #f1 #f2
- <tr_compose_unfold <tr_pap_unit <tr_pap_unit //
+ <tr_compose_unfold <tr_cons_pap_unit <tr_cons_pap_unit //
| #i #IH * #p1 #f1 #f2
- <tr_compose_unfold <tr_pap_succ <tr_pap_succ //
+ <tr_compose_unfold <tr_cons_pap_succ <tr_cons_pap_succ //
]
qed.
lemma tr_compose_tls (p) (f1) (f2):
(⇂*[f1@⧣❨p❩]f2)∘(⇂*[p]f1) = ⇂*[p](f2∘f1).
#p elim p -p [| #p #IH ] * #q1 #f1 #f2 //
-<tr_compose_unfold <tr_pap_succ
+<tr_compose_unfold <tr_cons_pap_succ
>nsucc_inj <stream_tls_succ_lcons <stream_tls_succ_lcons
<IH -IH >nrplus_inj_dx >nrplus_inj_sn <stream_tls_plus //
qed.
(* Basic constructions ******************************************************)
(*** apply_O1 *)
-lemma tr_pap_unit (f):
+lemma tr_cons_pap_unit (f):
∀p. p = (p⨮f)@⧣❨𝟏❩.
// qed.
(*** apply_S1 *)
-lemma tr_pap_succ (f):
+lemma tr_cons_pap_succ (f):
∀p,i. f@⧣❨i❩+p = (p⨮f)@⧣❨↑i❩.
// qed.
stream_eq_repl … (λf1,f2. f1@⧣❨i❩ = f2@⧣❨i❩).
#i elim i -i [2: #i #IH ] * #p1 #f1 * #p2 #f2 #H
elim (stream_eq_inv_cons_bi … H) -H [1,8: |*: // ] #Hp #Hf //
-<tr_pap_succ <tr_pap_succ /3 width=1 by eq_f2/
+<tr_cons_pap_succ <tr_cons_pap_succ /3 width=1 by eq_f2/
qed.
(* Main inversions with stream_eq *******************************************)
* #p1 #f1 * #p2 #f2 #Hf @stream_eq_cons
[ @(Hf (𝟏))
| @nstream_eq_inv_ext -nstream_eq_inv_ext #i
- lapply (Hf (𝟏)) <tr_pap_unit <tr_pap_unit #H destruct
- lapply (Hf (↑i)) <tr_pap_succ <tr_pap_succ #H
+ lapply (Hf (𝟏)) <tr_cons_pap_unit <tr_cons_pap_unit #H destruct
+ lapply (Hf (↑i)) <tr_cons_pap_succ <tr_cons_pap_succ #H
/3 width=2 by eq_inv_pplus_bi_dx, eq_inv_psucc_bi/
]
qed-.