# HG changeset patch # User berghofe # Date 1173694079 -3600 # Node ID c9e384a956df722b67101ec257d673286856cf93 # Parent 16e6ddc30f922a2345202777391a4bf1ed35525c Adapted to new inductive definition package. diff -r 16e6ddc30f92 -r c9e384a956df src/HOL/Nominal/Examples/Fsub.thy --- a/src/HOL/Nominal/Examples/Fsub.thy Sun Mar 11 15:02:44 2007 +0100 +++ b/src/HOL/Nominal/Examples/Fsub.thy Mon Mar 12 11:07:59 2007 +0100 @@ -155,15 +155,10 @@ text {* Now validity of a context is a straightforward inductive definition. *} -consts - valid_rel :: "ty_context set" - valid_sym :: "ty_context \ bool" ("\ _ ok" [100] 100) -translations - "\ \ ok" \ "\ \ valid_rel" -inductive valid_rel -intros -valid_nil[simp]: "\ [] ok" -valid_cons[simp]: "\\ \ ok; X\(domain \); T closed_in \\ \ \ ((X,T)#\) ok" +inductive2 valid_rel :: "ty_context \ bool" ("\ _ ok" [100] 100) +where + valid_nil[simp]: "\ [] ok" +| valid_cons[simp]: "\\ \ ok; X\(domain \); T closed_in \\ \ \ ((X,T)#\) ok" lemma valid_eqvt: fixes pi::"tyvrs prm" @@ -174,7 +169,7 @@ case valid_nil show "\ (pi\[]) ok" by simp next - case (valid_cons T X \) + case (valid_cons \ X T) have "\ (pi\\) ok" by fact moreover have "X\(domain \)" by fact @@ -216,7 +211,7 @@ proof (induct) case valid_nil thus "T=S" by simp next - case (valid_cons U Y \) + case valid_cons moreover { fix \::"ty_context" assume a: "X\(domain \)" @@ -278,34 +273,27 @@ does \emph{not} make the subtyping-relation ``partial"\ldots because we work over $\alpha$-equivalence classes.) *} -consts - subtype_of :: "(ty_context \ ty \ ty) set" -syntax - subtype_of_syn :: "ty_context \ ty \ ty \ bool" ("_\_<:_" [100,100,100] 100) - -translations - "\ \ S <: T" \ "(\,S,T) \ subtype_of" -inductive subtype_of -intros -S_Top[intro]: "\\ \ ok; S closed_in \\ \ \ \ S <: Top" -S_Var[intro]: "\(X,S) \ set \; \ \ S <: T\ \ \ \ (Tvar X) <: T" -S_Refl[intro]: "\\ \ ok; X \ domain \\\ \ \ Tvar X <: Tvar X" -S_Arrow[intro]: "\\ \ T\<^isub>1 <: S\<^isub>1; \ \ S\<^isub>2 <: T\<^isub>2\ \ \ \ (S\<^isub>1 \ S\<^isub>2) <: (T\<^isub>1 \ T\<^isub>2)" -S_Forall[intro]: "\\ \ T\<^isub>1 <: S\<^isub>1; X\\; ((X,T\<^isub>1)#\) \ S\<^isub>2 <: T\<^isub>2\ - \ \ \ \[X<:S\<^isub>1].S\<^isub>2 <: \[X<:T\<^isub>1].T\<^isub>2" +inductive2 subtype_of :: "ty_context \ ty \ ty \ bool" ("_\_<:_" [100,100,100] 100) +where + S_Top[intro]: "\\ \ ok; S closed_in \\ \ \ \ S <: Top" +| S_Var[intro]: "\(X,S) \ set \; \ \ S <: T\ \ \ \ (Tvar X) <: T" +| S_Refl[intro]: "\\ \ ok; X \ domain \\\ \ \ Tvar X <: Tvar X" +| S_Arrow[intro]: "\\ \ T\<^isub>1 <: S\<^isub>1; \ \ S\<^isub>2 <: T\<^isub>2\ \ \ \ (S\<^isub>1 \ S\<^isub>2) <: (T\<^isub>1 \ T\<^isub>2)" +| S_Forall[intro]: "\\ \ T\<^isub>1 <: S\<^isub>1; X\\; ((X,T\<^isub>1)#\) \ S\<^isub>2 <: T\<^isub>2\ + \ \ \ \[X<:S\<^isub>1].S\<^isub>2 <: \[X<:T\<^isub>1].T\<^isub>2" lemma subtype_implies_closed: assumes a: "\ \ S <: T" shows "S closed_in \ \ T closed_in \" using a proof (induct) - case (S_Top S \) + case (S_Top \ S) have "Top closed_in \" by (simp add: closed_in_def ty.supp) moreover have "S closed_in \" by fact ultimately show "S closed_in \ \ Top closed_in \" by simp next - case (S_Var S T X \) + case (S_Var X S \ T) have "(X,S)\set \" by fact hence "X \ domain \" by (rule domain_inclusion) hence "(Tvar X) closed_in \" by (simp add: closed_in_def ty.supp supp_atm) @@ -377,10 +365,10 @@ proof - from a have "\(pi::tyvrs prm) (x::'a::fs_tyvrs). P x (pi\\) (pi\S) (pi\T)" proof (induct) - case (S_Top S \) + case (S_Top \ S) thus "P x (pi\\) (pi\S) (pi\Top)" by (force intro: valid_eqvt closed_in_eqvt a1) next - case (S_Var S T X \) + case (S_Var X S \ T) have "(X,S) \ set \" by fact hence "pi\(X,S)\pi\(set \)" by (rule pt_set_bij2[OF pt_tyvrs_inst, OF at_tyvrs_inst]) hence "(pi\X,pi\S)\set (pi\\)" by (simp add: set_eqvt) @@ -393,7 +381,7 @@ ultimately show "P x (pi\\) (pi\(Tvar X)) (pi\T)" by (simp add: a2) next - case (S_Refl X \) + case (S_Refl \ X) have "\ \ ok" by fact hence "\ (pi\\) ok" by (rule valid_eqvt) moreover @@ -404,7 +392,7 @@ next case S_Arrow thus ?case by (auto intro: a4 subtype_eqvt) next - case (S_Forall S1 S2 T1 T2 X \) + case (S_Forall \ T1 S1 X S2 T2) have b1: "\ \ T1 <: S1" by fact have b2: "\(pi::tyvrs prm) x. P x (pi\\) (pi\T1) (pi\S1)" by fact have b4: "((X,T1)#\) \ S2 <: T2" by fact @@ -628,7 +616,7 @@ shows "\\ \ \[X<:S\<^isub>1].S\<^isub>2 <: T; X\\; X\S\<^isub>1\ \ T = Top \ (\T\<^isub>1 T\<^isub>2. T = \[X<:T\<^isub>1].T\<^isub>2 \ \ \ T\<^isub>1 <: S\<^isub>1 \ ((X,T\<^isub>1)#\) \ S\<^isub>2 <: T\<^isub>2)" apply(frule subtype_implies_ok) - apply(ind_cases "\ \ \[X<:S\<^isub>1].S\<^isub>2 <: T") + apply(ind_cases2 "\ \ \[X<:S\<^isub>1].S\<^isub>2 <: T") apply(auto simp add: ty.inject alpha) apply(rule_tac x="[(X,Xa)]\T\<^isub>2" in exI) apply(rule conjI)