lean4-htt/tests/lean/run/1156.lean
Kyle Miller 407a59d697
feat: pretty print props with only if domain is prop, add pp.foralls (#7812)
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`.
2025-04-04 02:55:47 +00:00

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