universe u v w class Funtype (N : Sort u) (O : outParam (Sort v)) (T : outParam (Sort w)) := pack : O -> N unpack : N -> O apply : N -> T class LNot {P : Sort u} (L : P -> Prop) := toFun : (p : P) -> Not (L p) namespace LNot variable {P : Sort u} {L : P -> Prop} abbrev applyFun (K : LNot L) {p} := K.toFun p abbrev unpackFun (K : LNot L) := K.toFun instance isFuntype : Funtype (LNot L) ((p : P) -> Not (L p)) ({p : P} -> Not (L p)) := {pack := mk, unpack := unpackFun, apply := applyFun} end LNot #check LNot.unpackFun #check LNot.isFuntype.unpack #check LNot.applyFun #check LNot.isFuntype.apply