src/HOL/Isar_examples/MultisetOrder.thy
changeset 7874 180364256231
parent 7800 8ee919e42174
child 7968 964b65b4e433
equal deleted inserted replaced
7873:5d1200c7a671 7874:180364256231
    27   assume "(N, M0 + {#a#}) : {(N, M). ?R N M}";
    27   assume "(N, M0 + {#a#}) : {(N, M). ?R N M}";
    28   hence "EX a' M0' K.
    28   hence "EX a' M0' K.
    29       M0 + {#a#} = M0' + {#a'#} & N = M0' + K & ?r K a'"; by simp;
    29       M0 + {#a#} = M0' + {#a'#} & N = M0' + K & ?r K a'"; by simp;
    30   thus "?case1 | ?case2";
    30   thus "?case1 | ?case2";
    31   proof (elim exE conjE);
    31   proof (elim exE conjE);
    32     fix a' M0' K; assume N: "N = M0' + K" and r: "?r K a'";
    32     fix a' M0' K;
       
    33     assume N: "N = M0' + K" and r: "?r K a'";
    33     assume "M0 + {#a#} = M0' + {#a'#}";
    34     assume "M0 + {#a#} = M0' + {#a'#}";
    34     hence "M0 = M0' & a = a' |
    35     hence "M0 = M0' & a = a' |
    35         (EX K'. M0 = K' + {#a'#} & M0' = K' + {#a#})";
    36         (EX K'. M0 = K' + {#a'#} & M0' = K' + {#a#})";
    36       by (simp only: add_eq_conv_ex);
    37       by (simp only: add_eq_conv_ex);
    37     thus ?thesis;
    38     thus ?thesis;
    64     assume M0: "M0 : ?W"
    65     assume M0: "M0 : ?W"
    65       and wf_hyp: "ALL b. (b, a) : r --> (ALL M:?W. M + {#b#} : ?W)"
    66       and wf_hyp: "ALL b. (b, a) : r --> (ALL M:?W. M + {#b#} : ?W)"
    66       and acc_hyp: "ALL M. (M, M0) : ?R --> M + {#a#} : ?W";
    67       and acc_hyp: "ALL M. (M, M0) : ?R --> M + {#a#} : ?W";
    67     have "M0 + {#a#} : ?W";
    68     have "M0 + {#a#} : ?W";
    68     proof (rule accI [of "M0 + {#a#}"]);
    69     proof (rule accI [of "M0 + {#a#}"]);
    69       fix N; assume "(N, M0 + {#a#}) : ?R";
    70       fix N;
       
    71       assume "(N, M0 + {#a#}) : ?R";
    70       hence "((EX M. (M, M0) : ?R & N = M + {#a#}) |
    72       hence "((EX M. (M, M0) : ?R & N = M + {#a#}) |
    71           (EX K. (ALL b. elem K b --> (b, a) : r) & N = M0 + K))";
    73           (EX K. (ALL b. elem K b --> (b, a) : r) & N = M0 + K))";
    72 	by (rule less_add);
    74 	by (rule less_add);
    73       thus "N : ?W";
    75       thus "N : ?W";
    74       proof (elim exE disjE conjE);
    76       proof (elim exE disjE conjE);