theory Stream_Op_Input2 imports Stream_FreeAlg2 begin abbreviation "PLS2 ≡ \<oo>\<pp>2 o Abs_Σ2 o Inl o Abs_Σ1 o Inr :: 'a ΣΣ2 K1 => 'a ΣΣ2" abbreviation "PRD2 ≡ \<oo>\<pp>2 o Abs_Σ2 o Inr :: 'a ΣΣ2 K2 => 'a ΣΣ2" lemma PLS2_transfer[transfer_rule]: "(K1_rel (ΣΣ2_rel R) ===> ΣΣ2_rel R) PLS2 PLS2" by transfer_prover lemma PRD2_transfer[transfer_rule]: "(K2_rel (ΣΣ2_rel R) ===> ΣΣ2_rel R) PRD2 PRD2" by transfer_prover definition ρ2 :: "('a × 'a F) K2 => 'a ΣΣ2 F" where "ρ2 a_m_a'_b_n_b' = (let a_m_a' = fst a_m_a'_b_n_b' ; b_n_b' = snd a_m_a'_b_n_b' ; a = fst a_m_a' ; m = fst (snd a_m_a') ; a' = snd (snd a_m_a') ; b = fst b_n_b' ; n = fst (snd b_n_b') ; b' = snd (snd b_n_b') in (m * n, PLS2 (K2_as_ΣΣ2 (a,b'), K2_as_ΣΣ2 (a',b))))" lemma ρ2_transfer[transfer_rule]: "(K2_rel (rel_prod R (F_rel R)) ===> F_rel (ΣΣ2_rel R)) ρ2 ρ2" unfolding Let_def ρ2_def[abs_def] rel_pre_J_def id_apply vimage2p_def BNF_Comp.id_bnf_comp_def by transfer_prover end