src/HOL/Univ.ML
changeset 9108 9fff97d29837
parent 8790 c4aaa5936e0c
child 9162 647d554a65ae
equal deleted inserted replaced
9107:67202a50ee6d 9108:9fff97d29837
    59 Goal "inj_on Abs_Node Node";
    59 Goal "inj_on Abs_Node Node";
    60 by (rtac inj_on_inverseI 1);
    60 by (rtac inj_on_inverseI 1);
    61 by (etac Abs_Node_inverse 1);
    61 by (etac Abs_Node_inverse 1);
    62 qed "inj_on_Abs_Node";
    62 qed "inj_on_Abs_Node";
    63 
    63 
    64 val Abs_Node_inject = inj_on_Abs_Node RS inj_onD;
    64 bind_thm ("Abs_Node_inject", inj_on_Abs_Node RS inj_onD);
    65 
    65 
    66 
    66 
    67 (*** Introduction rules for Node ***)
    67 (*** Introduction rules for Node ***)
    68 
    68 
    69 Goalw [Node_def] "(%k. Inr 0, a) : Node";
    69 Goalw [Node_def] "(%k. Inr 0, a) : Node";
    96 (** Atomic nodes **)
    96 (** Atomic nodes **)
    97 
    97 
    98 Goalw [Atom_def] "inj(Atom)";
    98 Goalw [Atom_def] "inj(Atom)";
    99 by (blast_tac (claset() addSIs [injI, Node_K0_I] addSDs [Abs_Node_inject]) 1);
    99 by (blast_tac (claset() addSIs [injI, Node_K0_I] addSDs [Abs_Node_inject]) 1);
   100 qed "inj_Atom";
   100 qed "inj_Atom";
   101 val Atom_inject = inj_Atom RS injD;
   101 bind_thm ("Atom_inject", inj_Atom RS injD);
   102 
   102 
   103 Goal "(Atom(a)=Atom(b)) = (a=b)";
   103 Goal "(Atom(a)=Atom(b)) = (a=b)";
   104 by (blast_tac (claset() addSDs [Atom_inject]) 1);
   104 by (blast_tac (claset() addSDs [Atom_inject]) 1);
   105 qed "Atom_Atom_eq";
   105 qed "Atom_Atom_eq";
   106 AddIffs [Atom_Atom_eq];
   106 AddIffs [Atom_Atom_eq];
   116 Goalw [Numb_def,o_def] "inj(Numb)";
   116 Goalw [Numb_def,o_def] "inj(Numb)";
   117 by (rtac injI 1);
   117 by (rtac injI 1);
   118 by (etac (Atom_inject RS Inr_inject) 1);
   118 by (etac (Atom_inject RS Inr_inject) 1);
   119 qed "inj_Numb";
   119 qed "inj_Numb";
   120 
   120 
   121 val Numb_inject = inj_Numb RS injD;
   121 bind_thm ("Numb_inject", inj_Numb RS injD);
   122 AddSDs [Numb_inject];
   122 AddSDs [Numb_inject];
   123 
   123 
   124 (** Injectiveness of Push_Node **)
   124 (** Injectiveness of Push_Node **)
   125 
   125 
   126 val [major,minor] = Goalw [Push_Node_def]
   126 val [major,minor] = Goalw [Push_Node_def]
   584 
   584 
   585 Goal "(dprod (A <*> B) (C <*> D)) <= (uprod A C) <*> (uprod B D)";
   585 Goal "(dprod (A <*> B) (C <*> D)) <= (uprod A C) <*> (uprod B D)";
   586 by (Blast_tac 1);
   586 by (Blast_tac 1);
   587 qed "dprod_Sigma";
   587 qed "dprod_Sigma";
   588 
   588 
   589 val dprod_subset_Sigma = [dprod_mono, dprod_Sigma] MRS subset_trans |>standard;
   589 bind_thm ("dprod_subset_Sigma", [dprod_mono, dprod_Sigma] MRS subset_trans |> standard);
   590 
   590 
   591 (*Dependent version*)
   591 (*Dependent version*)
   592 Goal "(dprod (Sigma A B) (Sigma C D)) <= Sigma (uprod A C) (Split (%x y. uprod (B x) (D y)))";
   592 Goal "(dprod (Sigma A B) (Sigma C D)) <= Sigma (uprod A C) (Split (%x y. uprod (B x) (D y)))";
   593 by Safe_tac;
   593 by Safe_tac;
   594 by (stac Split 1);
   594 by (stac Split 1);
   597 
   597 
   598 Goal "(dsum (A <*> B) (C <*> D)) <= (usum A C) <*> (usum B D)";
   598 Goal "(dsum (A <*> B) (C <*> D)) <= (usum A C) <*> (usum B D)";
   599 by (Blast_tac 1);
   599 by (Blast_tac 1);
   600 qed "dsum_Sigma";
   600 qed "dsum_Sigma";
   601 
   601 
   602 val dsum_subset_Sigma = [dsum_mono, dsum_Sigma] MRS subset_trans |> standard;
   602 bind_thm ("dsum_subset_Sigma", [dsum_mono, dsum_Sigma] MRS subset_trans |> standard);
   603 
   603 
   604 
   604 
   605 (*** Domain ***)
   605 (*** Domain ***)
   606 
   606 
   607 Goal "Domain (dprod r s) = uprod (Domain r) (Domain s)";
   607 Goal "Domain (dprod r s) = uprod (Domain r) (Domain s)";