Transitive and Well-Founded Relations
Overview
This is the theory of transitive and well founded relations as sets (using ProofPower's SET type constructor).
A new "wf_rel" theory is created as a child of "bin_rel". Probably
Elementary results about transitive relations and transitive closure.
Definition of well-founded and transitive-well-founded and proof that the transitive closure of a well-founded relation is transitive-well-founded.
In this section I will create a decent proof context for recursive definitions, eventually.
Introduction
A new "wf_rel" theory is created as a child of "bin_rel". Probably
The Theory wf_rel
The new theory is first created, together with a proof context which we will build up as we develop the theory.
xl-sml
open_theory "bin_rel";
force_new_theory "wf_rel";
force_new_pc "wf_rel";
merge_pcs ["xl_cs_exist.gif_conv"] "wf_rel";
set_merge_pcs ["hol", "'bin_rel", "wf_rel"];

Auxiliary Results
We here demonstrate certain results which properly belong to theories higher up the tree.
xl-sml
set_goal([],
fttabqqtel.gifforall.giff sbull.gif Dom (s dr.gif f) = s cap.gif (Dom f)qqter.gif
);
a (prove_tac [sets_ext_clauses, isin.gif_in_clauses]);
val Dom_rest_thm = save_pop_thm "Dom_rest_thm";

And a result about equality of binary relations:
xl-sml
set_goal([],qqtel.gifforall.gifr sbull.gif r = s equiv.gif Dom r = Dom s and.gif
fttabforall.gifxbull.gif xisin.gif Dom r cap.gif Dom s ruarr.gif forall.gifybull.gif (x,y)isin.gifr equiv.gif (x,y)isin.gifsqqter.gif);
a (REPEAT_N 4 strip_tac
fttabTHEN1 (strip_tac THEN asm_rewrite_tac[]));
a (rewrite_tac[sets_ext_clauses, isin.gif_in_clauses]);
a (REPEAT strip_tac);
(* *** Goal "1" *** *)
a (spec_nth_asm_tac 3 qqtel.gifFst xqqter.gif
fttabTHEN spec_nth_asm_tac 4 qqtel.gifFst xqqter.gif
fttabTHEN_TRY (SOLVED_T (asm_fc_tac[])));
a (SPEC_NTH_ASM_T 2 qqtel.gifSnd xqqter.gif (strip_asm_tac o (rewrite_rule[])));
a (SPEC_NTH_ASM_T 3 qqtel.gifSnd xqqter.gif (strip_asm_tac o (rewrite_rule[])));
a (SPEC_NTH_ASM_T 1 qqtel.gifSnd xqqter.gif (strip_asm_tac o (rewrite_rule[])));
(* *** Goal "2" *** *)
a (spec_nth_asm_tac 3 qqtel.gifFst xqqter.gif
fttabTHEN spec_nth_asm_tac 4 qqtel.gifFst xqqter.gif
fttabTHEN_TRY (SOLVED_T (asm_fc_tac[])));
a (SPEC_NTH_ASM_T 1 qqtel.gifSnd xqqter.gif (strip_asm_tac o (rewrite_rule[])));
a (SPEC_NTH_ASM_T 2 qqtel.gifSnd xqqter.gif (strip_asm_tac o (rewrite_rule[])));
a (SPEC_NTH_ASM_T 1 qqtel.gifSnd xqqter.gif (strip_asm_tac o (rewrite_rule[])));
val rel_ext_Dom_thm = save_pop_thm "rel_ext_Dom_thm";

Transitive Relations
Elementary results about transitive relations and transitive closure.
Theorems

xl-sml
set_goal([],qqtel.gifforall.gifrbull.gif r+ isin.gif Transitiveqqter.gif);
a (rewrite_tac(map get_spec [qqtel.gif$+qqter.gif,qqtel.gifTransitiveqqter.gif]));
a (REPEAT strip_tac THEN REPEAT (all_asm_fc_tac[]));
val tran_tc_thm = save_pop_thm("tran_tc_thm");

set_goal([],qqtel.gifforall.gif r x y zbull.gif (x,y) isin.gif r+ and.gif (y,z) isin.gif r+ ruarr.gif (x,z) isin.gif r+qqter.gif);
a (prove_tac [rewrite_rule [get_spec qqtel.gifTransitiveqqter.gif] tran_tc_thm]);
val tran_tc_thm2 = save_pop_thm("tran_tc_thm2");

set_goal([],qqtel.gifforall.gifr bull.gif r sube.gif r+qqter.gif);
a (prove_tac [get_spec qqtel.gif$+qqter.gif, sets_ext_clauses]);
val sube.gif_tc_thm = save_pop_thm("sube.gif_tc_thm");

set_goal([],qqtel.gifforall.gifr x y bull.gif (x,y) isin.gif r ruarr.gif (x,y) isin.gif r+qqter.gif);
a (prove_tac [get_spec qqtel.gif$+qqter.gif, sets_ext_clauses]);
val isin.gif_tc_thm = save_pop_thm("isin.gif_tc_thm");

set_goal([],qqtel.gifforall.gif r x ybull.gif (x,y) isin.gif r+ and.gif not.gif (x,y) isin.gif r ruarr.gif exist.gifzbull.gif (x,z) isin.gif r+ and.gif (z,y) isin.gif rqqter.gif);
a (REPEAT strip_tac);
a (lemma_tac qqtel.gifforall.gifqbull.gif q isin.gif Transitive and.gif r sube.gif q ruarr.gif (x,y) isin.gif qqqter.gif);
a (asm_ante_tac qqtel.gif(x, y) isin.gif r +qqter.gif);
a (prove_tac [get_spec qqtel.gif$+qqter.gif, isin.gif_in_clauses]);
a (spec_nth_asm_tac 1 qqtel.gif{(v, w) | (v,w) isin.gif r or.gif exist.gifubull.gif (v,u) isin.gif r+ and.gif (u,w) isin.gif r}qqter.gif);
(* *** Goal "2.1" *** *)
a (spec_nth_asm_tac 1 qqtel.gifx2qqter.gif);
a (all_asm_fc_tac [isin.gif_tc_thm]);
(* *** Goal "2.2" *** *)
a (spec_nth_asm_tac 1 qqtel.gifuqqter.gif);
a (REPEAT (all_fc_tac [tran_tc_thm2,isin.gif_tc_thm]));
(* *** Goal "2.3" *** *)
a (spec_nth_asm_tac 1 qqtel.gifx2qqter.gif);
a (REPEAT (all_fc_tac [tran_tc_thm2,isin.gif_tc_thm]));
(* *** Goal "2.4" *** *)
a (spec_nth_asm_tac 1 qqtel.gifu'qqter.gif);
a (REPEAT (all_fc_tac [tran_tc_thm2,isin.gif_tc_thm]));
(* *** Goal "2.5" *** *)
a (DROP_NTH_ASM_T 1 (strip_asm_tac o (rewrite_rule[sets_ext_clauses])));
(* *** Goal "2.6" *** *)
a (exist.gif_tac qqtel.gifuqqter.gif THEN asm_rewrite_tac[]);
val tc_decomp_thm = save_pop_thm "tc_decomp_thm";

Well-Founded Relations
Definition of well-founded and transitive-well-founded and proof that the transitive closure of a well-founded relation is transitive-well-founded.
Definitions

xl-holconst
wf: (('a cross.gif 'a)SET)SET
forall.gif r bull.gif
ftbr r isin.gif wf equiv.gif forall.gif s bull.gif
ftbr (forall.gif x bull.gif (forall.gif y bull.gif (y,x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s)
ftbr ruarr.gif forall.gif x bull.gif x isin.gif s

xl-holconst
twf: (('a cross.gif 'a)SET)SET
forall.gif r bull.gif
ftbr r isin.gif twf equiv.gif r isin.gif wf and.gif r isin.gif Transitive
Theorems

xl-sml
set_goal([],qqtel.gifforall.gifs rbull.gif r isin.gif wf ruarr.gif forall.gifxbull.gif (forall.gifybull.gif (y,x) isin.gif r+ ruarr.gif (forall.gifzbull.gif (z,y) isin.gif r+ ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
fttabruarr.gif (forall.gifybull.gif (y,x) isin.gif r+ ruarr.gif y isin.gif s)qqter.gif);
a (pure_rewrite_tac [get_spec qqtel.gifwfqqter.gif, isin.gif_in_clauses]);
a (REPEAT_N 3 strip_tac);
a (spec_nth_asm_tac 1 qqtel.gif{x | (forall.gifybull.gif (y,x) isin.gif r+ ruarr.gif (forall.gifzbull.gif (z,y) isin.gif r+ ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
fttabruarr.gif (forall.gifybull.gif (y,x) isin.gif r+ ruarr.gif y isin.gif s)}qqter.gif
fttabTHEN REPEAT strip_tac);
(* *** Goal "1" *** *)


xl-gft
(* 7 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 6 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 5 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 4 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 3 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 2 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 1 *) qqtel.gif(y', x') isin.gif r +qqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (fc_tac [list_forall.gif_elim [qqtel.gifrqqter.gif,qqtel.gifyqqter.gif,qqtel.gifxqqter.gif] tc_decomp_thm]);
(* *** Goal "1.1" *** *)


xl-gft
(* 8 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 7 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 6 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 5 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 4 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 3 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 2 *) qqtel.gif(y', x') isin.gif r +qqter.gif
(* 1 *) qqtel.gif(y, x) isin.gif rqqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (spec_nth_asm_tac 7 qqtel.gifyqqter.gif);
(* *** Goal "1.1.1" *** *)


xl-gft
(* 11 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 10 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 9 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 8 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 7 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 6 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 5 *) qqtel.gif(y', x') isin.gif r +qqter.gif
(* 4 *) qqtel.gif(y, x) isin.gif rqqter.gif
(* 3 *) qqtel.gif(y'', y) isin.gif r +qqter.gif
(* 2 *) qqtel.gifforall.gif zbull.gif (z, y'') isin.gif r + ruarr.gif z isin.gif sqqter.gif
(* 1 *) qqtel.gifnot.gif y'' isin.gif sqqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (all_fc_tac [tran_tc_thm2]);
a (spec_nth_asm_tac 10 qqtel.gify''qqter.gif);
a (asm_fc_tac[]);
(* *** Goal "1.1.2" *** *)


xl-gft
(* 9 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 8 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 7 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 6 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 5 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 4 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 3 *) qqtel.gif(y', x') isin.gif r +qqter.gif
(* 2 *) qqtel.gif(y, x) isin.gif rqqter.gif
(* 1 *) qqtel.gifforall.gif y'bull.gif (y', y) isin.gif r + ruarr.gif y' isin.gif sqqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (spec_nth_asm_tac 7 qqtel.gifyqqter.gif);
a (spec_nth_asm_tac 3 qqtel.gifzqqter.gif);
(* *** Goal "1.2" *** *)


xl-gft
(* 9 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 8 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 7 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 6 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 5 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 4 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 3 *) qqtel.gif(y', x') isin.gif r +qqter.gif
(* 2 *) qqtel.gif(y, z) isin.gif r +qqter.gif
(* 1 *) qqtel.gif(z, x) isin.gif rqqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (spec_nth_asm_tac 8 qqtel.gifzqqter.gif);
(* *** Goal "1.2.1" *** *)


xl-gft
(* 12 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 11 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 10 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 9 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 8 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 7 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 6 *) qqtel.gif(y', x') isin.gif r +qqter.gif
(* 5 *) qqtel.gif(y, z) isin.gif r +qqter.gif
(* 4 *) qqtel.gif(z, x) isin.gif rqqter.gif
(* 3 *) qqtel.gif(y'', z) isin.gif r +qqter.gif
(* 2 *) qqtel.gifforall.gif zbull.gif (z, y'') isin.gif r + ruarr.gif z isin.gif sqqter.gif
(* 1 *) qqtel.gifnot.gif y'' isin.gif sqqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (lemma_tac qqtel.gif(z, x) isin.gif r +qqter.gif
fttabTHEN1 fc_tac [isin.gif_tc_thm]);
a (lemma_tac qqtel.gif(y'', x) isin.gif r +qqter.gif
fttabTHEN1 strip_asm_tac (list_forall.gif_elim [qqtel.gifrqqter.gif,qqtel.gify''qqter.gif,qqtel.gifzqqter.gif,qqtel.gifxqqter.gif] tran_tc_thm2));
a (spec_nth_asm_tac 12 qqtel.gify''qqter.gif);
a (spec_nth_asm_tac 6 qqtel.gifz'qqter.gif);
(* *** Goal "1.2.2" *** *)


xl-gft
(* 10 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 9 *) qqtel.gifforall.gif y
ftbr bull.gif (y, x) isin.gif r
ftbr ruarr.gif y
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 8 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 7 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 6 *) qqtel.gifnot.gif y isin.gif sqqter.gif
(* 5 *) qqtel.gifforall.gif ybull.gif (y, x') isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 4 *) qqtel.gif(y', x') isin.gif r +qqter.gif
(* 3 *) qqtel.gif(y, z) isin.gif r +qqter.gif
(* 2 *) qqtel.gif(z, x) isin.gif rqqter.gif
(* 1 *) qqtel.gifforall.gif ybull.gif (y, z) isin.gif r + ruarr.gif y isin.gif sqqter.gif

(* ?turnstil.gif *) qqtel.gify' isin.gif sqqter.gif


xl-sml
a (asm_fc_tac[]);
(* *** Goal "2" *** *)


xl-gft
(* 4 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 3 *) qqtel.gifforall.gif x
ftbr bull.gif x
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 2 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 1 *) qqtel.gif(y, x) isin.gif r +qqter.gif

(* ?turnstil.gif *) qqtel.gify isin.gif sqqter.gif


xl-sml
a (spec_nth_asm_tac 3 qqtel.gifxqqter.gif);
(* *** Goal "2.1" *** *)


xl-gft
(* 7 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 6 *) qqtel.gifforall.gif x
ftbr bull.gif x
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 5 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 4 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 3 *) qqtel.gif(y', x) isin.gif r +qqter.gif
(* 2 *) qqtel.gifforall.gif zbull.gif (z, y') isin.gif r + ruarr.gif z isin.gif sqqter.gif
(* 1 *) qqtel.gifnot.gif y' isin.gif sqqter.gif

(* ?turnstil.gif *) qqtel.gify isin.gif sqqter.gif


xl-sml
a (spec_nth_asm_tac 5 qqtel.gify'qqter.gif);
a (asm_fc_tac[]);
(* *** Goal "2.2" *** *)


xl-gft
(* 5 *) qqtel.gifforall.gif sbull.gif (forall.gif xbull.gif (forall.gif ybull.gif (y, x) isin.gif r ruarr.gif y isin.gif s) ruarr.gif x isin.gif s) ruarr.gif (forall.gif xbull.gif x isin.gif s)qqter.gif
(* 4 *) qqtel.gifforall.gif x
ftbr bull.gif x
ftbr isin.gif {x
ftbr |(forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif s)
ftbr ruarr.gif (forall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif s)}qqter.gif
(* 3 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif (forall.gif zbull.gif (z, y) isin.gif r + ruarr.gif z isin.gif s) ruarr.gif y isin.gif sqqter.gif
(* 2 *) qqtel.gif(y, x) isin.gif r +qqter.gif
(* 1 *) qqtel.gifforall.gif ybull.gif (y, x) isin.gif r + ruarr.gif y isin.gif sqqter.gif

(* ?turnstil.gif *) qqtel.gify isin.gif sqqter.gif


xl-sml
a (asm_fc_tac[]);
val tcwf_lemma1 = save_pop_thm "tcwf_lemma1";

set_goal([],qqtel.gifforall.gifrbull.gif r isin.gif wf ruarr.gif forall.gifsbull.gif (forall.giftbull.gif (forall.gifubull.gif (u,t) isin.gif r+ ruarr.gif u isin.gif s) ruarr.gif t isin.gif s) ruarr.gif (forall.gifebull.gif e isin.gif s)qqter.gif);
a (REPEAT strip_tac THEN fc_tac [tcwf_lemma1]);
a (spec_nth_asm_tac 2 qqtel.gifeqqter.gif);
a (list_spec_nth_asm_tac 3 [qqtel.gifeqqter.gif,qqtel.gifsqqter.gif,qqtel.gifuqqter.gif]);
a (spec_nth_asm_tac 7 qqtel.gifyqqter.gif);
a (spec_nth_asm_tac 4 qqtel.gifu'qqter.gif);
val tcwf_lemma2 = save_pop_thm "tcwf_lemma2";

set_goal([],qqtel.gifforall.gifrbull.gif r isin.gif wf ruarr.gif r+ isin.gif twfqqter.gif);
a (REPEAT strip_tac);
a (fc_tac [tcwf_lemma2]);
a (pure_rewrite_tac [get_spec qqtel.giftwfqqter.gif,get_spec qqtel.gifwfqqter.gif, tran_tc_thm]);
a (REPEAT strip_tac);
a (list_spec_nth_asm_tac 2 [qqtel.gifsqqter.gif,qqtel.gifxqqter.gif]);
a (spec_nth_asm_tac 3 qqtel.giftqqter.gif);
a (spec_nth_asm_tac 4 qqtel.gifyqqter.gif);
val tc_wf_twf_thm = save_pop_thm "tc_wf_twf_thm";

Proof Context
In this section I will create a decent proof context for recursive definitions, eventually.
Proof Context

xl-sml
(* commit_pc "wf_rel"; *)


up quick index © RBJ

$Id: WfRel.xml,v 1.3 2008/04/06 13:07:17 rbj01 Exp $

V