equal
deleted
inserted
replaced
106 * Wellfoundedness of `insert' |
106 * Wellfoundedness of `insert' |
107 *---------------------------------------------------------------------------*) |
107 *---------------------------------------------------------------------------*) |
108 |
108 |
109 goal WF.thy "wf(insert (y,x) r) = (wf(r) & (x,y) ~: r^*)"; |
109 goal WF.thy "wf(insert (y,x) r) = (wf(r) & (x,y) ~: r^*)"; |
110 by (rtac iffI 1); |
110 by (rtac iffI 1); |
111 by (blast_tac (claset() addEs [wf_trancl RS wf_irrefl] addIs |
111 by (blast_tac (claset() addEs [wf_trancl RS wf_irrefl] |
112 [rtrancl_into_trancl1,wf_subset,impOfSubs rtrancl_mono]) 1); |
112 addIs [rtrancl_into_trancl1,wf_subset,impOfSubs rtrancl_mono]) 1); |
113 by (asm_full_simp_tac (simpset() addsimps [wf_eq_minimal]) 1); |
113 by (asm_full_simp_tac (simpset() addsimps [wf_eq_minimal]) 1); |
114 by Safe_tac; |
114 by Safe_tac; |
115 by (EVERY1[rtac allE, atac, etac impE, Blast_tac]); |
115 by (EVERY1[rtac allE, atac, etac impE, Blast_tac]); |
116 by (etac bexE 1); |
116 by (etac bexE 1); |
117 by (rename_tac "a" 1); |
117 by (rename_tac "a" 1); |
122 by (case_tac "y:Q" 1); |
122 by (case_tac "y:Q" 1); |
123 by (Blast_tac 2); |
123 by (Blast_tac 2); |
124 by (res_inst_tac [("x","{z. z:Q & (z,y) : r^*}")] allE 1); |
124 by (res_inst_tac [("x","{z. z:Q & (z,y) : r^*}")] allE 1); |
125 by (assume_tac 1); |
125 by (assume_tac 1); |
126 by (thin_tac "! Q. (? x. x : Q) --> ?P Q" 1); (*essential for speed*) |
126 by (thin_tac "! Q. (? x. x : Q) --> ?P Q" 1); (*essential for speed*) |
127 by (blast_tac (claset() addIs [rtrancl_into_rtrancl2]) 1); |
127 (*Blast_tac with new substOccur fails*) |
|
128 by (best_tac (claset() addIs [rtrancl_into_rtrancl2]) 1); |
128 qed "wf_insert"; |
129 qed "wf_insert"; |
129 AddIffs [wf_insert]; |
130 AddIffs [wf_insert]; |
130 |
131 |
131 (*** acyclic ***) |
132 (*** acyclic ***) |
132 |
133 |