Theorem: selectRows2_spec2 (Table/Proofs.lean)

State before:
η : Type u_η
dec_η : DecidableEq η
sch : Schema
⊢ ∀ (t : Table sch) (bs : List Bool),
    List.length bs = nrows t → nrows (selectRows2 t bs) = List.length (List.removeAllEq bs [false])
Tactic:
intro t bs h
State after:
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = nrows t
⊢ nrows (selectRows2 t bs) = List.length (List.removeAllEq bs [false])

State before:
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = nrows t
⊢ nrows (selectRows2 t bs) = List.length (List.removeAllEq bs [false])
Tactic:
simp only [nrows, selectRows2, Schema.length_eq_List_length]
State after:
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = nrows t
⊢ List.length (List.sieve bs t.rows) = List.length (List.removeAllEq bs [false])

State before:
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = nrows t
⊢ List.length (List.sieve bs t.rows) = List.length (List.removeAllEq bs [false])
Tactic:
apply List.sieve_removeAllEq
State after:
case a
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = nrows t
⊢ List.length bs = List.length t.rows

State before:
case a
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = nrows t
⊢ List.length bs = List.length t.rows
Tactic:
rw [nrows, Schema.length_eq_List_length] at h
State after:
case a
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = List.length t.rows
⊢ List.length bs = List.length t.rows

State before:
case a
η : Type u_η
dec_η : DecidableEq η
sch : Schema
t : Table sch
bs : List Bool
h : List.length bs = List.length t.rows
⊢ List.length bs = List.length t.rows
Tactic:
exact h
State after:
no goals