@@ -30,7 +30,7 @@ structure CaseValueSubgoal where
3030
3131 Remark: `subst` field of the second subgoal is equal to the input `subst`. -/
3232private def caseValueAux (mvarId : MVarId) (fvarId : FVarId) (value : Expr) (hName : Name := `h)
33- (subst : FVarSubst := {}) (substNewEq : Bool)
33+ (subst : FVarSubst := {})
3434 : MetaM (CaseValueSubgoal × CaseValueSubgoal) :=
3535 mvarId.withContext do
3636 let tag ← mvarId.getTag
@@ -47,26 +47,15 @@ private def caseValueAux (mvarId : MVarId) (fvarId : FVarId) (value : Expr) (hNa
4747 let (elseH, elseMVarId) ← elseMVar.mvarId!.intro1P
4848 let elseSubgoal := { mvarId := elseMVarId, newH := elseH, subst := subst : CaseValueSubgoal }
4949 let (thenH, thenMVarId) ← thenMVar.mvarId!.intro1P
50- let (thenSubst, thenMVarId) ←
51- if substNewEq then
52- substCore thenMVarId thenH (symm := false ) subst (clearH := false )
53- else
54- pure (subst, thenMVarId)
5550 thenMVarId.withContext do
56- trace[Meta] "subst domain: {thenSubst .domain.map (·.name)}"
57- let thenH := (thenSubst .get thenH).fvarId!
51+ trace[Meta] "subst domain: {subst .domain.map (·.name)}"
52+ let thenH := (subst .get thenH).fvarId!
5853 trace[Meta] "searching for decl"
5954 let _ ← thenH.getDecl
6055 trace[Meta] "found decl"
61- let thenSubgoal := { mvarId := thenMVarId, newH := (thenSubst .get thenH).fvarId!, subst := thenSubst : CaseValueSubgoal }
56+ let thenSubgoal := { mvarId := thenMVarId, newH := (subst .get thenH).fvarId!, subst : CaseValueSubgoal }
6257 pure (thenSubgoal, elseSubgoal)
6358
64- def caseValue (mvarId : MVarId) (fvarId : FVarId) (value : Expr) : MetaM (CaseValueSubgoal × CaseValueSubgoal) := do
65- let s ← caseValueAux mvarId fvarId value (substNewEq := true )
66- appendTagSuffix s.1 .mvarId `thenBranch
67- appendTagSuffix s.2 .mvarId `elseBranch
68- pure s
69-
7059structure CaseValuesSubgoal where
7160 mvarId : MVarId
7261 newHs : Array FVarId := #[]
@@ -88,22 +77,19 @@ structure CaseValuesSubgoal where
8877
8978 If `substNewEqs = true`, then the new `h_i` equality hypotheses are substituted in the first `n` cases.
9079-/
91- def caseValues (mvarId : MVarId) (fvarId : FVarId) (values : Array Expr) (hNamePrefix := `h) (substNewEqs : Bool) : MetaM (Array CaseValuesSubgoal) :=
80+ def caseValues (mvarId : MVarId) (fvarId : FVarId) (values : Array Expr) (hNamePrefix := `h) : MetaM (Array CaseValuesSubgoal) :=
9281 let rec loop : Nat → MVarId → List Expr → Array FVarId → Array CaseValuesSubgoal → MetaM (Array CaseValuesSubgoal)
9382 | _, mvarId, [], _, _ => throwTacticEx `caseValues mvarId "list of values must not be empty"
9483 | i, mvarId, v::vs, hs, subgoals => do
95- let (thenSubgoal, elseSubgoal) ← caseValueAux mvarId fvarId v (hNamePrefix.appendIndexAfter i) (substNewEq := !substNewEqs) {}
84+ let (thenSubgoal, elseSubgoal) ← caseValueAux mvarId fvarId v (hNamePrefix.appendIndexAfter i) {}
9685 appendTagSuffix thenSubgoal.mvarId ((`case).appendIndexAfter i)
9786 let thenMVarId ← hs.foldlM
9887 (fun thenMVarId h => match thenSubgoal.subst.get h with
9988 | Expr.fvar fvarId => thenMVarId.tryClear fvarId
10089 | _ => pure thenMVarId)
10190 thenSubgoal.mvarId
102- let subgoals ← if substNewEqs then
103- let (subst, mvarId) ← substCore thenMVarId thenSubgoal.newH (symm := false ) thenSubgoal.subst (clearH := true )
104- pure <| subgoals.push { mvarId := mvarId, newHs := #[], subst := subst }
105- else
106- pure <| subgoals.push { mvarId := thenMVarId, newHs := #[thenSubgoal.newH], subst := thenSubgoal.subst }
91+ let (subst, mvarId) ← substCore thenMVarId thenSubgoal.newH (symm := false ) thenSubgoal.subst (clearH := true )
92+ let subgoals := subgoals.push { mvarId := mvarId, newHs := #[], subst := subst }
10793 match vs with
10894 | [] => do
10995 appendTagSuffix elseSubgoal.mvarId ((`case).appendIndexAfter (i+1 ))
0 commit comments