# How to define a simple Boolean term rewriter properly in Symbolics?

**URL:** <https://discourse.julialang.org/t/how-to-define-a-simple-boolean-term-rewriter-properly-in-symbolics/90749>\
**Category:** General Usage\
**Tags:** symbolics, symbolic-utils\
**Created:** [November 24, 2022, 2:07pm UTC](https://discourse.julialang.org/t/how-to-define-a-simple-boolean-term-rewriter-properly-in-symbolics/90749 "2022-11-24T14:07:56Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shuhua](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/shuhua/32/27618_2.png) [@Shuhua](https://discourse.julialang.org/u/Shuhua)\
**Post date:** [November 24, 2022, 2:07pm UTC](https://discourse.julialang.org/t/how-to-define-a-simple-boolean-term-rewriter-properly-in-symbolics/90749/1 "2022-11-24T14:07:56Z")

</div>

We know that `a & a = a` holds for a Boolean variable `a`. However, this rule is missing in SymbolicUtils.jl.

```julia
julia> using SymbolicUtils

julia> r = @rule ~x & ~x => ~x
~x & ~x => ~x

julia> @syms a::Bool b::Bool
(a, b)

julia> simplify(a & a; rewriter=r)
a

julia> simplify(a & a & a; rewriter=r)
(a & a) & a

julia> simplify((a & a) & b; rewriter=r)
(a & a) & b

julia> simplify(a & a & a & a; rewriter=r)
((a & a) & a) & a

```

I do not understand why `a & a & a` or `(a & a) & b` does not work. I am new to Symbolics in Julia. Any help is appreciated.

---

<div class="post-metadata">

**Author:** ![bowenszhu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bowenszhu/32/44677_2.png) [@bowenszhu](https://discourse.julialang.org/u/bowenszhu)\
**Post date:** [November 28, 2022, 7:09am UTC](https://discourse.julialang.org/t/how-to-define-a-simple-boolean-term-rewriter-properly-in-symbolics/90749/2 "2022-11-28T07:09:06Z")

</div>

```julia
using SymbolicUtils, SymbolicUtils.Rewriters
r = Postwalk(Chain([@rule ~x & ~x => ~x]))
@syms a::Bool b::Bool
r(a & a) # a
r(a & a & a) # a
r((a & a) & b) # a & b
r(a & a & a & a) # a

```
