definition n2m_ctor_fold_G :: "(('c, 'a) GM_pre_GM==> 'b) ==> (('c, 'b) GFM_pre_GFM==> 'c) ==> 'a G ==> 'b" where"n2m_ctor_fold_G s1 s2 = ctor_fold_G (s1 o map_pre_GM id (id :: unit ==> unit) (ctor_fold_F (s2 o BNF_Composition.id_bnf o BNF_Composition.id_bnf)) o BNF_Composition.id_bnf o BNF_Composition.id_bnf)" definition n2m_ctor_fold_G_F :: "(('c, 'a) GM_pre_GM==> 'b) ==> (('c, 'b) GFM_pre_GFM==> 'c) ==> 'a G F ==> 'c" where"n2m_ctor_fold_G_F s1 s2 = ctor_fold_F (s2 o map_pre_GFM (id :: unit ==> unit) (n2m_ctor_fold_G s1 s2) id o BNF_Composition.id_bnf o BNF_Composition.id_bnf)"
lemma G_ctor_o_fold: "ctor_fold_G s o ctor_G = s o map_pre_G id (ctor_fold_G s)" unfolding fun_eq_iff o_apply G.ctor_fold by simp lemma F_ctor_o_fold: "ctor_fold_F s o ctor_F = s o map_pre_F id (ctor_fold_F s)" unfolding fun_eq_iff o_apply F.ctor_fold by simp
lemma G_ctor_o_rec: "ctor_rec_G s o ctor_G = s o map_pre_G id (BNF_Def.convol id (ctor_rec_G s))" unfolding fun_eq_iff o_apply G.ctor_rec by simp lemma F_ctor_o_rec: "ctor_rec_F s o ctor_F = s o map_pre_F id (BNF_Def.convol id (ctor_rec_F s))" unfolding fun_eq_iff o_apply F.ctor_rec by simp
lemma n2m_ctor_fold_G: "n2m_ctor_fold_G s1 s2 o ctor_G = s1 o map_pre_GM id id (n2m_ctor_fold_G_F s1 s2) o BNF_Composition.id_bnf o BNF_Composition.id_bnf" unfolding n2m_ctor_fold_G_def n2m_ctor_fold_G_F_def
map_pre_G_def map_pre_F_def map_pre_GM_def map_pre_GFM_def
G_ctor_o_fold id_apply comp_id id_comp comp_assoc
rewriteL_comp_comp[OF type_copy_map_comp0_undo[OF BNF_Composition.type_definition_id_bnf_UNIV BNF_Composition.type_definition_id_bnf_UNIV BNF_Composition.type_definition_id_bnf_UNIV pre_GM.map_comp0[unfolded map_pre_GM_def]]]
F.ctor_fold_o_map
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
lemma n2m_ctor_fold_G_F: "n2m_ctor_fold_G_F s1 s2 o ctor_F = s2 o map_pre_GFM id (n2m_ctor_fold_G s1 s2) (n2m_ctor_fold_G_F s1 s2) o BNF_Composition.id_bnf o BNF_Composition.id_bnf" unfolding n2m_ctor_fold_G_F_def map_pre_F_def map_pre_GM_def map_pre_GFM_def
F_ctor_o_fold id_apply comp_id id_comp comp_assoc
rewriteL_comp_comp[OF F0.map_comp0[symmetric]]
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
subsubsection‹Recursors›
definition n2m_ctor_rec_G :: "(('a G F × 'c, 'a) GM_pre_GM==> 'b) ==> (('a G F × 'c, 'a G × 'b) GFM_pre_GFM==> 'c) ==> 'a G ==> 'b" where"n2m_ctor_rec_G s1 s2 = ctor_rec_G (s1 o map_pre_GM id (id :: unit ==> unit) (BNF_Def.convol (map_F fst) (ctor_rec_F (s2 o map_pre_GFM (id :: unit ==> unit) id (map_prod (map_F fst) id) o BNF_Composition.id_bnf o BNF_Composition.id_bnf))) o BNF_Composition.id_bnf o BNF_Composition.id_bnf)"
definition n2m_ctor_rec_G_F :: "(('a G F × 'c, 'a) GM_pre_GM==> 'b) ==> (('a G F × 'c, 'a G × 'b) GFM_pre_GFM==> 'c) ==> 'a G F ==> 'c" where"n2m_ctor_rec_G_F s1 s2 = ctor_rec_F (s2 o map_pre_GFM (id :: unit ==> unit) (BNF_Def.convol id (n2m_ctor_rec_G s1 s2)) id o BNF_Composition.id_bnf o BNF_Composition.id_bnf)"
lemma n2m_ctor_rec_G: "n2m_ctor_rec_G s1 s2 o ctor_G = s1 o map_pre_GM id id (BNF_Def.convol id (n2m_ctor_rec_G_F s1 s2)) o BNF_Composition.id_bnf o BNF_Composition.id_bnf" unfolding n2m_ctor_rec_G_def n2m_ctor_rec_G_F_def
map_pre_G_def map_pre_F_def map_pre_GM_def map_pre_GFM_def
G_ctor_o_rec
id_apply comp_id id_comp comp_assoc map_prod.comp map_prod.id
fst_convol map_prod_o_convol convol_o
rewriteL_comp_comp[OF G0.map_comp0[symmetric]]
rewriteL_comp_comp[OF F0.map_comp0[symmetric]]
F.map_comp0[symmetric] F.map_id0
F.ctor_rec_o_map
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
lemma n2m_ctor_rec_G_F: "n2m_ctor_rec_G_F s1 s2 o ctor_F = s2 o map_pre_GFM id (BNF_Def.convol id (n2m_ctor_rec_G s1 s2)) (BNF_Def.convol id (n2m_ctor_rec_G_F s1 s2)) o BNF_Composition.id_bnf o BNF_Composition.id_bnf" unfolding n2m_ctor_rec_G_F_def map_pre_F_def map_pre_GM_def map_pre_GFM_def
F_ctor_o_rec id_apply comp_id id_comp comp_assoc
rewriteL_comp_comp[OF F0.map_comp0[symmetric]]
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
subsubsection‹Induction›
lemma n2m_rel_induct_G_G_F: assumes IH1: "∀x y. BNF_Def.vimage2p (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (rel_pre_GM P R S) x y ⟶ R (ctor_G x) (ctor_G y)" and IH2: "∀x y. BNF_Def.vimage2p (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (rel_pre_GFM P R S) x y ⟶ S (ctor_F x) (ctor_F y)" shows"rel_G P ≤ R ∧ rel_F (rel_G P) ≤ S" apply (rule context_conjI) apply (rule G.ctor_rel_induct[unfolded rel_pre_G_def id_apply vimage2p_def o_apply]) apply (erule mp[OF spec2[OF IH1], OF vimage2p_mono[OF _ pre_GM.rel_mono], unfolded vimage2p_def o_apply rel_pre_GM_def type_definition.Abs_inverse[OF BNF_Composition.type_definition_id_bnf_UNIV UNIV_I]]) apply (rule order_refl) apply (rule order_refl) apply (rule F.ctor_rel_induct[unfolded rel_pre_F_def id_apply vimage2p_def o_apply]) apply (erule mp[OF spec2[OF IH2], unfolded vimage2p_def o_apply rel_pre_GFM_def type_definition.Abs_inverse[OF BNF_Composition.type_definition_id_bnf_UNIV UNIV_I]])
definition n2m_dtor_unfold_coG :: "('b ==> ('c, 'a) coGM_pre_coGM) ==> ('c ==> ('c, 'b) coGcoFM_pre_coGcoFM) ==> 'b ==> 'a coG" where"n2m_dtor_unfold_coG s1 s2 = dtor_unfold_coG (BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGM id (id :: unit ==> unit) (dtor_unfold_coF (BNF_Composition.id_bnf o BNF_Composition.id_bnf o s2)) o s1)" definition n2m_dtor_unfold_coG_coF :: "('b ==> ('c, 'a) coGM_pre_coGM) ==> ('c ==>('c, 'b) coGcoFM_pre_coGcoFM) ==> 'c ==> 'a coG coF" where"n2m_dtor_unfold_coG_coF s1 s2 = dtor_unfold_coF (BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGcoFM (id :: unit ==> unit) (n2m_dtor_unfold_coG s1 s2) id o s2)"
lemma coG_dtor_o_unfold: "dtor_coG o dtor_unfold_coG s = map_pre_coG id (dtor_unfold_coG s) o s" unfolding fun_eq_iff o_apply coG.dtor_unfold by simp lemma coF_dtor_o_unfold: "dtor_coF o dtor_unfold_coF s = map_pre_coF id (dtor_unfold_coF s) o s" unfolding fun_eq_iff o_apply coF.dtor_unfold by simp
lemma coG_dtor_o_corec: "dtor_coG o dtor_corec_coG s = map_pre_coG id (case_sum id (dtor_corec_coG s)) o s" unfolding fun_eq_iff o_apply coG.dtor_corec by simp lemma coF_dtor_o_corec: "dtor_coF o dtor_corec_coF s = map_pre_coF id (case_sum id (dtor_corec_coF s)) o s" unfolding fun_eq_iff o_apply coF.dtor_corec by simp
lemma n2m_dtor_unfold_coG: "dtor_coG o n2m_dtor_unfold_coG s1 s2 = BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGM id id (n2m_dtor_unfold_coG_coF s1 s2) o s1" unfolding n2m_dtor_unfold_coG_def n2m_dtor_unfold_coG_coF_def
map_pre_coG_def map_pre_coF_def map_pre_coGM_def map_pre_coGcoFM_def
coG_dtor_o_unfold id_apply comp_id id_comp comp_assoc
rewriteL_comp_comp[OF type_copy_map_comp0_undo[OF BNF_Composition.type_definition_id_bnf_UNIV BNF_Composition.type_definition_id_bnf_UNIV BNF_Composition.type_definition_id_bnf_UNIV pre_coGM.map_comp0[unfolded map_pre_coGM_def]]]
coF.dtor_unfold_o_map
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
lemma n2m_dtor_unfold_coG_coF: "dtor_coF o n2m_dtor_unfold_coG_coF s1 s2 = BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGcoFM id (n2m_dtor_unfold_coG s1 s2) (n2m_dtor_unfold_coG_coF s1 s2) o s2" unfolding n2m_dtor_unfold_coG_coF_def map_pre_coF_def map_pre_coGM_def map_pre_coGcoFM_def
coF_dtor_o_unfold id_apply comp_id id_comp comp_assoc
rewriteL_comp_comp[OF coF0.map_comp0[symmetric]]
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
subsubsection‹Corecursors›
definition n2m_dtor_corec_coG :: "('b ==> ('a coG coF + 'c, 'a) coGM_pre_coGM) ==> ('c ==> ('a coG coF + 'c, 'a coG + 'b) coGcoFM_pre_coGcoFM) ==> 'b ==> 'a coG" where"n2m_dtor_corec_coG s1 s2 = dtor_corec_coG (BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGM id (id :: unit ==> unit) (case_sum (map_coF Inl) (dtor_corec_coF (BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGcoFM (id :: unit ==> unit) id (map_sum (map_coF Inl) id) o s2))) o s1)"
definition n2m_dtor_corec_coG_coF :: "('b ==> ('a coG coF + 'c, 'a) coGM_pre_coGM) ==> ('c ==> ('a coG coF + 'c, 'a coG + 'b) coGcoFM_pre_coGcoFM) ==> 'c ==> 'a coG coF" where"n2m_dtor_corec_coG_coF s1 s2 = dtor_corec_coF (BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGcoFM (id :: unit ==> unit) (case_sum id (n2m_dtor_corec_coG s1 s2)) id o s2)"
lemma n2m_dtor_corec_coG: "dtor_coG o n2m_dtor_corec_coG s1 s2 = BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGM id id (case_sum id (n2m_dtor_corec_coG_coF s1 s2)) o s1" unfolding n2m_dtor_corec_coG_def n2m_dtor_corec_coG_coF_def
map_pre_coG_def map_pre_coF_def map_pre_coGM_def map_pre_coGcoFM_def
coG_dtor_o_corec
id_apply comp_id id_comp comp_assoc[symmetric] map_sum.comp map_sum.id
case_sum_o_inj(1) case_sum_o_map_sum o_case_sum
rewriteR_comp_comp[OF coG0.map_comp0[symmetric]]
rewriteR_comp_comp[OF coF0.map_comp0[symmetric]]
coF.map_comp0[symmetric] coF.map_id0
coF.dtor_corec_o_map
rewriteR_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
lemma n2m_dtor_corec_coG_coF: "dtor_coF o n2m_dtor_corec_coG_coF s1 s2 = BNF_Composition.id_bnf o BNF_Composition.id_bnf o map_pre_coGcoFM id (case_sum id (n2m_dtor_corec_coG s1 s2)) (case_sum id (n2m_dtor_corec_coG_coF s1 s2)) o s2" unfolding n2m_dtor_corec_coG_coF_def map_pre_coF_def map_pre_coGM_def map_pre_coGcoFM_def
coF_dtor_o_corec id_apply comp_id id_comp comp_assoc
rewriteL_comp_comp[OF coF0.map_comp0[symmetric]]
rewriteL_comp_comp[OF type_copy_Rep_o_Abs[OF BNF_Composition.type_definition_id_bnf_UNIV]] ..
subsubsection‹Coinduction›
lemma n2m_rel_coinduct_coG_coG_coF: assumes CIH1: "∀x y. R x y ⟶ BNF_Def.vimage2p (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (rel_pre_coGM P R S) (dtor_coG x) (dtor_coG y)" and CIH2: "∀x y. S x y ⟶ BNF_Def.vimage2p (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (BNF_Composition.id_bnf o BNF_Composition.id_bnf) (rel_pre_coGcoFM P R S) (dtor_coF x) (dtor_coF y)" shows"R ≤ rel_coG P ∧ S ≤ rel_coF (rel_coG P)" apply (rule context_conjI) apply (rule coG.dtor_rel_coinduct[unfolded rel_pre_coG_def id_apply vimage2p_def o_apply]) apply (erule mp[OF spec2[OF CIH1], THEN vimage2p_mono[OF _ pre_coGM.rel_mono], unfolded vimage2p_def o_apply rel_pre_coGM_def type_definition.Abs_inverse[OF BNF_Composition.type_definition_id_bnf_UNIV UNIV_I]]) apply (rule order_refl) apply (rule order_refl) apply (rule coF.dtor_rel_coinduct[unfolded rel_pre_coF_def id_apply vimage2p_def o_apply]) apply (erule mp[OF spec2[OF CIH2], unfolded vimage2p_def o_apply rel_pre_coGcoFM_def type_definition.Abs_inverse[OF BNF_Composition.type_definition_id_bnf_UNIV UNIV_I]])
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.