src/ZF/Coind/ECR.ML
author wenzelm
Thu, 14 Oct 1999 15:04:36 +0200
changeset 7866 3ccaa11b6df9
parent 6154 6a00a5baef2b
child 11318 6536fb8c9fc6
permissions -rw-r--r--
pdf: generate thumbnails if ISABELLE_THUMBPDF set;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 915
diff changeset
     1
(*  Title:      ZF/Coind/ECR.ML
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 915
diff changeset
     3
    Author:     Jacob Frost, Cambridge University Computer Laboratory
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     4
    Copyright   1995  University of Cambridge
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     5
*)
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     6
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     7
(* Specialised co-induction rule *)
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     8
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
     9
Goal "[| x:ExVar; e:Exp; t:Ty; ve:ValEnv; te:TyEnv;  \
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
    10
\        <te, e_fn(x, e), t>:ElabRel; ve_dom(ve) = te_dom(te); \
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
    11
\        {<ve_app(ve,y),te_app(te,y)>.y:ve_dom(ve)}: \
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
    12
\        Pow({<v_clos(x,e,ve),t>} Un HasTyRel) |]    \
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
    13
\     ==> <v_clos(x, e, ve),t>:HasTyRel";
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
    14
by (rtac (singletonI RS HasTyRel.coinduct) 1);
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6141
diff changeset
    15
by (ALLGOALS Blast_tac);
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    16
qed "htr_closCI";
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    17
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    18
(* Specialised elimination rules *)
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    19
6141
a6922171b396 removal of the (thm list) argument of mk_cases
paulson
parents: 6046
diff changeset
    20
val htr_constE = HasTyRel.mk_cases "<v_const(c),t>:HasTyRel";
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    21
6141
a6922171b396 removal of the (thm list) argument of mk_cases
paulson
parents: 6046
diff changeset
    22
val htr_closE = HasTyRel.mk_cases "<v_clos(x,e,ve),t>:HasTyRel";
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    23
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    24
(* Classical reasoning sets *)
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    25
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    26
fun mk_htr_cs cs =
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    27
  let open HasTyRel in 
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    28
    ( cs 
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    29
      addSIs [htr_constI] 
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    30
      addSEs [htr_constE]
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    31
      addIs [htr_closI,htr_closCI]
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    32
      addEs [htr_closE])
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    33
  end;
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    34
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 2469
diff changeset
    35
claset_ref() := mk_htr_cs (claset());
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    36
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    37
(* Properties of the pointwise extension to environments *)
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    38
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5268
diff changeset
    39
bind_thm ("HasTyRel_non_zero", 
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5268
diff changeset
    40
	  HasTyRel.dom_subset RS subsetD RS SigmaD1 RS ValNEE);
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5268
diff changeset
    41
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
    42
Goalw [hastyenv_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5068
diff changeset
    43
  "[| ve:ValEnv; te:TyEnv; hastyenv(ve,te); <v,t>:HasTyRel |] ==> \
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    44
\   hastyenv(ve_owr(ve,x,v),te_owr(te,x,t))";
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5268
diff changeset
    45
by (asm_full_simp_tac
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5268
diff changeset
    46
    (simpset() addsimps [ve_app_owr, HasTyRel_non_zero, ve_dom_owr]) 1);
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5268
diff changeset
    47
by Auto_tac;
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    48
qed "hastyenv_owr";
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    49
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
    50
Goalw  [isofenv_def,hastyenv_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5068
diff changeset
    51
  "[| ve:ValEnv; te:TyEnv; isofenv(ve,te) |] ==> hastyenv(ve,te)";
4152
451104c223e2 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4091
diff changeset
    52
by Safe_tac;
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    53
by (dtac bspec 1);
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    54
by (assume_tac 1);
4152
451104c223e2 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4091
diff changeset
    55
by Safe_tac;
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    56
by (dtac HasTyRel.htr_constI 1);
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    57
by (assume_tac 2);
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    58
by (etac te_appI 1);
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    59
by (etac ve_domI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2034
diff changeset
    60
by (ALLGOALS Asm_full_simp_tac);
915
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    61
qed "basic_consistency_lem";
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    62
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    63
6dae0daf57b7 New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    64