236 lemma mono_neutral_left: "finite T \<Longrightarrow> S \<subseteq> T \<Longrightarrow> \<forall>i \<in> T - S. g i = \<^bold>1 \<Longrightarrow> F g S = F g T" |
236 lemma mono_neutral_left: "finite T \<Longrightarrow> S \<subseteq> T \<Longrightarrow> \<forall>i \<in> T - S. g i = \<^bold>1 \<Longrightarrow> F g S = F g T" |
237 by (blast intro: mono_neutral_cong_left) |
237 by (blast intro: mono_neutral_cong_left) |
238 |
238 |
239 lemma mono_neutral_right: "finite T \<Longrightarrow> S \<subseteq> T \<Longrightarrow> \<forall>i \<in> T - S. g i = \<^bold>1 \<Longrightarrow> F g T = F g S" |
239 lemma mono_neutral_right: "finite T \<Longrightarrow> S \<subseteq> T \<Longrightarrow> \<forall>i \<in> T - S. g i = \<^bold>1 \<Longrightarrow> F g T = F g S" |
240 by (blast intro!: mono_neutral_left [symmetric]) |
240 by (blast intro!: mono_neutral_left [symmetric]) |
|
241 |
|
242 lemma mono_neutral_cong: |
|
243 assumes [simp]: "finite T" "finite S" |
|
244 and *: "\<And>i. i \<in> T - S \<Longrightarrow> h i = \<^bold>1" "\<And>i. i \<in> S - T \<Longrightarrow> g i = \<^bold>1" |
|
245 and gh: "\<And>x. x \<in> S \<inter> T \<Longrightarrow> g x = h x" |
|
246 shows "F g S = F h T" |
|
247 proof- |
|
248 have "F g S = F g (S \<inter> T)" |
|
249 by(rule mono_neutral_right)(auto intro: *) |
|
250 also have "\<dots> = F h (S \<inter> T)" using refl gh by(rule cong) |
|
251 also have "\<dots> = F h T" |
|
252 by(rule mono_neutral_left)(auto intro: *) |
|
253 finally show ?thesis . |
|
254 qed |
241 |
255 |
242 lemma reindex_bij_betw: "bij_betw h S T \<Longrightarrow> F (\<lambda>x. g (h x)) S = F g T" |
256 lemma reindex_bij_betw: "bij_betw h S T \<Longrightarrow> F (\<lambda>x. g (h x)) S = F g T" |
243 by (auto simp: bij_betw_def reindex) |
257 by (auto simp: bij_betw_def reindex) |
244 |
258 |
245 lemma reindex_bij_witness: |
259 lemma reindex_bij_witness: |