src/HOL/GroupTheory/PiSets.ML
author paulson
Mon, 23 Jul 2001 17:37:29 +0200
changeset 11443 77ed7e2b56c8
child 12459 6978ab7cac64
permissions -rw-r--r--
The final version of Florian Kammueller's proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11443
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     1
(*  Title:      HOL/ex/PiSets.ML
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     2
    ID:         $Id$
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     3
    Author:     Florian Kammueller, University of Cambridge
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     4
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     5
Pi sets and their application.
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     6
*)
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     7
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     8
(*** Bijection between Pi in terms of => and Pi in terms of Sigma ***)
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
     9
Goal "f \\<in> Pi A B ==> PiBij A B f <= Sigma A B";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    10
by (auto_tac (claset(), simpset() addsimps [PiBij_def,Pi_def]));
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    11
qed "PiBij_subset_Sigma";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    12
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    13
Goal "f \\<in> Pi A B ==> \\<forall>x \\<in> A. \\<exists>!y. (x, y) \\<in> (PiBij A B f)";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    14
by (auto_tac (claset(), simpset() addsimps [PiBij_def]));
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    15
qed "PiBij_unique";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    16
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    17
Goal "f \\<in> Pi A B ==> PiBij A B f \\<in> Graph A B";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    18
by (asm_simp_tac (simpset() addsimps [Graph_def,PiBij_unique,
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    19
				      PiBij_subset_Sigma]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    20
qed "PiBij_in_Graph";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    21
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    22
Goalw [PiBij_def, Graph_def] "PiBij A B \\<in> Pi A B \\<rightarrow> Graph A B";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    23
by (rtac restrictI 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    24
by (auto_tac (claset(), simpset() addsimps [Pi_def]));
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    25
qed "PiBij_func";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    26
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    27
Goal "inj_on (PiBij A B) (Pi A B)";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    28
by (rtac inj_onI 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    29
by (rtac Pi_extensionality 1);			
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    30
by (assume_tac 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    31
by (assume_tac 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    32
by (asm_full_simp_tac (simpset() addsimps [PiBij_def]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    33
by (Blast_tac 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    34
qed "inj_PiBij";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    35
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    36
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    37
Goal "x \\<in> Graph A B \\<Longrightarrow> (lam a:A. SOME y. (a, y) \\<in> x) \\<in> Pi A B";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    38
by (rtac restrictI 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    39
by (res_inst_tac [("P", "%xa. (a, xa)\\<in>x")] ex1E 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    40
 by (force_tac (claset(), simpset() addsimps [Graph_def]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    41
by (full_simp_tac (simpset() addsimps [Graph_def]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    42
by (stac some_equality 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    43
  by (assume_tac 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    44
 by (Blast_tac 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    45
by (Blast_tac 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    46
qed "in_Graph_imp_in_Pi";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    47
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    48
Goal "PiBij A B ` (Pi A B) = Graph A B";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    49
by (rtac equalityI 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    50
by (force_tac (claset(), simpset() addsimps [PiBij_in_Graph]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    51
by (rtac subsetI 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    52
by (rtac image_eqI 1); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    53
by (etac in_Graph_imp_in_Pi 2); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    54
(* x = PiBij A B (lam a:A. @ y. (a, y)\\<in>x) *)
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    55
by (asm_simp_tac (simpset() addsimps [in_Graph_imp_in_Pi, PiBij_def]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    56
by (auto_tac (claset(), simpset() addsimps [some1_equality, Graph_def])); 
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    57
by (fast_tac (claset() addIs [someI2]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    58
qed "surj_PiBij";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    59
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    60
Goal "f \\<in> Pi A B ==> Inv (Pi A B) (PiBij A B) (PiBij A B f) = f";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    61
by (asm_simp_tac (simpset() addsimps [Inv_f_f, inj_PiBij]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    62
qed "PiBij_bij1";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    63
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    64
Goal "f \\<in> Graph A B ==> PiBij A B (Inv (Pi A B) (PiBij A B) f) = f";
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    65
by (asm_simp_tac (simpset() addsimps [f_Inv_f, surj_PiBij]) 1);
77ed7e2b56c8 The final version of Florian Kammueller's proofs
paulson
parents:
diff changeset
    66
qed "PiBij_bij2";