@@ -2120,56 +2120,58 @@ def resRec (x y : BitVec w) (s : Nat) (hs : s < w) (hslt : 0 < s) (hw : 1 < w) :
21202120
21212121theorem 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
21742176theorem 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