This PR sets up the new integrated test/bench suite. It then migrates all benchmarks and some related tests to the new suite. There's also some documentation and some linting. For now, a lot of the old tests are left alone so this PR doesn't become even larger than it already is. Eventually, all tests should be migrated to the new suite though so there isn't a confusing mix of two systems.
144 lines
4 KiB
Text
144 lines
4 KiB
Text
/-!
|
||
# Pretty print with `∀` instead of `→` when domain is type
|
||
|
||
https://github.com/leanprover/lean4/issues/1834
|
||
-/
|
||
|
||
set_option linter.unusedVariables false
|
||
|
||
/-!
|
||
Tests of various pi types.
|
||
-/
|
||
section
|
||
variable (α : Nat → Type) (p q : Prop) (P : Nat → Prop)
|
||
|
||
-- default nondep
|
||
/-- info: Nat → Nat : Type -/
|
||
#guard_msgs in #check (i : Nat) → Nat
|
||
-- implicit nondep
|
||
/-- info: {i : Nat} → Nat : Type -/
|
||
#guard_msgs in #check {i : Nat} → Nat
|
||
-- instance implicit nondep
|
||
/-- info: [Inhabited Nat] → Nat : Type -/
|
||
#guard_msgs in #check [Inhabited Nat] → Nat
|
||
-- default nondep, both prop
|
||
/-- info: p → q : Prop -/
|
||
#guard_msgs in #check (h : p) → q
|
||
-- default nondep, only codomain prop
|
||
/-- info: ∀ (i : Nat), p : Prop -/
|
||
#guard_msgs in #check (i : Nat) → p
|
||
-- implicit nondep, only codomain prop
|
||
/-- info: ∀ {i : Nat}, p : Prop -/
|
||
#guard_msgs in #check {i : Nat} → p
|
||
-- instance implicit nondep, only codomain prop, hygienic name
|
||
/-- info: ∀ [Inhabited Nat], p : Prop -/
|
||
#guard_msgs in #check [Inhabited Nat] → p
|
||
-- instance implicit nondep, only codomain prop, user-provided name
|
||
/-- info: ∀ [instNat : Inhabited Nat], p : Prop -/
|
||
#guard_msgs in #check [instNat : Inhabited Nat] → p
|
||
-- default dep
|
||
/-- info: (i : Nat) → α i : Type -/
|
||
#guard_msgs in #check (i : Nat) → α i
|
||
-- implicit dep
|
||
/-- info: {i : Nat} → α i : Type -/
|
||
#guard_msgs in #check {i : Nat} → α i
|
||
-- instance implicit dep
|
||
/-- info: [inst : Inhabited Nat] → α default : Type -/
|
||
#guard_msgs in #check [Inhabited Nat] → α default
|
||
-- default dep, codomain prop
|
||
/-- info: ∀ (i : Nat), P i : Prop -/
|
||
#guard_msgs in #check (i : Nat) → P i
|
||
-- implicit dep, codomain prop
|
||
/-- info: ∀ {i : Nat}, P i : Prop -/
|
||
#guard_msgs in #check {i : Nat} → P i
|
||
-- instance implicit dep, codomain prop, hygienic name
|
||
/-- info: ∀ [inst : Inhabited Nat], P default : Prop -/
|
||
#guard_msgs in #check [Inhabited Nat] → P default
|
||
-- instance implicit dep, codomain prop, user-provided name
|
||
/-- info: ∀ [instNat : Inhabited Nat], P default : Prop -/
|
||
#guard_msgs in #check [instNat : Inhabited Nat] → P default
|
||
|
||
-- Same tests but with `pp.foralls` set to false.
|
||
set_option pp.foralls false
|
||
|
||
-- default nondep
|
||
/-- info: Nat → Nat : Type -/
|
||
#guard_msgs in #check (i : Nat) → Nat
|
||
-- implicit nondep
|
||
/-- info: {i : Nat} → Nat : Type -/
|
||
#guard_msgs in #check {i : Nat} → Nat
|
||
-- default nondep, both prop
|
||
/-- info: p → q : Prop -/
|
||
#guard_msgs in #check (h : p) → q
|
||
-- default nondep, only codomain prop
|
||
/-- info: Nat → p : Prop -/
|
||
#guard_msgs in #check (i : Nat) → p
|
||
-- default dep
|
||
/-- info: (i : Nat) → α i : Type -/
|
||
#guard_msgs in #check (i : Nat) → α i
|
||
-- implicit dep
|
||
/-- info: {i : Nat} → α i : Type -/
|
||
#guard_msgs in #check {i : Nat} → α i
|
||
-- default dep, codomain prop
|
||
/-- info: (i : Nat) → P i : Prop -/
|
||
#guard_msgs in #check (i : Nat) → P i
|
||
-- implicit dep, codomain prop
|
||
/-- info: {i : Nat} → P i : Prop -/
|
||
#guard_msgs in #check {i : Nat} → P i
|
||
-- implicit nondep, only codomain prop
|
||
/-- info: {i : Nat} → p : Prop -/
|
||
#guard_msgs in #check {i : Nat} → p
|
||
end
|
||
|
||
/-!
|
||
Rewrote forall, remains a forall, since domain is `Nat`.
|
||
-/
|
||
/--
|
||
trace: P : Nat → Prop
|
||
q : Prop
|
||
h : ∀ (n : Nat), P n = q
|
||
hq : q
|
||
⊢ ∀ (n : Nat), q
|
||
-/
|
||
#guard_msgs in
|
||
example (P : Nat → Prop) (q : Prop) (h : ∀ n, P n = q) (hq : q) :
|
||
∀ n, P n := by
|
||
conv => enter [n]; rw [h]
|
||
trace_state
|
||
exact fun _ => hq
|
||
|
||
/-!
|
||
When `pp.foralls` is false, uses non-dependent `→`.
|
||
-/
|
||
/--
|
||
trace: P : Nat → Prop
|
||
q : Prop
|
||
h : (n : Nat) → P n = q
|
||
hq : q
|
||
⊢ Nat → q
|
||
-/
|
||
#guard_msgs in
|
||
set_option pp.foralls false in
|
||
example (P : Nat → Prop) (q : Prop) (h : ∀ n, P n = q) (hq : q) :
|
||
∀ n, P n := by
|
||
conv => enter [n]; rw [h]
|
||
trace_state
|
||
exact fun _ => hq
|
||
|
||
/-!
|
||
Rewrote forall, turns into an implication, since domain is a proposition.
|
||
-/
|
||
/--
|
||
trace: p : Prop
|
||
P : p → Prop
|
||
q : Prop
|
||
h : ∀ (n : p), P n = q
|
||
hq : q
|
||
⊢ p → q
|
||
-/
|
||
#guard_msgs in
|
||
example (p : Prop) (P : p → Prop) (q : Prop) (h : ∀ n, P n = q) (hq : q) :
|
||
∀ n, P n := by
|
||
conv => enter [n]; rw [h]
|
||
trace_state
|
||
exact fun _ => hq
|