@Kha This commit adds auto bound implicits to constructors. I was excited until I tried to define the `Bigstep` type again without `autoBoundImplicitLocal`, and found small typos. Example, I had ``` | ifTrue : eval σ₁ b = true → Bigstep (c₁, σ₁) σ₂ t → Bigstep (cond b c₁ c₂, σ₁) σ₂ (t₁ + 1) ``` where `t₁` should be `t`, but the declaration was accepted. I am wondering whether Isabelle performs some kind of sanity checking, and/or enforces rules such as: auto-bound implicits may only be introduced by hypotheses. Note that this is not an issue for definitions, because the body of the definition will probably not type check when we have this kind of typo in the header. Anyway, I am putting the experiment in this branch for now. That being said, the `Bigstep` declaration is way nicer with `autoBoundImplicitLocal`s. Another option is to add a new option `ctorAutoBoundImplicitLocal` that is false by default, and activates auto implicit locals for constructors when set to true.
30 lines
1.8 KiB
Text
30 lines
1.8 KiB
Text
inductive1.lean:4:15-4:18: error: invalid inductive type, resultant type is not a sort
|
|
inductive1.lean:12:0-12:19: error: invalid mutually inductive types, resulting universe mismatch, given
|
|
Type
|
|
expected type
|
|
Prop
|
|
inductive1.lean:22:0-22:37: error: invalid mutually inductive types, resulting universe mismatch, given
|
|
Type v
|
|
expected type
|
|
Type u
|
|
inductive1.lean:31:0-31:41: error: invalid mutually inductive types, parameter 'x' has type
|
|
Bool
|
|
but is expected to have type
|
|
Nat
|
|
inductive1.lean:40:0-40:30: error: invalid inductive type, number of parameters mismatch in mutually inductive datatypes
|
|
inductive1.lean:49:0-49:40: error: invalid mutually inductive types, binder annotation mismatch at parameter 'x'
|
|
inductive1.lean:59:0-59:45: error: invalid inductive type, universe parameters mismatch in mutually inductive datatypes
|
|
inductive1.lean:69:2-69:5: error: 'Boo.T1.bla' has already been declared
|
|
inductive1.lean:73:10-73:12: error: 'Boo.T1' has already been declared
|
|
inductive1.lean:80:0-80:27: error: invalid use of 'partial' in inductive declaration
|
|
inductive1.lean:81:0-81:33: error: invalid use of 'noncomputable' in inductive declaration
|
|
inductive1.lean:82:0-82:29: error: invalid use of attributes in inductive declaration
|
|
inductive1.lean:85:0-85:17: error: invalid 'private' constructor in a 'private' inductive datatype
|
|
inductive1.lean:93:7-93:26: error: invalid inductive type, cannot mix unsafe and safe declarations in a mutually inductive datatypes
|
|
inductive1.lean:100:0-100:4: error: constructor resulting type must be specified in inductive family declaration
|
|
inductive1.lean:105:7-105:9: error: type expected
|
|
failed to synthesize instance
|
|
CoeSort (Nat → Type) ?m
|
|
inductive1.lean:108:0-108:10: error: unexpected constructor resulting type
|
|
Nat
|
|
inductive1.lean:118:7-118:11: error: unknown identifier 'cons'
|