equal
deleted
inserted
replaced
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)"; |