src/HOL/Topological_Spaces.thy
changeset 55945 e96383acecf9
parent 55942 c2d96043de4b
child 56020 f92479477c52
equal deleted inserted replaced
55944:7ab8f003fe41 55945:e96383acecf9
  2361     unfolding Quotient_alt_def by blast
  2361     unfolding Quotient_alt_def by blast
  2362 
  2362 
  2363   fix F G
  2363   fix F G
  2364   assume "rel_filter T F G"
  2364   assume "rel_filter T F G"
  2365   thus "filtermap Abs F = G" unfolding filter_eq_iff
  2365   thus "filtermap Abs F = G" unfolding filter_eq_iff
  2366     by(auto simp add: eventually_filtermap rel_filter_eventually * fun_relI del: iffI elim!: fun_relD)
  2366     by(auto simp add: eventually_filtermap rel_filter_eventually * rel_funI del: iffI elim!: rel_funD)
  2367 next
  2367 next
  2368   from Q have *: "\<And>x. T (Rep x) x" unfolding Quotient_alt_def by blast
  2368   from Q have *: "\<And>x. T (Rep x) x" unfolding Quotient_alt_def by blast
  2369 
  2369 
  2370   fix F
  2370   fix F
  2371   show "rel_filter T (filtermap Rep F) F" 
  2371   show "rel_filter T (filtermap Rep F) F" 
  2372     by(auto elim: fun_relD intro: * intro!: ext arg_cong[where f="\<lambda>P. eventually P F"] fun_relI
  2372     by(auto elim: rel_funD intro: * intro!: ext arg_cong[where f="\<lambda>P. eventually P F"] rel_funI
  2373             del: iffI simp add: eventually_filtermap rel_filter_eventually)
  2373             del: iffI simp add: eventually_filtermap rel_filter_eventually)
  2374 qed(auto simp add: map_fun_def o_def eventually_filtermap filter_eq_iff fun_eq_iff rel_filter_eventually
  2374 qed(auto simp add: map_fun_def o_def eventually_filtermap filter_eq_iff fun_eq_iff rel_filter_eventually
  2375          fun_quotient[OF fun_quotient[OF Q identity_quotient] identity_quotient, unfolded Quotient_alt_def])
  2375          fun_quotient[OF fun_quotient[OF Q identity_quotient] identity_quotient, unfolded Quotient_alt_def])
  2376 
  2376 
  2377 lemma eventually_parametric [transfer_rule]:
  2377 lemma eventually_parametric [transfer_rule]:
  2378   "((A ===> op =) ===> rel_filter A ===> op =) eventually eventually"
  2378   "((A ===> op =) ===> rel_filter A ===> op =) eventually eventually"
  2379 by(simp add: fun_rel_def rel_filter_eventually)
  2379 by(simp add: rel_fun_def rel_filter_eventually)
  2380 
  2380 
  2381 lemma rel_filter_eq [relator_eq]: "rel_filter op = = op ="
  2381 lemma rel_filter_eq [relator_eq]: "rel_filter op = = op ="
  2382 by(auto simp add: rel_filter_eventually fun_rel_eq fun_eq_iff filter_eq_iff)
  2382 by(auto simp add: rel_filter_eventually rel_fun_eq fun_eq_iff filter_eq_iff)
  2383 
  2383 
  2384 lemma rel_filter_mono [relator_mono]:
  2384 lemma rel_filter_mono [relator_mono]:
  2385   "A \<le> B \<Longrightarrow> rel_filter A \<le> rel_filter B"
  2385   "A \<le> B \<Longrightarrow> rel_filter A \<le> rel_filter B"
  2386 unfolding rel_filter_eventually[abs_def]
  2386 unfolding rel_filter_eventually[abs_def]
  2387 by(rule le_funI)+(intro fun_mono fun_mono[THEN le_funD, THEN le_funD] order.refl)
  2387 by(rule le_funI)+(intro fun_mono fun_mono[THEN le_funD, THEN le_funD] order.refl)
  2388 
  2388 
  2389 lemma rel_filter_conversep [simp]: "rel_filter A\<inverse>\<inverse> = (rel_filter A)\<inverse>\<inverse>"
  2389 lemma rel_filter_conversep [simp]: "rel_filter A\<inverse>\<inverse> = (rel_filter A)\<inverse>\<inverse>"
  2390 by(auto simp add: rel_filter_eventually fun_eq_iff fun_rel_def)
  2390 by(auto simp add: rel_filter_eventually fun_eq_iff rel_fun_def)
  2391 
  2391 
  2392 lemma is_filter_parametric_aux:
  2392 lemma is_filter_parametric_aux:
  2393   assumes "is_filter F"
  2393   assumes "is_filter F"
  2394   assumes [transfer_rule]: "bi_total A" "bi_unique A"
  2394   assumes [transfer_rule]: "bi_total A" "bi_unique A"
  2395   and [transfer_rule]: "((A ===> op =) ===> op =) F G"
  2395   and [transfer_rule]: "((A ===> op =) ===> op =) F G"
  2425 qed
  2425 qed
  2426 
  2426 
  2427 lemma is_filter_parametric [transfer_rule]:
  2427 lemma is_filter_parametric [transfer_rule]:
  2428   "\<lbrakk> bi_total A; bi_unique A \<rbrakk>
  2428   "\<lbrakk> bi_total A; bi_unique A \<rbrakk>
  2429   \<Longrightarrow> (((A ===> op =) ===> op =) ===> op =) is_filter is_filter"
  2429   \<Longrightarrow> (((A ===> op =) ===> op =) ===> op =) is_filter is_filter"
  2430 apply(rule fun_relI)
  2430 apply(rule rel_funI)
  2431 apply(rule iffI)
  2431 apply(rule iffI)
  2432  apply(erule (3) is_filter_parametric_aux)
  2432  apply(erule (3) is_filter_parametric_aux)
  2433 apply(erule is_filter_parametric_aux[where A="conversep A"])
  2433 apply(erule is_filter_parametric_aux[where A="conversep A"])
  2434 apply(auto simp add: fun_rel_def)
  2434 apply(auto simp add: rel_fun_def)
  2435 done
  2435 done
  2436 
  2436 
  2437 lemma left_total_rel_filter [reflexivity_rule]:
  2437 lemma left_total_rel_filter [reflexivity_rule]:
  2438   assumes [transfer_rule]: "bi_total A" "bi_unique A"
  2438   assumes [transfer_rule]: "bi_total A" "bi_unique A"
  2439   shows "left_total (rel_filter A)"
  2439   shows "left_total (rel_filter A)"
  2488 lemma top_filter_parametric [transfer_rule]:
  2488 lemma top_filter_parametric [transfer_rule]:
  2489   "bi_total A \<Longrightarrow> (rel_filter A) top top"
  2489   "bi_total A \<Longrightarrow> (rel_filter A) top top"
  2490 by(simp add: rel_filter_eventually All_transfer)
  2490 by(simp add: rel_filter_eventually All_transfer)
  2491 
  2491 
  2492 lemma bot_filter_parametric [transfer_rule]: "(rel_filter A) bot bot"
  2492 lemma bot_filter_parametric [transfer_rule]: "(rel_filter A) bot bot"
  2493 by(simp add: rel_filter_eventually fun_rel_def)
  2493 by(simp add: rel_filter_eventually rel_fun_def)
  2494 
  2494 
  2495 lemma sup_filter_parametric [transfer_rule]:
  2495 lemma sup_filter_parametric [transfer_rule]:
  2496   "(rel_filter A ===> rel_filter A ===> rel_filter A) sup sup"
  2496   "(rel_filter A ===> rel_filter A ===> rel_filter A) sup sup"
  2497 by(fastforce simp add: rel_filter_eventually[abs_def] eventually_sup dest: fun_relD)
  2497 by(fastforce simp add: rel_filter_eventually[abs_def] eventually_sup dest: rel_funD)
  2498 
  2498 
  2499 lemma Sup_filter_parametric [transfer_rule]:
  2499 lemma Sup_filter_parametric [transfer_rule]:
  2500   "(rel_set (rel_filter A) ===> rel_filter A) Sup Sup"
  2500   "(rel_set (rel_filter A) ===> rel_filter A) Sup Sup"
  2501 proof(rule fun_relI)
  2501 proof(rule rel_funI)
  2502   fix S T
  2502   fix S T
  2503   assume [transfer_rule]: "rel_set (rel_filter A) S T"
  2503   assume [transfer_rule]: "rel_set (rel_filter A) S T"
  2504   show "rel_filter A (Sup S) (Sup T)"
  2504   show "rel_filter A (Sup S) (Sup T)"
  2505     by(simp add: rel_filter_eventually eventually_Sup) transfer_prover
  2505     by(simp add: rel_filter_eventually eventually_Sup) transfer_prover
  2506 qed
  2506 qed
  2507 
  2507 
  2508 lemma principal_parametric [transfer_rule]:
  2508 lemma principal_parametric [transfer_rule]:
  2509   "(rel_set A ===> rel_filter A) principal principal"
  2509   "(rel_set A ===> rel_filter A) principal principal"
  2510 proof(rule fun_relI)
  2510 proof(rule rel_funI)
  2511   fix S S'
  2511   fix S S'
  2512   assume [transfer_rule]: "rel_set A S S'"
  2512   assume [transfer_rule]: "rel_set A S S'"
  2513   show "rel_filter A (principal S) (principal S')"
  2513   show "rel_filter A (principal S) (principal S')"
  2514     by(simp add: rel_filter_eventually eventually_principal) transfer_prover
  2514     by(simp add: rel_filter_eventually eventually_principal) transfer_prover
  2515 qed
  2515 qed
  2535   "(rel_set (rel_filter A) ===> rel_filter A) Inf Inf"
  2535   "(rel_set (rel_filter A) ===> rel_filter A) Inf Inf"
  2536 unfolding Inf_filter_def[abs_def] by transfer_prover
  2536 unfolding Inf_filter_def[abs_def] by transfer_prover
  2537 
  2537 
  2538 lemma inf_filter_parametric [transfer_rule]:
  2538 lemma inf_filter_parametric [transfer_rule]:
  2539   "(rel_filter A ===> rel_filter A ===> rel_filter A) inf inf"
  2539   "(rel_filter A ===> rel_filter A ===> rel_filter A) inf inf"
  2540 proof(intro fun_relI)+
  2540 proof(intro rel_funI)+
  2541   fix F F' G G'
  2541   fix F F' G G'
  2542   assume [transfer_rule]: "rel_filter A F F'" "rel_filter A G G'"
  2542   assume [transfer_rule]: "rel_filter A F F'" "rel_filter A G G'"
  2543   have "rel_filter A (Inf {F, G}) (Inf {F', G'})" by transfer_prover
  2543   have "rel_filter A (Inf {F, G}) (Inf {F', G'})" by transfer_prover
  2544   thus "rel_filter A (inf F G) (inf F' G')" by simp
  2544   thus "rel_filter A (inf F G) (inf F' G')" by simp
  2545 qed
  2545 qed