theory Stream_Op_Input4 imports Stream_FreeAlg4 begin abbreviation "PLS4 ≡ \<oo>\<pp>4 o Abs_Σ4 o Inl o Abs_Σ3 o Inl o Abs_Σ2 o Inl o Abs_Σ1 o Inr :: 'a ΣΣ4 K1 => 'a ΣΣ4" abbreviation "PRD4 ≡ \<oo>\<pp>4 o Abs_Σ4 o Inl o Abs_Σ3 o Inl o Abs_Σ2 o Inr :: 'a ΣΣ4 K2 => 'a ΣΣ4" abbreviation "EXP4 ≡ \<oo>\<pp>4 o Abs_Σ4 o Inl o Abs_Σ3 o Inr :: 'a ΣΣ4 K3 => 'a ΣΣ4" abbreviation "SUP4 ≡ \<oo>\<pp>4 o Abs_Σ4 o Inr :: 'a ΣΣ4 K4 => 'a ΣΣ4" lemma PLS4_transfer[transfer_rule]: "(K1_rel (ΣΣ4_rel R) ===> ΣΣ4_rel R) PLS4 PLS4" by transfer_prover lemma PRD4_transfer[transfer_rule]: "(K2_rel (ΣΣ4_rel R) ===> ΣΣ4_rel R) PRD4 PRD4" by transfer_prover lemma EXP4_transfer[transfer_rule]: "(K3_rel (ΣΣ4_rel R) ===> ΣΣ4_rel R) EXP4 EXP4" by transfer_prover lemma SUP4_transfer[transfer_rule]: "(K4_rel (ΣΣ4_rel R) ===> ΣΣ4_rel R) SUP4 SUP4" by transfer_prover definition fMax where "fMax F = (if F = {||} then 0 :: nat else Max (fset F))" definition ρ4 :: "('a × 'a F) K4 => 'a ΣΣ4 F" where "ρ4 F = (fMax ((fst o snd) |`| F), K4_as_ΣΣ4 ((snd o snd) |`| F))" lemma ρ4_transfer[transfer_rule]: "(K4_rel (rel_prod R (F_rel R)) ===> F_rel (ΣΣ4_rel R)) ρ4 ρ4" unfolding rel_pre_J_def id_apply vimage2p_def BNF_Comp.id_bnf_comp_def ρ4_def[abs_def] by transfer_prover end