Type definitions and operations for CC.
A capture bound, either unbound or bounded by a capture set. It bounds capture set parameters.
- unbound {s : Sig} : CaptureBound s
- bound {s : Sig} : CaptureSet s → CaptureBound s
Instances For
A type in CC, indexed by its sort (capturing, shape, or existential).
- top {s : Sig} : Ty TySort.shape s
- tvar {s : Sig} : BVar s Kind.tvar → Ty TySort.shape s
- arrow {s : Sig} : Ty TySort.capt s → Ty TySort.exi (s,x) → Ty TySort.shape s
- poly {s : Sig} : Ty TySort.shape s → Ty TySort.exi (s,X) → Ty TySort.shape s
- cpoly {s : Sig} : CaptureBound s → Ty TySort.exi (s,C) → Ty TySort.shape s
- unit {s : Sig} : Ty TySort.shape s
- cap {s : Sig} : Ty TySort.shape s
- bool {s : Sig} : Ty TySort.shape s
- cell {s : Sig} : Ty TySort.shape s
- capt {s : Sig} : CaptureSet s → Ty TySort.shape s → Ty TySort.capt s
- exi {s : Sig} : Ty TySort.capt (s,C) → Ty TySort.exi s
- typ {s : Sig} : Ty TySort.capt s → Ty TySort.exi s
Instances For
Applies a renaming to a capture bound.
Equations
Instances For
Applies a renaming to all bound variables in a type.
Equations
- CC.Ty.top.rename x✝ = CC.Ty.top
- (CC.Ty.tvar x_2).rename x✝ = CC.Ty.tvar (x✝.var x_2)
- (T1.arrow T2).rename x✝ = (T1.rename x✝).arrow (T2.rename x✝.lift)
- (T1.poly T2).rename x✝ = (T1.rename x✝).poly (T2.rename x✝.lift)
- (CC.Ty.cpoly cb T).rename x✝ = CC.Ty.cpoly (cb.rename x✝) (T.rename x✝.lift)
- CC.Ty.unit.rename x✝ = CC.Ty.unit
- CC.Ty.cap.rename x✝ = CC.Ty.cap
- CC.Ty.bool.rename x✝ = CC.Ty.bool
- CC.Ty.cell.rename x✝ = CC.Ty.cell
- (CC.Ty.capt cs T).rename x✝ = CC.Ty.capt (cs.rename x✝) (T.rename x✝)
- T.exi.rename x✝ = (T.rename x✝.lift).exi
- T.typ.rename x✝ = (T.rename x✝).typ
Instances For
Extracts the capture set from a capturing type.
Equations
- (CC.Ty.capt C a).captureSet = C
Instances For
A capture bound is closed if it contains no heap pointers.
- unbound {s : Sig} : CaptureBound.unbound.IsClosed
- bound {s : Sig} {cs : CaptureSet s} : cs.IsClosed → (CaptureBound.bound cs).IsClosed
Instances For
A type is closed if it contains no heap pointers.
- top {x✝ : Sig} : Ty.top.IsClosed
- tvar {x✝ : Sig} {x : BVar x✝ Kind.tvar} : (Ty.tvar x).IsClosed
- arrow {x✝ : Sig} {T1 : Ty TySort.capt x✝} {T2 : Ty TySort.exi (x✝,x)} : T1.IsClosed → T2.IsClosed → (T1.arrow T2).IsClosed
- poly {x✝ : Sig} {T1 : Ty TySort.shape x✝} {T2 : Ty TySort.exi (x✝,X)} : T1.IsClosed → T2.IsClosed → (T1.poly T2).IsClosed
- cpoly {x✝ : Sig} {cb : CaptureBound x✝} {T : Ty TySort.exi (x✝,C)} : cb.IsClosed → T.IsClosed → (Ty.cpoly cb T).IsClosed
- unit {x✝ : Sig} : Ty.unit.IsClosed
- cap {x✝ : Sig} : Ty.cap.IsClosed
- bool {x✝ : Sig} : Ty.bool.IsClosed
- cell {x✝ : Sig} : Ty.cell.IsClosed
- capt {x✝ : Sig} {cs : CaptureSet x✝} {S : Ty TySort.shape x✝} : cs.IsClosed → S.IsClosed → (Ty.capt cs S).IsClosed
- exi {x✝ : Sig} {T : Ty TySort.capt (x✝,C)} : T.IsClosed → T.exi.IsClosed
- typ {x✝ : Sig} {T : Ty TySort.capt x✝} : T.IsClosed → T.typ.IsClosed