src/ZF/Resid/SubUnion.thy
author clasohm
Sat, 09 Dec 1995 13:36:11 +0100
changeset 1401 0c439768f45c
parent 1155 928a16e02f9f
child 1478 2b8c2a7547ab
permissions -rw-r--r--
removed quotes from consts and syntax sections

(*  Title: 	SubUnion.thy
    ID:         $Id$
    Author: 	Ole Rasmussen
    Copyright   1995  University of Cambridge
    Logic Image: ZF
*)

SubUnion = Redex +

consts
  Ssub,Scomp,Sreg  :: i
  "<==","~"        :: [i,i]=>o (infixl 70)
  un               :: [i,i]=>i (infixl 70)
  regular	   :: i=>o
  
translations
  "a<==b"        == "<a,b>:Ssub"
  "a ~ b"        == "<a,b>:Scomp"
  "regular(a)"   == "a:Sreg"

inductive
  domains       "Ssub" <= "redexes*redexes"
  intrs
    Sub_Var	"n:nat ==> Var(n)<== Var(n)"
    Sub_Fun	"[|u<== v|]==> Fun(u)<== Fun(v)"
    Sub_App1	"[|u1<== v1; u2<== v2; b:bool|]==>   
		     App(0,u1,u2)<== App(b,v1,v2)"
    Sub_App2	"[|u1<== v1; u2<== v2|]==>   
		     App(1,u1,u2)<== App(1,v1,v2)"
  type_intrs	"redexes.intrs@bool_typechecks"

inductive
  domains       "Scomp" <= "redexes*redexes"
  intrs
    Comp_Var	"n:nat ==> Var(n) ~ Var(n)"
    Comp_Fun	"[|u ~ v|]==> Fun(u) ~ Fun(v)"
    Comp_App	"[|u1 ~ v1; u2 ~ v2; b1:bool; b2:bool|]==>   
		     App(b1,u1,u2) ~ App(b2,v1,v2)"
  type_intrs	"redexes.intrs@bool_typechecks"

inductive
  domains       "Sreg" <= "redexes"
  intrs
    Reg_Var	"n:nat ==> regular(Var(n))"
    Reg_Fun	"[|regular(u)|]==> regular(Fun(u))"
    Reg_App1	"[|regular(Fun(u)); regular(v) 
		     |]==>regular(App(1,Fun(u),v))"
    Reg_App2	"[|regular(u); regular(v) 
		     |]==>regular(App(0,u,v))"
  type_intrs	"redexes.intrs@bool_typechecks"

defs
  union_def  "u un v == redex_rec(u,   
	 %i.lam t:redexes.redexes_case(%j.Var(i), %x.0, %b x y.0, t),   
      %x m.lam t:redexes.redexes_case(%j.0, %y.Fun(m`y), %b y z.0, t),   
%b x y m p.lam t:redexes.redexes_case(%j.0, %y.0,   
	                               %c z u. App(b or c, m`z, p`u), t))`v"
end