@@ -13,6 +13,8 @@ namespace GrindCnstr
1313
1414def isValue := leading_parser nonReservedSymbol " is_value " >> ident >> optional " ;"
1515def isStrictValue := leading_parser nonReservedSymbol " is_strict_value " >> ident >> optional " ;"
16+ def notValue := leading_parser nonReservedSymbol " not_value " >> ident >> optional " ;"
17+ def notStrictValue := leading_parser nonReservedSymbol " not_strict_value " >> ident >> optional " ;"
1618def isGround := leading_parser nonReservedSymbol " is_ground " >> ident >> optional " ;"
1719def sizeLt := leading_parser nonReservedSymbol " size " >> ident >> " < " >> numLit >> optional " ;"
1820def depthLt := leading_parser nonReservedSymbol " depth " >> ident >> " < " >> numLit >> optional " ;"
@@ -27,7 +29,7 @@ end GrindCnstr
2729
2830open GrindCnstr in
2931def grindPatternCnstr : Parser :=
30- isValue <|> isStrictValue <|> isGround <|> sizeLt <|> depthLt <|> genLt <|> maxInsts
32+ isValue <|> isStrictValue <|> notValue <|> notStrictValue <|> isGround <|> sizeLt <|> depthLt <|> genLt <|> maxInsts
3133 <|> guard <|> GrindCnstr.check <|> notDefEq <|> defEq
3234
3335def grindPatternCnstrs : Parser := leading_parser " where " >> many1Indent (ppLine >> grindPatternCnstr)
@@ -92,6 +94,10 @@ a literal (`Nat`, `Int`, `String`, etc.), or a lambda `fun x => t`.
9294
9395- `is_strict_value x`: Similar to `is_value`, but without lambdas.
9496
97+ - `not_value x`: The term bound to `x` is a **not** value (see `is_value`).
98+
99+ - `not_strict_value x`: Similar to `not_value`, but without lambdas.
100+
95101- `gen < n`: The theorem instance has generation less than `n`. Recall that each term is assigned a
96102 generation, and terms produced by theorem instantiation have a generation that is one greater than
97103the maximal generation of all the terms used to instantiate the theorem. This constraint complements
0 commit comments