Skip to content

Commit 59dd362

Browse files
committed
chore: thm 1
1 parent a6e96f2 commit 59dd362

File tree

1 file changed

+50
-48
lines changed

1 file changed

+50
-48
lines changed

src/Init/Data/BitVec/Bitblast.lean

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2120,56 +2120,58 @@ def resRec (x y : BitVec w) (s : Nat) (hs : s < w) (hslt : 0 < s) (hw : 1 < w) :
21202120

21212121
theorem resRec_true_iff (x y : BitVec w) (s : Nat) (hs : s < w) (hs' : 0 < s) (hw : 1 < w) :
21222122
resRec x y s hs hs' hw = true ↔ ∃ (k : Nat), ∃ (h : k ≤ s), ∃ (hk' : 0 < k), aandRec x y k (by omega) (by omega) := by
2123-
constructor
2124-
stop
2125-
· induction s
2123+
unfold resRec
2124+
rcases s with _|s
2125+
· omega
2126+
· simp
2127+
rcases s
21262128
· case zero =>
2127-
unfold resRec; simp
2128-
· case succ s ihs =>
2129-
unfold resRec
2130-
by_cases ha : aandRec x y (s + 1) (by omega) (by omega)
2131-
· simp [ha]
2132-
intro
2133-
exists s + 1
2134-
simp [ha]
2135-
· simp [ha]
2136-
cases s
2137-
· case neg.zero => simp [ha]
2138-
· case neg.succ s =>
2139-
simp
2140-
intro h
2141-
simp at ihs
2142-
specialize ihs (by omega)
2143-
specialize ihs (by simp)
2144-
simp [h] at ihs
2145-
obtain ⟨k,hk,hk',hk''⟩ := ihs
2146-
exists k
2147-
exists (by omega)
2148-
exists hk'
2149-
· intro h1
2150-
induction s
2151-
· case zero => omega
2152-
· case succ s ihs =>
2153-
unfold resRec
2154-
obtain ⟨k,h,hk,hk'⟩ := h1
2155-
cases s
2156-
· have hk'' : k = 0 ∨ k = 1 := by omega
2157-
rcases hk''
2158-
· omega
2159-
· case zero.inr hk'' =>
2160-
simp [hk''] at hk'
2161-
exact hk'
2162-
· case succ s =>
2129+
simp
2130+
constructor
2131+
· intro ha
2132+
exists 1, by omega, by omega
2133+
· intro hr
2134+
obtain ⟨k, hk, hk', hk''⟩ := hr
2135+
simp [show k = 1 by omega] at hk''
2136+
exact hk''
2137+
· case succ s =>
2138+
simp
2139+
induction s
2140+
· case zero =>
2141+
unfold resRec
2142+
simp
2143+
constructor
2144+
· intro h
2145+
rcases h with h|h
2146+
· exists 1, by omega, by omega
2147+
· exists 2, by omega, by omega
2148+
· intro h
2149+
obtain ⟨k, hk, hk', hk''⟩ := h
2150+
have h : k = 1 ∨ k = 2 := by omega
2151+
rcases h with h|h
2152+
· simp [h] at hk''
2153+
simp [hk'']
2154+
· simp [h] at hk''
2155+
simp [hk'']
2156+
· case succ s ihs =>
21632157
specialize ihs (by omega) (by omega)
2164-
simp [hk] at ihs
2165-
specialize ihs k
2166-
simp [hk']
2167-
by_cases hks : k ≤ s + 1
2168-
· simp_all
2169-
· simp_all
2170-
have := resRec_true_of_aandRec (x := x) (y := y) (s := k) (by omega) (by omega) (by omega) (by omega)
2171-
2172-
sorry
2158+
unfold resRec
2159+
simp [ihs]
2160+
constructor
2161+
· intro h
2162+
rcases h with h|h
2163+
· obtain ⟨k, hk, hk', hk''⟩ := h
2164+
exists k, by omega, by omega
2165+
· exists s + 1 + 1 + 1, by omega, by omega
2166+
· intro h
2167+
obtain ⟨k, hk, hk', hk''⟩ := h
2168+
by_cases h' : x.aandRec y (s + 1 + 1 + 1) (by omega) (by omega) = true
2169+
· simp [h']
2170+
· simp [h']
2171+
by_cases h'' : k ≤ s + 1 + 1
2172+
· exists k, h'', by omega
2173+
· have : k = s + 1 + 1 + 1 := by omega
2174+
simp_all
21732175

21742176
theorem getElem_of_lt_of_le {x : BitVec w} (hw : 1 < w) (hk : 0 < k) (hk' : k < w) (hlt: x.toNat < 2 ^ (k + 1)) (hle : 2 ^ k ≤ x.toNat): -- at least one of these hypotheses can likely be relaxed
21752177
x[k] = true := by sorry

0 commit comments

Comments
 (0)