theory Tree_Op_Input1 imports Tree_FreeAlg1 begin abbreviation "PLS1 ≡ \<oo>\<pp>1 o Abs_Σ1 o Inr :: 'a ΣΣ1 K1 => 'a ΣΣ1" lemma PLS1_transfer[transfer_rule]: "(K1_rel (ΣΣ1_rel R) ===> ΣΣ1_rel R) PLS1 PLS1" by transfer_prover definition ρ1 :: "('a × 'a F) K1 => 'a ΣΣ1 F" where "ρ1 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, map K1_as_ΣΣ1 (zip a' b')))" lemma ρ1_transfer[transfer_rule]: "(K1_rel (rel_prod R (F_rel R)) ===> F_rel (ΣΣ1_rel R)) ρ1 ρ1" unfolding Let_def ρ1_def[abs_def] rel_pre_J_def id_apply vimage2p_def BNF_Comp.id_bnf_comp_def apply (rule rel_funI) apply (rule rel_funD[OF rel_funD[OF Pair_transfer], rotated]) apply (rule rel_funD[OF rel_funD[OF map_transfer], rotated -2]) apply (rule K1_as_ΣΣ1_transfer) apply (rule rel_funD[OF rel_funD[OF zip_transfer]]) apply auto done end