lean4-htt/tests/lean/inductionGen.lean.expected.out
Joachim Breitner 27b7002138
fix: checkTargets check for duplicate target (#3171)
The `checkTargets` function introduced in 4a0f8bf2 as
```
  checkTargets (targets : Array Expr) : MetaM Unit := do
    let mut foundFVars : FVarIdSet := {}
    for target in targets do
      unless target.isFVar do
        throwError "index in target's type is not a variable (consider using the `cases` tactic instead){indentExpr target}"
      if foundFVars.contains target.fvarId! then
        throwError "target (or one of its indices) occurs more than once{indentExpr target}"
```
looks like it tries to check for duplicate indices, but it doesn’t
actually, as `foundFVars` is never written to.

This adds
```
      foundFVars := foundFVars.insert target.fvarId!
```
and a test case.

Maybe a linter that warns about `let mut` that are never writen to would
be useful?
2024-01-18 09:44:17 +00:00

45 lines
1.4 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.

inductionGen.lean:23:2-23:14: error: index in target's type is not a variable (consider using the `cases` tactic instead)
n + 1
inductionGen.lean:25:8-25:11: warning: declaration uses 'sorry'
case cons
α : Type u_1
n : Nat
ys : Vec α (n + 1)
x : α
xs : Vec α n
h : Vec.cons x xs = ys
⊢ Vec.head (Vec.cons x xs) = Vec.head ys
inductionGen.lean:64:8-64:11: warning: declaration uses 'sorry'
case natVal
α : ExprType
a✝ : Nat
b : Expr ExprType.nat
h : Expr.natVal a✝ = b
⊢ eval (constProp (Expr.natVal a✝)) = eval b
case boolVal
α : ExprType
a✝ : Bool
b : Expr ExprType.bool
h : Expr.boolVal a✝ = b
⊢ eval (constProp (Expr.boolVal a✝)) = eval b
case eq
α α✝ : ExprType
a✝¹ a✝ : Expr α✝
a_ih✝¹ : ∀ (b : Expr α✝), a✝¹ = b → eval (constProp a✝¹) = eval b
a_ih✝ : ∀ (b : Expr α✝), a✝ = b → eval (constProp a✝) = eval b
b : Expr ExprType.bool
h : Expr.eq a✝¹ a✝ = b
⊢ eval (constProp (Expr.eq a✝¹ a✝)) = eval b
case add
α : ExprType
a✝¹ a✝ : Expr ExprType.nat
a_ih✝¹ : ∀ (b : Expr ExprType.nat), a✝¹ = b → eval (constProp a✝¹) = eval b
a_ih✝ : ∀ (b : Expr ExprType.nat), a✝ = b → eval (constProp a✝) = eval b
b : Expr ExprType.nat
h : Expr.add a✝¹ a✝ = b
⊢ eval (constProp (Expr.add a✝¹ a✝)) = eval b
inductionGen.lean:78:2-78:27: error: target (or one of its indices) occurs more than once
n