Expression definitions and operations for CC.
An expression in CC.
- var {s : Sig} : Var Kind.var s → Exp s
- abs {s : Sig} : CaptureSet s → Ty TySort.capt s → Exp (s,x) → Exp s
- tabs {s : Sig} : CaptureSet s → Ty TySort.shape s → Exp (s,X) → Exp s
- cabs {s : Sig} : CaptureSet s → CaptureBound s → Exp (s,C) → Exp s
- pack {s : Sig} : CaptureSet s → Var Kind.var s → Exp s
- app {s : Sig} : Var Kind.var s → Var Kind.var s → Exp s
- tapp {s : Sig} : Var Kind.var s → Ty TySort.shape s → Exp s
- capp {s : Sig} : Var Kind.var s → CaptureSet s → Exp s
- letin {s : Sig} : Exp s → Exp (s,x) → Exp s
- unpack {s : Sig} : Exp s → Exp (s,C,x) → Exp s
- unit {s : Sig} : Exp s
- btrue {s : Sig} : Exp s
- bfalse {s : Sig} : Exp s
- read {s : Sig} : Var Kind.var s → Exp s
- write {s : Sig} : Var Kind.var s → Var Kind.var s → Exp s
- cond {s : Sig} : Var Kind.var s → Exp s → Exp s → Exp s
Instances For
Applies a renaming to all bound variables in an expression.
Equations
- (CC.Exp.var x_2).rename x✝ = CC.Exp.var (x_2.rename x✝)
- (CC.Exp.abs cs T e).rename x✝ = CC.Exp.abs (cs.rename x✝) (T.rename x✝) (e.rename x✝.lift)
- (CC.Exp.tabs cs T e).rename x✝ = CC.Exp.tabs (cs.rename x✝) (T.rename x✝) (e.rename x✝.lift)
- (CC.Exp.cabs cs cb e).rename x✝ = CC.Exp.cabs (cs.rename x✝) (cb.rename x✝) (e.rename x✝.lift)
- (CC.Exp.pack cs x_2).rename x✝ = CC.Exp.pack (cs.rename x✝) (x_2.rename x✝)
- (CC.Exp.app x_2 y).rename x✝ = CC.Exp.app (x_2.rename x✝) (y.rename x✝)
- (CC.Exp.tapp x_2 T).rename x✝ = CC.Exp.tapp (x_2.rename x✝) (T.rename x✝)
- (CC.Exp.capp x_2 cs).rename x✝ = CC.Exp.capp (x_2.rename x✝) (cs.rename x✝)
- (e1.letin e2).rename x✝ = (e1.rename x✝).letin (e2.rename x✝.lift)
- (e1.unpack e2).rename x✝ = (e1.rename x✝).unpack (e2.rename x✝.lift.lift)
- CC.Exp.unit.rename x✝ = CC.Exp.unit
- CC.Exp.btrue.rename x✝ = CC.Exp.btrue
- CC.Exp.bfalse.rename x✝ = CC.Exp.bfalse
- (CC.Exp.read x_2).rename x✝ = CC.Exp.read (x_2.rename x✝)
- (CC.Exp.write x_2 y).rename x✝ = CC.Exp.write (x_2.rename x✝) (y.rename x✝)
- (CC.Exp.cond x_2 e2 e3).rename x✝ = CC.Exp.cond (x_2.rename x✝) (e2.rename x✝) (e3.rename x✝)
Instances For
An expression is a value if it is an abstraction, pack, or unit.
- abs {s : Sig} {cs : CaptureSet s} {T : Ty TySort.capt s} {e : Exp (s,x)} : (Exp.abs cs T e).IsVal
- tabs {s : Sig} {cs : CaptureSet s} {T : Ty TySort.shape s} {e : Exp (s,X)} : (Exp.tabs cs T e).IsVal
- cabs {s : Sig} {cs : CaptureSet s} {cb : CaptureBound s} {e : Exp (s,C)} : (Exp.cabs cs cb e).IsVal
- pack {s : Sig} {cs : CaptureSet s} {x : Var Kind.var s} : (Exp.pack cs x).IsVal
- unit {s : Sig} : Exp.unit.IsVal
- btrue {s : Sig} : Exp.btrue.IsVal
- bfalse {s : Sig} : Exp.bfalse.IsVal
Instances For
A simple value is a value that is not a pack. Therefore, a simple value always has a capturing type, not an existential type.
- abs {s : Sig} {cs : CaptureSet s} {T : Ty TySort.capt s} {e : Exp (s,x)} : (Exp.abs cs T e).IsSimpleVal
- tabs {s : Sig} {cs : CaptureSet s} {T : Ty TySort.shape s} {e : Exp (s,X)} : (Exp.tabs cs T e).IsSimpleVal
- cabs {s : Sig} {cs : CaptureSet s} {cb : CaptureBound s} {e : Exp (s,C)} : (Exp.cabs cs cb e).IsSimpleVal
- unit {s : Sig} : Exp.unit.IsSimpleVal
- btrue {s : Sig} : Exp.btrue.IsSimpleVal
- bfalse {s : Sig} : Exp.bfalse.IsSimpleVal
Instances For
- is_simple_val {s : Sig} {v : Exp s} (hv : v.IsSimpleVal) : v.IsSimpleAns
- is_var {s : Sig} {x : Var Kind.var s} : (var x).IsSimpleAns
Instances For
An expression is closed if it contains no heap pointers.
- var {s : Sig} {x : Var Kind.var s} : x.IsClosed → (Exp.var x).IsClosed
- abs {s : Sig} {cs : CaptureSet s} {T : Ty TySort.capt s} {e : Exp (s,x)} : cs.IsClosed → T.IsClosed → e.IsClosed → (Exp.abs cs T e).IsClosed
- tabs {s : Sig} {cs : CaptureSet s} {T : Ty TySort.shape s} {e : Exp (s,X)} : cs.IsClosed → T.IsClosed → e.IsClosed → (Exp.tabs cs T e).IsClosed
- cabs {s : Sig} {cs : CaptureSet s} {cb : CaptureBound s} {e : Exp (s,C)} : cs.IsClosed → cb.IsClosed → e.IsClosed → (Exp.cabs cs cb e).IsClosed
- pack {s : Sig} {cs : CaptureSet s} {x : Var Kind.var s} : cs.IsClosed → x.IsClosed → (Exp.pack cs x).IsClosed
- app {s : Sig} {x y : Var Kind.var s} : x.IsClosed → y.IsClosed → (Exp.app x y).IsClosed
- tapp {s : Sig} {x : Var Kind.var s} {T : Ty TySort.shape s} : x.IsClosed → T.IsClosed → (Exp.tapp x T).IsClosed
- capp {s : Sig} {x : Var Kind.var s} {cs : CaptureSet s} : x.IsClosed → cs.IsClosed → (Exp.capp x cs).IsClosed
- letin {s : Sig} {e1 : Exp s} {e2 : Exp (s,x)} : e1.IsClosed → e2.IsClosed → (e1.letin e2).IsClosed
- unpack {s : Sig} {e1 : Exp s} {e2 : Exp (s,C,x)} : e1.IsClosed → e2.IsClosed → (e1.unpack e2).IsClosed
- unit {s : Sig} : Exp.unit.IsClosed
- btrue {s : Sig} : Exp.btrue.IsClosed
- bfalse {s : Sig} : Exp.bfalse.IsClosed
- read {s : Sig} {x : Var Kind.var s} : x.IsClosed → (Exp.read x).IsClosed
- write {s : Sig} {x y : Var Kind.var s} : x.IsClosed → y.IsClosed → (Exp.write x y).IsClosed
- cond {s : Sig} {x : Var Kind.var s} {e2 e3 : Exp s} : x.IsClosed → e2.IsClosed → e3.IsClosed → (Exp.cond x e2 e3).IsClosed