From mininix Require Export nix.operational. (* Influenced by https://gitlab.mpi-sws.org/iris/iris/-/blob/master/iris_heap_lang/notation.v But always uses ":" instead of a scope. *) Coercion EId' : string >-> expr. Coercion NInt : Z >-> num. Coercion NFloat : float >-> num. Coercion LitNum : num >-> base_lit. Coercion LitBool : bool >-> base_lit. Coercion ELit : base_lit >-> expr. Coercion EApp : expr >-> Funclass. Notation "λattr: a , e" := (EAbsMatch a true e) (at level 200, e, a at level 200, format "'[' 'λattr:' a , '/ ' e ']'"). Notation "λattr: a .., e" := (EAbsMatch a false e) (at level 200, e, a at level 200, format "'[' 'λattr:' a .., '/ ' e ']'"). Notation "λ: x .. y , e" := (EAbs x .. (EAbs y e) ..) (at level 200, x, y at level 1, e at level 200, format "'[' 'λ:' x .. y , '/ ' e ']'"). Notation "'let:' x := e1 'in' e2" := (ELet x e1 e2) (at level 200, x at level 1, e1, e2 at level 200, format "'[' 'let:' x := '[' e1 ']' 'in' '/' e2 ']'"). Notation "'with:' a 'in' e" := (EWith a e) (at level 200, a, e at level 200, format "'[' 'with:' a 'in' '/' e ']'"). Notation "'if:' e1 'then' e2 'else' e3" := (EIf e1 e2 e3) (at level 200, e1, e2, e3 at level 200). Notation "e1 .: e2" := (ESelect e1 e2) (at level 70, no associativity). Notation "e1 +: e2" := (EBinOp AddOp e1 e2) (at level 50, left associativity). Notation "e1 *: e2" := (EBinOp MulOp e1 e2). Notation "e1 -: e2" := (EBinOp SubOp e1 e2) (at level 50, left associativity). Notation "e1 /: e2" := (EBinOp DivOp e1 e2) (at level 40). Notation "e1 =: e2" := (EBinOp EqOp e1 e2) (at level 70, no associativity). Notation "e1 <: e2" := (EBinOp LtOp e1 e2) (at level 70, no associativity). Notation "'ceil:' e" := (EBinOp (RoundOp Ceil) e LitNull) (at level 10).