# File Dagstuhl.ML

    (* $Id: Dagstuhl.ML,v 1.16 2005/09/06 17:28:58 wenzelm Exp $ *)

    val YS_def2  = fix_prover2 (the_context ())  YS_def  "YS = y && YS";
    val YYS_def2 = fix_prover2 (the_context ()) YYS_def "YYS = y && y && YYS";

    val prems = goal (the_context ()) "YYS << y && YYS";
    by (rtac (YYS_def RS def_fix_ind) 1);
    by (Simp_tac 1);
    by (Simp_tac 1);
    by (Simp_tac 1);
    by (rtac monofun_cfun_arg 1);
    by (rtac monofun_cfun_arg 1);
    by (atac 1);
    val lemma3 = result();

    val prems = goal (the_context ()) "y && YYS << YYS";
    by (stac YYS_def2 1);
    back();
    by (rtac monofun_cfun_arg 1);
    by (rtac lemma3 1);
    val lemma4=result();

    (* val  lemma5 = lemma3 RS (lemma4 RS antisym_less) *)

    val prems = goal (the_context ()) "y && YYS = YYS";
    by (rtac antisym_less 1);
    by (rtac lemma4 1);
    by (rtac lemma3 1);
    val lemma5=result();

    val prems = goal (the_context ()) "YS = YYS";
    by (resolve_tac (thms "stream.take_lemmas") 1);
    by (induct_tac "n" 1);
    by (simp_tac (simpset() addsimps (thms "stream.rews")) 1);
    by (stac YS_def2 1);
    by (stac YYS_def2 1);
    by (asm_simp_tac (simpset() addsimps (thms "stream.rews")) 1);
    by (rtac (lemma5 RS sym RS subst) 1);
    by (rtac refl 1);
    val wir_moel=result();

    (* ------------------------------------------------------------------------ *)
    (* Zweite L"osung: Bernhard M"oller                                         *)
    (* statt Beweis von  wir_moel "uber take_lemma beidseitige Inclusion        *)
    (* verwendet lemma5                                                         *)
    (* ------------------------------------------------------------------------ *)

    val prems = goal (the_context ()) "YYS << YS";
    by (rewtac YYS_def);
    by (rtac fix_least 1);
    by (stac beta_cfun 1);
    by (cont_tacR 1);
    by (simp_tac (simpset() addsimps [YS_def2 RS sym]) 1);
    val lemma6=result();

    val prems = goal (the_context ()) "YS << YYS";
    by (rtac (YS_def RS def_fix_ind) 1);
    by (Simp_tac 1);
    by (Simp_tac 1);
    by (Simp_tac 1);
    by (stac (lemma5 RS sym) 1);
    by (etac monofun_cfun_arg 1);
    val lemma7 = result();

    val  wir_moel = lemma6 RS (lemma7 RS antisym_less);