lean4-htt/tests/elab/270.lean
Kyle Miller 0db4ac18e5
feat: beta reduce while elaborating applications (#13807)
This PR modifies the app elaborator to beta reduce arguments while
substituting them into expected types for later arguments. This makes it
consistent with `inferType` and `instantiateMVars`, which both beta
reduce substitutions. In particular, this change ensures that the app
elaborator behaves as if it creates metavariables for each parameter and
assigns elaborated arguments to the metavariables. **Breaking change:**
tactic proofs may need to be modified to remove unnecessary steps, e.g.
`dsimp only` steps that were previously for beta reductions.
2026-05-21 07:26:00 +00:00

34 lines
1 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.

class CommAddSemigroup (α : Type u) extends Add α where
addComm : {a b : α} → a + b = b + a
addAssoc : {a b c : α} → a + b + c = a + (b + c)
open CommAddSemigroup
theorem addComm3 [CommAddSemigroup α] {a b c : α} : a + b + c = a + c + b := by {
have h : b + c = c + b := addComm;
have h' := congrArg (a + ·) h;
rw [←addAssoc] at h';
rw [←addAssoc (a := a)] at h';
exact h';
}
theorem addComm4 [CommAddSemigroup α] {a b c : α} : a + b + c = a + c + b := by {
rw [addAssoc, addAssoc];
rw [addComm (a := b)];
}
theorem addComm5 [CommAddSemigroup α] {a b c : α} : a + b + c = a + c + b := by {
have h : b + c = c + b := addComm;
have h' := congrArg (a + ·) h;
rw [←addAssoc] at h';
rw [←addAssoc (a := a)] at h';
exact h';
}
theorem addComm6 [CommAddSemigroup α] {a b c : α} : a + b + c = a + c + b := by {
have h : b + c = c + b := addComm;
have h' := congrArg (a + ·) h;
rw [←addAssoc] at h';
rw [←addAssoc] at h';
exact h';
}