This PR fixes an `AppBuilder` exception in the `cbv` tactic when simplifying projections whose projection function is dependent (closes #12457). Previously, `handleProj` unconditionally used `mkCongrArg` to prove `e.i = e'.i` from `e = e'`, but `mkCongrArg` requires a non-dependent function. For dependent projections (e.g., `fun x => x.2 : (x : String.Slice) → x.1.Pos`), this would fail. Now, `handleProj` first checks whether the projection function type is non-dependent (a simple arrow). If so, it proceeds with `mkCongrArg` as before. Otherwise, it falls back to: 1. Attempting to reduce the projection directly. 2. If reduction fails, using a heterogeneous congruence lemma (`mkHCongr`) converted to an equality via `mkEqOfHEq`, provided the original and rewritten struct are definitionally equal.
1 line
89 B
Text
1 line
89 B
Text
example : ("abc".pos ⟨1⟩ (by decide_cbv)).get (by decide_cbv) = 'b' := by decide_cbv
|