This PR modifies the pretty printing of pi types. Now `∀` will be preferred over `→` for propositions if the domain is not a proposition. For example, `∀ (n : Nat), True` pretty prints as `∀ (n : Nat), True` rather than as `Nat → True`. There is also now an option `pp.foralls` (default true) that when false disables using `∀` at all, for pedagogical purposes. This PR also adjusts instance implicit binder pretty printing — nondependent pi types won't show the instance binder name. Closes #1834. The linked RFC also suggests using `_` for binder names in case of non-dependance. We're tabling that idea. Potentially it is useful for hygienic names; this could improve how `Nat → True` pretty prints as `∀ (a : Nat), True`, with this `a` that's chosen by implication notation elaboration. Relatedly, this PR exposes even further the issue where binder names are reused in a confusing way. Consider: `Nat → Nat → (a : Nat) → a = a` pretty prints as `∀ (a a a : Nat), a = a`.
36 lines
717 B
Text
36 lines
717 B
Text
inductive Foo : Nat -> Type where
|
|
| mk (a b : Nat) : Foo a -> Foo b
|
|
|
|
/-- info: Foo.mk : (a b : Nat) → Foo a → Foo b -/
|
|
#guard_msgs in
|
|
#check @Foo.mk
|
|
example : (a b : Nat) → Foo a → Foo b := @Foo.mk
|
|
|
|
/--
|
|
info: inductive Foo : Nat → Type
|
|
number of parameters: 0
|
|
constructors:
|
|
Foo.mk : (a b : Nat) → Foo a → Foo b
|
|
-/
|
|
#guard_msgs in
|
|
#print Foo
|
|
|
|
namespace Ex2
|
|
|
|
def natToType : Nat → Type
|
|
| 0 => Unit
|
|
| _ => Bool
|
|
|
|
inductive Foo : Nat → Char → Prop
|
|
| mk (n : Nat) (elem : natToType n) (c : Char) : Foo n c
|
|
|
|
/--
|
|
info: inductive Ex2.Foo : Nat → Char → Prop
|
|
number of parameters: 1
|
|
constructors:
|
|
Ex2.Foo.mk : ∀ (n : Nat) (elem : natToType n) (c : Char), Foo n c
|
|
-/
|
|
#guard_msgs in
|
|
#print Foo
|
|
|
|
end Ex2
|