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 |