lean4-htt/tests/lean/run/macro.lean
Kyle Miller d31066646d
feat: make #check and #reduce typecheck terms (#5079)
These commands were trusting that elaboration resulted in type-correct
terms, but users testing custom elaborators have found it to be
surprising that they do not do typechecking. This adds a `Meta.check`
step.
2024-08-31 02:39:38 +00:00

70 lines
1.7 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

set_option pp.mvars false
namespace Test
abbrev Set (α : Type) := α → Prop
axiom setOf {α : Type} : (α → Prop) → Set α
axiom mem {α : Type} : α → Set α → Prop
axiom univ {α : Type} : Set α
axiom Union {α : Type} : Set (Set α) → Set α
syntax:100 (priority := high) term " ∈ " term:99 : term
macro_rules
| `($x ∈ $s) => `(mem $x $s)
declare_syntax_cat index
syntax term : index
-- `≤` has precedence 50
syntax term:51 "≤" ident "<" term:51 : index
syntax ident ":" term : index
syntax "{" index " | " term "}" : term
macro_rules
| `({$l:term ≤ $x < $u | $p}) => `(setOf (fun $x => $l ≤ $x ∧ $x < $u ∧ $p))
| `({$x:ident : $t | $p}) => `(setOf (fun ($x : $t) => $p))
| `({$x:term ∈ $s | $p}) => `(setOf (fun $x => $x ∈ $s ∧ $p))
| `({$x:term ≤ $e | $p}) => `(setOf (fun $x => $x ≤ $e ∧ $p))
| `({$b:term | $r}) => `(setOf (fun $b => $r))
/-- info: setOf fun x => 1 ≤ x ∧ x < 10 ∧ x ≠ 5 : Set Nat -/
#guard_msgs in
#check { 1 ≤ x < 10 | x ≠ 5 }
/-- info: setOf fun f => f 1 > 0 : Set (Nat → Nat) -/
#guard_msgs in
#check { f : Nat → Nat | f 1 > 0 }
syntax " " term ", " term : term
macro_rules
| `( $b, $r) => `(Union {$b:term | $r})
/-- info: Union (setOf fun x => x = x) : Set ?_ -/
#guard_msgs in
#check x, x = x
/-- info: Union (setOf fun x => x = x) : Set Unit -/
#guard_msgs in
#check (x : Set Unit), x = x
/-- info: Union (setOf fun x => mem x univ ∧ x = x) : Set ?_ -/
#guard_msgs in
#check x ∈ univ, x = x
syntax "#check2" term : command
macro_rules
| `(#check2 $e) => `(#check $e #check $e)
/--
info: 1 : Nat
---
info: 1 : Nat
-/
#guard_msgs in
#check2 1
end Test