Backend fails to simplify complex shift expressions with bitwise AND operations

Aperta
#4,112 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
haskell
Ambito
backend

Direzione di ricerca

Inizia dal caso che fallisce in src/tests/integration/test-data/specs/xx.k e confrontalo con le due espressioni funzionanti mostrate nell’issue. Analizza come il backend combina lo shift, AND bit a bit e il ragionamento aritmetico, incluse le annotazioni smt-lemma tentate. Il lavoro è completato quando l’espressione complessa si semplifica in true e il caso di integrazione passa.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem Description

We've encountered an issue where the K backend fails to simplify certain complex expressions involving bit shifts and logical operations, even when simpler variants of the same expressions work correctly.

Failing Case

The following simplification rule fails:

0 <=Int (Bytes2Int(substrBytes(W3, 8, 12), LE, Unsigned) +Int Y +Int Z &Int 4294967295) >>Int 8 => true
Working Cases

However, these similar expressions work correctly:

// This works when X is a simple variable
0 <=Int X >>Int 8 => true
  requires 0 <=Int X

// This works for the complex term without the shift
0 <=Int Bytes2Int(substrBytes(W3, 8, 12), LE, Unsigned) +Int Y +Int Z &Int 4294967295 => true
Root Cause Analysis

The backend cannot infer the complex case from the combination of the two working cases. This suggests a limitation in the theorem prover's ability to compose logical reasoning across multiple steps.

Attempted Solutions
  1. SMT Lemmas: Adding smt-lemma annotations to the <=Int rules didn't resolve the issue.
Questions
  1. Is there a recommended workaround for cases where the backend cannot perform multi-step logical inference?
  2. What's the best way to utilize theory reasoning for complex expressions like this?
Environment
Expected Behavior

The complex shift expression should simplify to true just like its simpler components do.

Additional Context

This issue is blocking the completion of PR #137, which aims to fix unsimplified bytes2int o int2bytes patterns in the RISC-V semantics. But we have another way to solve this issue.

Lingua principale
Haskell
Stelle
228
Fork
46
Merge medio
21h 48m
PR unite (30g)
1

Preparare l'ambiente

  • Nessun Dockerfile né file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di runtimeverification/haskell-backend

Tutte le issue di runtimeverification/haskell-backend

Issue simili

Altre issue su Haskell

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.