| namespace Ex1 | |
| theorem elim_with_implicit_target (motive : Nat → Nat → Prop) (case1 : ∀ m n, motive m n) (n : Nat) {m : Nat} : motive m n := case1 _ _ | |
| example (n m : Nat) : n ≤ m := by | |
| induction n using elim_with_implicit_target | |
| case case1 => sorry | |
| end Ex1 | |
| namespace Ex2 | |
| theorem elim_with_implicit_target (motive : Nat → Nat → Prop) (case1 : ∀ m n, motive m n) {n : Nat} (m : Nat) : motive m n := case1 _ _ | |
| example (n m : Nat) : n ≤ m := by | |
| induction m using elim_with_implicit_target | |
| case case1 => sorry | |
| end Ex2 | |
| namespace Ex3 | |
| -- this one should work | |
| theorem elim_with_implicit_target (motive : (n : Nat) → Fin n → Prop) (case1 : ∀ m n, motive m n) {n : Nat} (m : Fin n) : motive n m := case1 _ _ | |
| example (n : Nat) (m : Fin n) : n ≤ m := by | |
| induction m using elim_with_implicit_target | |
| case case1 => sorry | |
| end Ex3 | |
| namespace Ex4 | |
| -- anonymous implicit target | |
| theorem elim_with_implicit_target (motive : Bool → Nat → Prop) | |
| (case1 : ∀ m k, motive m k) {_ : Bool} (m : Nat) : motive ‹Bool› m := case1 _ _ | |
| example (n m : Nat) : n ≤ m := by | |
| induction m using elim_with_implicit_target | |
| case case1 => sorry | |
| end Ex4 |